projects
/
gba_blender
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
panning
[gba_blender]
/
src
/
polyfill.c
diff --git
a/src/polyfill.c
b/src/polyfill.c
index
856ea5f
..
18294f5
100644
(file)
--- a/
src/polyfill.c
+++ b/
src/polyfill.c
@@
-208,6
+208,19
@@
int clip_line(int *x0, int *y0, int *x1, int *y1, int xmin, int ymin, int xmax,
return 1;
}
return 1;
}
+#ifdef ALT_LCLIP
+#define PUTPIXEL(ptr) \
+ do { \
+ if(x0 >= 0 && x0 < fbwidth && y0 >= 0 && y0 < fbheight) { \
+ uint16_t *pptr = (uint16_t*)((uint32_t)ptr & 0xfffffffe); \
+ if((uint32_t)ptr & 1) { \
+ *pptr = (*pptr & 0xff) | (color << 8); \
+ } else { \
+ *pptr = (*pptr & 0xff00) | color; \
+ } \
+ } \
+ } while(0)
+#else /* !ALT_LCLIP */
#define PUTPIXEL(ptr) \
do { \
uint16_t *pptr = (uint16_t*)((uint32_t)ptr & 0xfffffffe); \
#define PUTPIXEL(ptr) \
do { \
uint16_t *pptr = (uint16_t*)((uint32_t)ptr & 0xfffffffe); \
@@
-217,10
+230,14
@@
int clip_line(int *x0, int *y0, int *x1, int *y1, int xmin, int ymin, int xmax,
*pptr = (*pptr & 0xff00) | color; \
} \
} while(0)
*pptr = (*pptr & 0xff00) | color; \
} \
} while(0)
+#endif
void draw_line(int x0, int y0, int x1, int y1, unsigned short color)
{
int i, dx, dy, x_inc, y_inc, error;
void draw_line(int x0, int y0, int x1, int y1, unsigned short color)
{
int i, dx, dy, x_inc, y_inc, error;
+#ifdef ALT_LCLIP
+ int y0inc;
+#endif
unsigned char *fbptr = fb;
fbptr += y0 * fbwidth + x0;
unsigned char *fbptr = fb;
fbptr += y0 * fbwidth + x0;
@@
-236,8
+253,14
@@
void draw_line(int x0, int y0, int x1, int y1, unsigned short color)
}
if(dy >= 0) {
y_inc = fbwidth;
}
if(dy >= 0) {
y_inc = fbwidth;
+#ifdef ALT_LCLIP
+ y0inc = 1;
+#endif
} else {
y_inc = -fbwidth;
} else {
y_inc = -fbwidth;
+#ifdef ALT_LCLIP
+ y0inc = -1;
+#endif
dy = -dy;
}
dy = -dy;
}
@@
-248,9
+271,15
@@
void draw_line(int x0, int y0, int x1, int y1, unsigned short color)
if(error >= 0) {
error -= dx * 2;
fbptr += y_inc;
if(error >= 0) {
error -= dx * 2;
fbptr += y_inc;
+#ifdef ALT_LCLIP
+ y0 += y0inc;
+#endif
}
error += dy * 2;
fbptr += x_inc;
}
error += dy * 2;
fbptr += x_inc;
+#ifdef ALT_LCLIP
+ x0 += x_inc;
+#endif
}
} else {
error = dx * 2 - dy;
}
} else {
error = dx * 2 - dy;
@@
-259,9
+288,15
@@
void draw_line(int x0, int y0, int x1, int y1, unsigned short color)
if(error >= 0) {
error -= dy * 2;
fbptr += x_inc;
if(error >= 0) {
error -= dy * 2;
fbptr += x_inc;
+#ifdef ALT_LCLIP
+ x0 += x_inc;
+#endif
}
error += dx * 2;
fbptr += y_inc;
}
error += dx * 2;
fbptr += y_inc;
+#ifdef ALT_LCLIP
+ y0 += y0inc;
+#endif
}
}
}
}
}
}