added second 32bit z-buffer for 3d objects only for improve quality for distant objects. 16bit z-buffer is used only now for static z-buffer bitmaps.
This commit is contained in:
parent
317b32e491
commit
c842eabf93
8 changed files with 84 additions and 20 deletions
|
@ -159,6 +159,7 @@ void DriverTinyGL::positionCamera(Vector3d pos, Vector3d interest) {
|
||||||
void DriverTinyGL::clearScreen() {
|
void DriverTinyGL::clearScreen() {
|
||||||
memset(_zb->pbuf, 0, 640 * 480 * 2);
|
memset(_zb->pbuf, 0, 640 * 480 * 2);
|
||||||
memset(_zb->zbuf, 0, 640 * 480 * 2);
|
memset(_zb->zbuf, 0, 640 * 480 * 2);
|
||||||
|
memset(_zb->zbuf2, 0, 640 * 480 * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DriverTinyGL::flipBuffer() {
|
void DriverTinyGL::flipBuffer() {
|
||||||
|
|
|
@ -8,3 +8,5 @@ The changes made from the original version of TinyGL 0.4 are:
|
||||||
* Added 't/T' prefix to prevent OpenGl names duplication.
|
* Added 't/T' prefix to prevent OpenGl names duplication.
|
||||||
* Added light shading texture mapping mode.
|
* Added light shading texture mapping mode.
|
||||||
* Removed not needed code.
|
* Removed not needed code.
|
||||||
|
* Introduced second 32-bit z-buffer for 3d objects only,
|
||||||
|
and keeped 16-bit only for static z-buffer bitmaps.
|
||||||
|
|
|
@ -52,10 +52,18 @@ ZBuffer *ZB_open(int xsize, int ysize, int mode,
|
||||||
if (zb->zbuf == NULL)
|
if (zb->zbuf == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (frame_buffer == NULL) {
|
size = zb->xsize * zb->ysize * sizeof(unsigned long);
|
||||||
|
|
||||||
|
zb->zbuf2 = (unsigned long *)gl_malloc(size);
|
||||||
|
if (zb->zbuf2 == NULL) {
|
||||||
|
gl_free(zb->zbuf);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
if (frame_buffer == NULL) {
|
||||||
zb->pbuf = (PIXEL *)gl_malloc(zb->ysize * zb->linesize);
|
zb->pbuf = (PIXEL *)gl_malloc(zb->ysize * zb->linesize);
|
||||||
if (zb->pbuf == NULL) {
|
if (zb->pbuf == NULL) {
|
||||||
gl_free(zb->zbuf);
|
gl_free(zb->zbuf);
|
||||||
|
gl_free(zb->zbuf2);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
zb->frame_buffer_allocated = 1;
|
zb->frame_buffer_allocated = 1;
|
||||||
|
@ -83,6 +91,7 @@ void ZB_close(ZBuffer * zb)
|
||||||
gl_free(zb->pbuf);
|
gl_free(zb->pbuf);
|
||||||
|
|
||||||
gl_free(zb->zbuf);
|
gl_free(zb->zbuf);
|
||||||
|
gl_free(zb->zbuf2);
|
||||||
gl_free(zb);
|
gl_free(zb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +111,12 @@ void ZB_resize(ZBuffer * zb, void *frame_buffer, int xsize, int ysize)
|
||||||
gl_free(zb->zbuf);
|
gl_free(zb->zbuf);
|
||||||
zb->zbuf = (unsigned short *)gl_malloc(size);
|
zb->zbuf = (unsigned short *)gl_malloc(size);
|
||||||
|
|
||||||
if (zb->frame_buffer_allocated)
|
size = zb->xsize * zb->ysize * sizeof(unsigned long);
|
||||||
|
|
||||||
|
gl_free(zb->zbuf2);
|
||||||
|
zb->zbuf2 = (unsigned long *)gl_malloc(size);
|
||||||
|
|
||||||
|
if (zb->frame_buffer_allocated)
|
||||||
gl_free(zb->pbuf);
|
gl_free(zb->pbuf);
|
||||||
|
|
||||||
if (frame_buffer == NULL) {
|
if (frame_buffer == NULL) {
|
||||||
|
@ -330,6 +344,27 @@ void memset_s(void *adr, int val, int count)
|
||||||
*q++ = val;
|
*q++ = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void memset_l(void *adr, int val, int count)
|
||||||
|
{
|
||||||
|
int i, n, v;
|
||||||
|
unsigned int *p;
|
||||||
|
|
||||||
|
p = (unsigned int *)adr;
|
||||||
|
v = val;
|
||||||
|
n = count >> 2;
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
p[0] = v;
|
||||||
|
p[1] = v;
|
||||||
|
p[2] = v;
|
||||||
|
p[3] = v;
|
||||||
|
p += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
n = count & 3;
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
*p++ = val;
|
||||||
|
}
|
||||||
|
|
||||||
void ZB_clear(ZBuffer * zb, int clear_z, int z,
|
void ZB_clear(ZBuffer * zb, int clear_z, int z,
|
||||||
int clear_color, int r, int g, int b)
|
int clear_color, int r, int g, int b)
|
||||||
{
|
{
|
||||||
|
@ -338,7 +373,10 @@ void ZB_clear(ZBuffer * zb, int clear_z, int z,
|
||||||
PIXEL *pp;
|
PIXEL *pp;
|
||||||
|
|
||||||
if (clear_z) {
|
if (clear_z) {
|
||||||
memset_s(zb->zbuf, z, zb->xsize * zb->ysize);
|
memset_s(zb->zbuf, z, zb->xsize * zb->ysize);
|
||||||
|
}
|
||||||
|
if (clear_z) {
|
||||||
|
memset_l(zb->zbuf, z, zb->xsize * zb->ysize);
|
||||||
}
|
}
|
||||||
if (clear_color) {
|
if (clear_color) {
|
||||||
pp = zb->pbuf;
|
pp = zb->pbuf;
|
||||||
|
|
|
@ -43,6 +43,7 @@ typedef struct {
|
||||||
int mode;
|
int mode;
|
||||||
|
|
||||||
unsigned short *zbuf;
|
unsigned short *zbuf;
|
||||||
|
unsigned long *zbuf2;
|
||||||
PIXEL *pbuf;
|
PIXEL *pbuf;
|
||||||
int frame_buffer_allocated;
|
int frame_buffer_allocated;
|
||||||
|
|
||||||
|
|
|
@ -6,15 +6,17 @@
|
||||||
void ZB_plot(ZBuffer * zb, ZBufferPoint * p)
|
void ZB_plot(ZBuffer * zb, ZBufferPoint * p)
|
||||||
{
|
{
|
||||||
unsigned short *pz;
|
unsigned short *pz;
|
||||||
|
unsigned long *pz_2;
|
||||||
PIXEL *pp;
|
PIXEL *pp;
|
||||||
int zz;
|
int zz;
|
||||||
|
|
||||||
pz = zb->zbuf + (p->y * zb->xsize + p->x);
|
pz = zb->zbuf + (p->y * zb->xsize + p->x);
|
||||||
|
pz_2 = zb->zbuf2 + (p->y * zb->xsize + p->x);
|
||||||
pp = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p->y + p->x * PSZB);
|
pp = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p->y + p->x * PSZB);
|
||||||
zz = p->z >> ZB_POINT_Z_FRAC_BITS;
|
zz = p->z >> ZB_POINT_Z_FRAC_BITS;
|
||||||
if (ZCMP(zz, *pz)) {
|
if ((ZCMP(zz, *pz)) && (ZCMP(p->z, *pz_2)) ) {
|
||||||
*pp = RGB_TO_PIXEL(p->r, p->g, p->b);
|
*pp = RGB_TO_PIXEL(p->r, p->g, p->b);
|
||||||
*pz = zz;
|
*pz_2 = p->z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#endif
|
#endif
|
||||||
#ifdef INTERP_Z
|
#ifdef INTERP_Z
|
||||||
register unsigned short *pz;
|
register unsigned short *pz;
|
||||||
|
register unsigned long *pz_2;
|
||||||
int zinc;
|
int zinc;
|
||||||
register int z, zz;
|
register int z, zz;
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,6 +25,7 @@
|
||||||
pp = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p1->y + p1->x * PSZB);
|
pp = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p1->y + p1->x * PSZB);
|
||||||
#ifdef INTERP_Z
|
#ifdef INTERP_Z
|
||||||
pz = zb->zbuf + (p1->y * sx + p1->x);
|
pz = zb->zbuf + (p1->y * sx + p1->x);
|
||||||
|
pz_2 = zb->zbuf2 + (p1->y * sx + p1->x);
|
||||||
z = p1->z;
|
z = p1->z;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -48,9 +50,9 @@
|
||||||
#define PUTPIXEL() \
|
#define PUTPIXEL() \
|
||||||
{ \
|
{ \
|
||||||
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
||||||
if (ZCMP(zz,*pz)) { \
|
if ((ZCMP(zz,*pz)) && (ZCMP(z,*pz_2))) { \
|
||||||
RGBPIXEL; \
|
RGBPIXEL; \
|
||||||
*pz=zz; \
|
*pz_2=z; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
#else /* INTERP_Z */
|
#else /* INTERP_Z */
|
||||||
|
@ -73,8 +75,8 @@
|
||||||
PUTPIXEL();\
|
PUTPIXEL();\
|
||||||
ZZ(z+=zinc);\
|
ZZ(z+=zinc);\
|
||||||
RGB(r+=rinc;g+=ginc;b+=binc);\
|
RGB(r+=rinc;g+=ginc;b+=binc);\
|
||||||
if (a>0) { pp=(PIXEL *)((char *)pp + pp_inc_1); ZZ(pz+=(inc_1)); a-=dx; }\
|
if (a>0) { pp=(PIXEL *)((char *)pp + pp_inc_1); ZZ(pz+=(inc_1)); ZZ(pz_2+=(inc_1)); a-=dx; }\
|
||||||
else { pp=(PIXEL *)((char *)pp + pp_inc_2); ZZ(pz+=(inc_2)); a+=dy; }\
|
else { pp=(PIXEL *)((char *)pp + pp_inc_2); ZZ(pz+=(inc_2)); ZZ(pz_2+=(inc_2)); a+=dy; }\
|
||||||
} while (--n >= 0);
|
} while (--n >= 0);
|
||||||
|
|
||||||
/* fin macro */
|
/* fin macro */
|
||||||
|
|
|
@ -18,9 +18,9 @@ void ZB_fillTriangleFlat(ZBuffer *zb,
|
||||||
#define PUT_PIXEL(_a) \
|
#define PUT_PIXEL(_a) \
|
||||||
{ \
|
{ \
|
||||||
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
||||||
if (ZCMP(zz,pz[_a])) { \
|
if ((ZCMP(zz,pz[_a])) && (ZCMP(z,pz_2[_a]))) { \
|
||||||
pp[_a]=color; \
|
pp[_a]=color; \
|
||||||
pz[_a]=zz; \
|
pz_2[_a]=z; \
|
||||||
} \
|
} \
|
||||||
z+=dzdx; \
|
z+=dzdx; \
|
||||||
}
|
}
|
||||||
|
@ -54,10 +54,10 @@ void ZB_fillTriangleSmooth(ZBuffer *zb,
|
||||||
#define PUT_PIXEL(_a) \
|
#define PUT_PIXEL(_a) \
|
||||||
{ \
|
{ \
|
||||||
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
||||||
if (ZCMP(zz,pz[_a])) { \
|
if ((ZCMP(zz,pz[_a])) && (ZCMP(z,pz_2[_a]))) { \
|
||||||
tmp=rgb & 0xF81F07E0; \
|
tmp=rgb & 0xF81F07E0; \
|
||||||
pp[_a]=tmp | (tmp >> 16); \
|
pp[_a]=tmp | (tmp >> 16); \
|
||||||
pz[_a]=zz; \
|
pz_2[_a]=z; \
|
||||||
} \
|
} \
|
||||||
z+=dzdx; \
|
z+=dzdx; \
|
||||||
rgb=(rgb+drgbdx) & ( ~ 0x00200800); \
|
rgb=(rgb+drgbdx) & ( ~ 0x00200800); \
|
||||||
|
@ -66,12 +66,14 @@ void ZB_fillTriangleSmooth(ZBuffer *zb,
|
||||||
#define DRAW_LINE() \
|
#define DRAW_LINE() \
|
||||||
{ \
|
{ \
|
||||||
register unsigned short *pz; \
|
register unsigned short *pz; \
|
||||||
|
register unsigned long *pz_2; \
|
||||||
register PIXEL *pp; \
|
register PIXEL *pp; \
|
||||||
register unsigned int tmp,z,zz,rgb,drgbdx; \
|
register unsigned int tmp,z,zz,rgb,drgbdx; \
|
||||||
register int n; \
|
register int n; \
|
||||||
n=(x2 >> 16) - x1; \
|
n=(x2 >> 16) - x1; \
|
||||||
pp=pp1+x1; \
|
pp=pp1+x1; \
|
||||||
pz=pz1+x1; \
|
pz=pz1+x1; \
|
||||||
|
pz_2=pz2+x1; \
|
||||||
z=z1; \
|
z=z1; \
|
||||||
rgb=(r1 << 16) & 0xFFC00000; \
|
rgb=(r1 << 16) & 0xFFC00000; \
|
||||||
rgb|=(g1 >> 5) & 0x000007FF; \
|
rgb|=(g1 >> 5) & 0x000007FF; \
|
||||||
|
@ -83,12 +85,14 @@ void ZB_fillTriangleSmooth(ZBuffer *zb,
|
||||||
PUT_PIXEL(2); \
|
PUT_PIXEL(2); \
|
||||||
PUT_PIXEL(3); \
|
PUT_PIXEL(3); \
|
||||||
pz+=4; \
|
pz+=4; \
|
||||||
|
pz_2+=4; \
|
||||||
pp+=4; \
|
pp+=4; \
|
||||||
n-=4; \
|
n-=4; \
|
||||||
} \
|
} \
|
||||||
while (n>=0) { \
|
while (n>=0) { \
|
||||||
PUT_PIXEL(0); \
|
PUT_PIXEL(0); \
|
||||||
pz+=1; \
|
pz+=1; \
|
||||||
|
pz_2+=1; \
|
||||||
pp+=1; \
|
pp+=1; \
|
||||||
n-=1; \
|
n-=1; \
|
||||||
} \
|
} \
|
||||||
|
@ -118,9 +122,9 @@ void ZB_fillTriangleMapping(ZBuffer *zb,
|
||||||
#define PUT_PIXEL(_a) \
|
#define PUT_PIXEL(_a) \
|
||||||
{ \
|
{ \
|
||||||
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
zz=z >> ZB_POINT_Z_FRAC_BITS; \
|
||||||
if (ZCMP(zz,pz[_a])) { \
|
if ((ZCMP(zz,pz[_a])) && (ZCMP(z,pz_2[_a]))) { \
|
||||||
pp[_a]=texture[((t & 0x3FC00000) | s) >> 14]; \
|
pp[_a]=texture[((t & 0x3FC00000) | s) >> 14]; \
|
||||||
pz[_a]=zz; \
|
pz_2[_a]=z; \
|
||||||
} \
|
} \
|
||||||
z+=dzdx; \
|
z+=dzdx; \
|
||||||
s+=dsdx; \
|
s+=dsdx; \
|
||||||
|
@ -143,6 +147,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
ZBufferPoint *t,*pr1,*pr2,*l1,*l2;
|
ZBufferPoint *t,*pr1,*pr2,*l1,*l2;
|
||||||
float fdx1, fdx2, fdy1, fdy2, fz, d1, d2;
|
float fdx1, fdx2, fdy1, fdy2, fz, d1, d2;
|
||||||
unsigned short *pz1;
|
unsigned short *pz1;
|
||||||
|
unsigned long *pz2;
|
||||||
PIXEL *pp1;
|
PIXEL *pp1;
|
||||||
int part,update_left,update_right;
|
int part,update_left,update_right;
|
||||||
|
|
||||||
|
@ -245,6 +250,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
|
|
||||||
pp1 = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p0->y);
|
pp1 = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p0->y);
|
||||||
pz1 = zb->zbuf + p0->y * zb->xsize;
|
pz1 = zb->zbuf + p0->y * zb->xsize;
|
||||||
|
pz2 = zb->zbuf2 + p0->y * zb->xsize;
|
||||||
|
|
||||||
{
|
{
|
||||||
texture=zb->current_texture;
|
texture=zb->current_texture;
|
||||||
|
@ -350,6 +356,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
|
|
||||||
{
|
{
|
||||||
register unsigned short *pz;
|
register unsigned short *pz;
|
||||||
|
register unsigned long *pz_2;
|
||||||
register PIXEL *pp;
|
register PIXEL *pp;
|
||||||
register unsigned int s,t,z,zz,rgb,drgbdx;
|
register unsigned int s,t,z,zz,rgb,drgbdx;
|
||||||
register int n,dsdx,dtdx;
|
register int n,dsdx,dtdx;
|
||||||
|
@ -359,6 +366,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
zinv=(float)(1.0 / fz);
|
zinv=(float)(1.0 / fz);
|
||||||
pp=(PIXEL *)((char *)pp1 + x1 * PSZB);
|
pp=(PIXEL *)((char *)pp1 + x1 * PSZB);
|
||||||
pz=pz1+x1;
|
pz=pz1+x1;
|
||||||
|
pz_2=pz2+x1;
|
||||||
z=z1;
|
z=z1;
|
||||||
sz=sz1;
|
sz=sz1;
|
||||||
tz=tz1;
|
tz=tz1;
|
||||||
|
@ -381,7 +389,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
for (int _a = 0; _a < 8; _a++)
|
for (int _a = 0; _a < 8; _a++)
|
||||||
{
|
{
|
||||||
zz=z >> ZB_POINT_Z_FRAC_BITS;
|
zz=z >> ZB_POINT_Z_FRAC_BITS;
|
||||||
if (ZCMP(zz,pz[_a])) {
|
if ((ZCMP(zz,pz[_a])) && (ZCMP(z,pz_2[_a]))) {
|
||||||
tmp=rgb & 0xF81F07E0;
|
tmp=rgb & 0xF81F07E0;
|
||||||
unsigned int light = tmp | (tmp >> 16);
|
unsigned int light = tmp | (tmp >> 16);
|
||||||
PIXEL pixel = *(PIXEL *)((char *)texture+
|
PIXEL pixel = *(PIXEL *)((char *)texture+
|
||||||
|
@ -397,7 +405,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
c_b = (c_b * l_b) / 256;
|
c_b = (c_b * l_b) / 256;
|
||||||
pixel = ((c_r & 0xF8) << 8) | ((c_g & 0xFC) << 3) | (c_b >> 3);
|
pixel = ((c_r & 0xF8) << 8) | ((c_g & 0xFC) << 3) | (c_b >> 3);
|
||||||
pp[_a]=pixel;
|
pp[_a]=pixel;
|
||||||
pz[_a]=zz;
|
pz_2[_a]=z;
|
||||||
}
|
}
|
||||||
z+=dzdx;
|
z+=dzdx;
|
||||||
s+=dsdx;
|
s+=dsdx;
|
||||||
|
@ -406,6 +414,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
}
|
}
|
||||||
|
|
||||||
pz+=NB_INTERP;
|
pz+=NB_INTERP;
|
||||||
|
pz_2+=NB_INTERP;
|
||||||
pp=(PIXEL *)((char *)pp + NB_INTERP * PSZB);
|
pp=(PIXEL *)((char *)pp + NB_INTERP * PSZB);
|
||||||
n-=NB_INTERP;
|
n-=NB_INTERP;
|
||||||
sz+=ndszdx;
|
sz+=ndszdx;
|
||||||
|
@ -423,7 +432,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
while (n>=0) {
|
while (n>=0) {
|
||||||
{
|
{
|
||||||
zz=z >> ZB_POINT_Z_FRAC_BITS;
|
zz=z >> ZB_POINT_Z_FRAC_BITS;
|
||||||
if (ZCMP(zz,pz[0])) {
|
if ((ZCMP(zz,pz[0])) && (ZCMP(z,pz_2[0]))) {
|
||||||
tmp=rgb & 0xF81F07E0;
|
tmp=rgb & 0xF81F07E0;
|
||||||
unsigned int light = tmp | (tmp >> 16);
|
unsigned int light = tmp | (tmp >> 16);
|
||||||
PIXEL pixel = *(PIXEL *)((char *)texture+
|
PIXEL pixel = *(PIXEL *)((char *)texture+
|
||||||
|
@ -439,7 +448,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
c_b = (c_b * l_b) / 256;
|
c_b = (c_b * l_b) / 256;
|
||||||
pixel = ((c_r & 0xF8) << 8) | ((c_g & 0xFC) << 3) | (c_b >> 3);
|
pixel = ((c_r & 0xF8) << 8) | ((c_g & 0xFC) << 3) | (c_b >> 3);
|
||||||
pp[0]=pixel;
|
pp[0]=pixel;
|
||||||
pz[0]=zz;
|
pz_2[0]=z;
|
||||||
}
|
}
|
||||||
z+=dzdx;
|
z+=dzdx;
|
||||||
s+=dsdx;
|
s+=dsdx;
|
||||||
|
@ -447,6 +456,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
rgb=(rgb+drgbdx) & ( ~ 0x00200800);
|
rgb=(rgb+drgbdx) & ( ~ 0x00200800);
|
||||||
}
|
}
|
||||||
pz+=1;
|
pz+=1;
|
||||||
|
pz_2+=1;
|
||||||
pp=(PIXEL *)((char *)pp + PSZB);
|
pp=(PIXEL *)((char *)pp + PSZB);
|
||||||
n-=1;
|
n-=1;
|
||||||
}
|
}
|
||||||
|
@ -485,6 +495,7 @@ void ZB_fillTriangleMappingPerspective(ZBuffer *zb,
|
||||||
/* screen coordinates */
|
/* screen coordinates */
|
||||||
pp1=(PIXEL *)((char *)pp1 + zb->linesize);
|
pp1=(PIXEL *)((char *)pp1 + zb->linesize);
|
||||||
pz1+=zb->xsize;
|
pz1+=zb->xsize;
|
||||||
|
pz2+=zb->xsize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
ZBufferPoint *t,*pr1,*pr2,*l1,*l2;
|
ZBufferPoint *t,*pr1,*pr2,*l1,*l2;
|
||||||
float fdx1, fdx2, fdy1, fdy2, fz, d1, d2;
|
float fdx1, fdx2, fdy1, fdy2, fz, d1, d2;
|
||||||
unsigned short *pz1;
|
unsigned short *pz1;
|
||||||
|
unsigned long *pz2;
|
||||||
PIXEL *pp1;
|
PIXEL *pp1;
|
||||||
int part,update_left,update_right;
|
int part,update_left,update_right;
|
||||||
|
|
||||||
|
@ -134,6 +135,7 @@
|
||||||
|
|
||||||
pp1 = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p0->y);
|
pp1 = (PIXEL *) ((char *) zb->pbuf + zb->linesize * p0->y);
|
||||||
pz1 = zb->zbuf + p0->y * zb->xsize;
|
pz1 = zb->zbuf + p0->y * zb->xsize;
|
||||||
|
pz2 = zb->zbuf2 + p0->y * zb->xsize;
|
||||||
|
|
||||||
DRAW_INIT();
|
DRAW_INIT();
|
||||||
|
|
||||||
|
@ -247,6 +249,7 @@
|
||||||
register int n;
|
register int n;
|
||||||
#ifdef INTERP_Z
|
#ifdef INTERP_Z
|
||||||
register unsigned short *pz;
|
register unsigned short *pz;
|
||||||
|
register unsigned long *pz_2;
|
||||||
register unsigned int z,zz;
|
register unsigned int z,zz;
|
||||||
#endif
|
#endif
|
||||||
#ifdef INTERP_RGB
|
#ifdef INTERP_RGB
|
||||||
|
@ -263,6 +266,7 @@
|
||||||
pp=(PIXEL *)((char *)pp1 + x1 * PSZB);
|
pp=(PIXEL *)((char *)pp1 + x1 * PSZB);
|
||||||
#ifdef INTERP_Z
|
#ifdef INTERP_Z
|
||||||
pz=pz1+x1;
|
pz=pz1+x1;
|
||||||
|
pz_2=pz2+x1;
|
||||||
z=z1;
|
z=z1;
|
||||||
#endif
|
#endif
|
||||||
#ifdef INTERP_RGB
|
#ifdef INTERP_RGB
|
||||||
|
@ -285,6 +289,7 @@
|
||||||
PUT_PIXEL(3);
|
PUT_PIXEL(3);
|
||||||
#ifdef INTERP_Z
|
#ifdef INTERP_Z
|
||||||
pz+=4;
|
pz+=4;
|
||||||
|
pz_2+=4;
|
||||||
#endif
|
#endif
|
||||||
pp=(PIXEL *)((char *)pp + 4 * PSZB);
|
pp=(PIXEL *)((char *)pp + 4 * PSZB);
|
||||||
n-=4;
|
n-=4;
|
||||||
|
@ -293,6 +298,7 @@
|
||||||
PUT_PIXEL(0);
|
PUT_PIXEL(0);
|
||||||
#ifdef INTERP_Z
|
#ifdef INTERP_Z
|
||||||
pz+=1;
|
pz+=1;
|
||||||
|
pz_2+=1;
|
||||||
#endif
|
#endif
|
||||||
pp=(PIXEL *)((char *)pp + PSZB);
|
pp=(PIXEL *)((char *)pp + PSZB);
|
||||||
n-=1;
|
n-=1;
|
||||||
|
@ -349,6 +355,7 @@
|
||||||
/* screen coordinates */
|
/* screen coordinates */
|
||||||
pp1=(PIXEL *)((char *)pp1 + zb->linesize);
|
pp1=(PIXEL *)((char *)pp1 + zb->linesize);
|
||||||
pz1+=zb->xsize;
|
pz1+=zb->xsize;
|
||||||
|
pz2+=zb->xsize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue