Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "rasterizer.h"
- void clearFrameBuffer(u8 *fb, u32 color)
- {
- u8* i = fb;
- u8* c_inf = (u8*)&color;
- for (i; i < fb + (240*400*3); i += 3)
- {
- *i = c_inf[3];
- *(i+1) = c_inf[2];
- *(i+2) = c_inf[1];
- }
- }
- void pixel2D(u8* fb, u16 x, u16 y, u32 color)
- {
- u8 *p = (u32*)(fb + (3 * (y + (x * 240))));
- u8* c_inf = (u8*)&color;
- if (fb && x >= 0 && x < 240 && y >= 0 && y < 400)
- {
- *p = c_inf[3];
- *++p = c_inf[2];
- *++p = c_inf[1];
- }
- }
- void box2D(u8 *fb, u16 x1, u16 y1, u16 w, u16 h, u32 color)
- {
- if (!fb)
- return;
- u16 x, y;
- u8* c_inf = (u8*)&color;
- for (y = y1; y <= y1+h; y++)
- {
- fb[3 * (y + (x1*240))] = c_inf[3];
- fb[3 * (y + (x1*240)) + 1] = c_inf[2];
- fb[3 * (y + (x1*240)) + 2] = c_inf[1];
- fb[3 * (y + ((x1+w)*240))] = c_inf[3];
- fb[3 * (y + ((x1+w)*240)) + 1] = c_inf[2];
- fb[3 * (y + ((x1+w)*240)) + 2] = c_inf[1];
- }
- for (x = x1 + 1; x < x1 + w; x++)
- {
- fb[3 * (y1 + (x*240))] = c_inf[3];
- fb[3 * (y1 + (x*240)) + 1] = c_inf[2];
- fb[3 * (y1 + (x*240)) + 2] = c_inf[1];
- fb[3 * ((y1+h) + (x*240))] = c_inf[3];
- fb[3 * ((y1+h) + (x*240)) + 1] = c_inf[2];
- fb[3 * ((y1+h) + (x*240)) + 2] = c_inf[1];
- }
- }
- void fillBox2D(u8 *fb, u16 x, u16 y, u16 w, u16 h, u32 color)
- {
- if (!fb)
- return;
- if (x >= 0 && x + w < 400 && y >= 0 && y + h < 240)
- {
- u8 *c_inf = (u8*)&color;
- int i;
- int ii;
- int tmp_x;
- for (i=x; i < x + w; i++)
- {
- tmp_x = i*240;
- for (ii=y; ii < y + h; ii++)
- {
- fb[3 * (ii + tmp_x)] = c_inf[3];
- fb[3 * (ii + tmp_x) + 1] = c_inf[2];
- fb[3 * (ii + tmp_x) + 2] = c_inf[1];
- }
- }
- }
- }
- void line2D(u8* fb, u16 x1, u16 y1, u16 x2, u16 y2, u32 color)
- {
- // Based upon bresenham implementation from wikipedia (de))
- if (!fb)
- return;
- u8* c_inf = (u8*)&color;
- s32 x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err;
- dx = x2 - x1;
- dy = y2 - y1;
- incx = (dx > 0) ? 1 : (dx < 0) ? -1 : 0;;
- incy = (dy > 0) ? 1 : (dy < 0) ? -1 : 0;;
- if(dx<0) dx = -dx;
- if(dy<0) dy = -dy;
- if (dx>dy) {
- pdx=incx; pdy=0;
- ddx=incx; ddy=incy;
- es =dy; el =dx;
- }
- else {
- pdx=0; pdy=incy;
- ddx=incx; ddy=incy;
- es =dx; el =dy;
- }
- x = x1;
- y = y1;
- err = el/2;
- fb[3 * (y + (x*240))] = c_inf[3];
- fb[3 * (y + (x*240))+1] = c_inf[2];
- fb[3 * (y + (x*240))+2] = c_inf[1];
- //setPixel(dp, x, y, c);
- for(t=0; t<el; ++t) {
- err -= es;
- if(err<0) {
- err += el;
- x += ddx;
- y += ddy;
- }
- else {
- x += pdx;
- y += pdy;
- }
- //setPixel(dp, x, y, c);
- fb[3 * (y + (x*240))] = c_inf[3];
- fb[3 * (y + (x*240))+1] = c_inf[2];
- fb[3 * (y + (x*240))+2] = c_inf[1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement