Fixes for compiling without debug. Fix line clipping Fix unfilled polygon clipping (should be correct now).tags/mesa_3_5
@@ -1,4 +1,4 @@ | |||
/* $Id: s_context.c,v 1.8 2000/12/26 05:09:32 keithw Exp $ */ | |||
/* $Id: s_context.c,v 1.9 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -367,12 +367,17 @@ _swrast_Triangle( GLcontext *ctx, const SWvertex *v0, | |||
void | |||
_swrast_Line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 ) | |||
{ | |||
/* fprintf(stderr, "%s\n", __FUNCTION__); */ | |||
/* _swrast_print_vertex( ctx, v0 ); */ | |||
/* _swrast_print_vertex( ctx, v1 ); */ | |||
SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 ); | |||
} | |||
void | |||
_swrast_Point( GLcontext *ctx, const SWvertex *v0 ) | |||
{ | |||
/* fprintf(stderr, "%s\n", __FUNCTION__); */ | |||
/* _swrast_print_vertex( ctx, v0 ); */ | |||
SWRAST_CONTEXT(ctx)->Point( ctx, v0 ); | |||
} | |||
@@ -474,7 +479,6 @@ void | |||
_swrast_print_vertex( GLcontext *ctx, const SWvertex *v ) | |||
{ | |||
GLuint i; | |||
fprintf(stderr, "\n"); | |||
fprintf(stderr, "win %f %f %f %f\n", | |||
v->win[0], v->win[1], v->win[2], v->win[3]); | |||
@@ -491,4 +495,5 @@ _swrast_print_vertex( GLcontext *ctx, const SWvertex *v ) | |||
fprintf(stderr, "fog %f\n", v->fog); | |||
fprintf(stderr, "index %d\n", v->index); | |||
fprintf(stderr, "pointsize %f\n", v->pointSize); | |||
fprintf(stderr, "\n"); | |||
} |
@@ -1,4 +1,4 @@ | |||
/* $Id: t_array_import.c,v 1.1 2000/12/26 05:09:32 keithw Exp $ */ | |||
/* $Id: t_array_import.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -248,9 +248,10 @@ static void _tnl_upgrade_client_data( GLcontext *ctx, | |||
{ | |||
GLuint i; | |||
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; | |||
struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs; | |||
GLboolean writeable = (flags & VEC_NOT_WRITEABLE) != 0; | |||
GLboolean stride = (flags & VEC_BAD_STRIDE) != 0; | |||
struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs; | |||
(void) inputs; | |||
if ((required & VERT_CLIP) && VB->ClipPtr == VB->ObjPtr) | |||
required |= VERT_OBJ; |
@@ -1,4 +1,4 @@ | |||
/* $Id: t_vb_cliptmp.h,v 1.1 2000/12/26 05:09:33 keithw Exp $ */ | |||
/* $Id: t_vb_cliptmp.h,v 1.2 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -60,10 +60,14 @@ static GLuint TAG(userclip_line)( GLcontext *ctx, | |||
if (flagI ^ flagJ) { | |||
if (flagJ) { | |||
GLfloat t = dpI / (dpI - dpJ); | |||
VB->ClipMask[jj] |= CLIP_USER_BIT; | |||
jj = interp( ctx, t, ii, jj, GL_FALSE ); | |||
VB->ClipMask[jj] = 0; | |||
} else { | |||
GLfloat t = dpJ / (dpJ - dpI); | |||
VB->ClipMask[ii] |= CLIP_USER_BIT; | |||
ii = interp( ctx, t, jj, ii, GL_FALSE ); | |||
VB->ClipMask[ii] = 0; | |||
} | |||
} | |||
else if (flagI) | |||
@@ -86,8 +90,15 @@ static GLuint TAG(userclip_polygon)( GLcontext *ctx, | |||
GLfloat (*coord)[4] = VB->ClipPtr->data; | |||
GLuint vlist2[MAX_CLIPPED_VERTICES]; | |||
GLuint *inlist = vlist, *outlist = vlist2; | |||
GLubyte *clipmask = VB->ClipMask; | |||
GLuint p; | |||
#define CLIP_DOTPROD(xx) d*W(xx) + c*Z(xx) + b*Y(xx) + a*X(xx) | |||
/* Can be speeded up to if vertex_stage actually saves the | |||
* UserClipMask, and if it is used in this loop (after computing a | |||
* UserClipOrMask). | |||
*/ | |||
for (p=0;p<MAX_CLIP_PLANES;p++) { | |||
if (ctx->Transform.ClipEnabled[p]) { | |||
register float a = ctx->Transform._ClipUserPlane[p][0]; | |||
@@ -96,47 +107,63 @@ static GLuint TAG(userclip_polygon)( GLcontext *ctx, | |||
register float d = ctx->Transform._ClipUserPlane[p][3]; | |||
/* initialize prev to be last in the input list */ | |||
GLuint prevj = inlist[0]; | |||
GLfloat dpJ = d*W(prevj) + c*Z(prevj) + b*Y(prevj) + a*X(prevj); | |||
GLuint idxPrev = inlist[n-1]; | |||
GLfloat dpPrev = CLIP_DOTPROD(idxPrev); | |||
GLuint outcount = 0; | |||
GLuint curri; | |||
inlist[n] = inlist[0]; | |||
for (curri=1;curri<n+1;curri++) { GLuint currj = inlist[curri]; | |||
GLfloat dpI = d*W(currj) + c*Z(currj) + b*Y(currj) + a*X(currj); | |||
if (!NEGATIVE(dpJ)) { | |||
outlist[outcount++] = prevj; | |||
VB->ClipMask[prevj] &= ~CLIP_USER_BIT; | |||
GLuint i; | |||
for (i = 0 ; i < n ; i++) { | |||
GLuint idx = inlist[i]; | |||
GLfloat dp = CLIP_DOTPROD(idx); | |||
if (!NEGATIVE(dpPrev)) { | |||
outlist[outcount++] = idxPrev; | |||
clipmask[idxPrev] &= ~CLIP_USER_BIT; | |||
} else { | |||
VB->ClipMask[prevj] |= CLIP_USER_BIT; | |||
clipmask[idxPrev] |= CLIP_USER_BIT; | |||
} | |||
if (DIFFERENT_SIGNS(dpI, dpJ)) { | |||
if (NEGATIVE(dpI)) { | |||
GLfloat t = dpI/(dpI-dpJ); | |||
outlist[outcount++] = interp( ctx, t, currj, prevj, GL_TRUE); | |||
if (DIFFERENT_SIGNS(dp, dpPrev)) { | |||
GLuint newvert; | |||
if (NEGATIVE(dp)) { | |||
/* Going out of bounds. Avoid division by zero as we | |||
* know dp != dpPrev from DIFFERENT_SIGNS, above. | |||
*/ | |||
GLfloat t = dp / (dp - dpPrev); | |||
newvert = interp( ctx, t, idx, idxPrev, GL_TRUE ); | |||
/* fprintf(stderr,"Goint out: in: %d/%d out: %d/%d new: %d/%d\n", */ | |||
/* idxPrev, VB->EdgeFlagPtr->data[idxPrev], */ | |||
/* idx, VB->EdgeFlagPtr->data[idx], */ | |||
/* newvert, VB->EdgeFlagPtr->data[newvert]); */ | |||
} else { | |||
GLfloat t = dpJ/(dpJ-dpI); | |||
outlist[outcount++] = interp( ctx, t, prevj, currj, GL_FALSE); | |||
} | |||
/* Coming back in. | |||
*/ | |||
GLfloat t = dpPrev / (dpPrev - dp); | |||
newvert = interp( ctx, t, idxPrev, idx, GL_FALSE ); | |||
/* fprintf(stderr,"coming in: in: %d/%d out: %d/%d new: %d/%d\n", */ | |||
/* idx, VB->EdgeFlagPtr->data[idx], */ | |||
/* idxPrev, VB->EdgeFlagPtr->data[idxPrev], */ | |||
/* newvert, VB->EdgeFlagPtr->data[newvert]); */ | |||
} | |||
clipmask[newvert] = 0; | |||
outlist[outcount++] = newvert; | |||
} | |||
prevj = currj; | |||
dpJ = dpI; | |||
} | |||
idxPrev = idx; | |||
dpPrev = dp; | |||
} | |||
if (outcount < 3) | |||
return 0; | |||
else { | |||
{ | |||
GLuint *tmp; | |||
tmp = inlist; | |||
inlist = outlist; | |||
outlist = tmp; | |||
n = outcount; | |||
} | |||
} /* if */ | |||
} /* for p */ | |||
@@ -146,6 +173,10 @@ static GLuint TAG(userclip_polygon)( GLcontext *ctx, | |||
vlist[i] = inlist[i]; | |||
} | |||
/* fprintf(stderr, "%s: finally:\n", __FUNCTION__); */ | |||
/* for (i = 0 ; i < n ; i++) */ | |||
/* fprintf(stderr, "%d: %d\n", vlist[i], VB->EdgeFlagPtr->data[vlist[i]]); */ | |||
return n; | |||
} | |||
@@ -168,25 +199,29 @@ static void TAG(viewclip_line)( GLcontext *ctx, | |||
/* | |||
* We use 6 instances of this code to clip against the 6 planes. | |||
*/ | |||
#define GENERAL_CLIP \ | |||
if (mask & PLANE) { \ | |||
GLfloat dpI = CLIP_DOTPROD( ii ); \ | |||
GLfloat dpJ = CLIP_DOTPROD( jj ); \ | |||
\ | |||
if (DIFFERENT_SIGNS(dpI, dpJ)) { \ | |||
if (NEGATIVE(dpJ)) { \ | |||
GLfloat t = dpI / (dpI - dpJ); \ | |||
jj = interp( ctx, t, ii, jj, GL_FALSE ); \ | |||
} else { \ | |||
GLfloat t = dpJ / (dpJ - dpI); \ | |||
ii = interp( ctx, t, jj, ii, GL_FALSE ); \ | |||
} \ | |||
} \ | |||
else if (NEGATIVE(dpI)) \ | |||
return; \ | |||
} | |||
#define GENERAL_CLIP \ | |||
if (mask & PLANE) { \ | |||
GLfloat dpI = CLIP_DOTPROD( ii ); \ | |||
GLfloat dpJ = CLIP_DOTPROD( jj ); \ | |||
\ | |||
if (DIFFERENT_SIGNS(dpI, dpJ)) { \ | |||
if (NEGATIVE(dpJ)) { \ | |||
GLfloat t = dpI / (dpI - dpJ); \ | |||
VB->ClipMask[jj] |= PLANE; \ | |||
jj = interp( ctx, t, ii, jj, GL_FALSE ); \ | |||
VB->ClipMask[jj] = 0; \ | |||
} else { \ | |||
GLfloat t = dpJ / (dpJ - dpI); \ | |||
VB->ClipMask[ii] |= PLANE; \ | |||
ii = interp( ctx, t, jj, ii, GL_FALSE ); \ | |||
VB->ClipMask[ii] = 0; \ | |||
} \ | |||
} \ | |||
else if (NEGATIVE(dpI)) \ | |||
return; \ | |||
} | |||
#undef CLIP_DOTPROD | |||
#define PLANE CLIP_RIGHT_BIT | |||
#define CLIP_DOTPROD(K) (- X(K) + W(K)) | |||
@@ -271,11 +306,12 @@ static void TAG(viewclip_line)( GLcontext *ctx, | |||
} | |||
} | |||
if (ctx->Driver.BuildProjectedVertices) | |||
if (ctx->Driver.BuildProjectedVertices) | |||
ctx->Driver.BuildProjectedVertices(ctx, | |||
VB->FirstClipped, | |||
VB->LastClipped, | |||
~0); | |||
/* Render the new line. | |||
*/ |
@@ -1,4 +1,4 @@ | |||
/* $Id: t_vb_light.c,v 1.1 2000/12/26 05:09:33 keithw Exp $ */ | |||
/* $Id: t_vb_light.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -176,6 +176,8 @@ static GLboolean run_validate_lighting( GLcontext *ctx, | |||
} | |||
/* tab = _tnl_light_tab; */ | |||
} | |||
else | |||
tab = _tnl_light_ci_tab; | |||
if (ctx->Light.ColorMaterialEnabled) | |||
ind |= LIGHT_COLORMATERIAL; |
@@ -1,4 +1,4 @@ | |||
/* $Id: t_vb_normals.c,v 1.1 2000/12/26 05:09:33 keithw Exp $ */ | |||
/* $Id: t_vb_normals.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -64,6 +64,7 @@ static GLboolean run_normal_stage( GLcontext *ctx, | |||
if (VB->NormalLengthPtr) { | |||
GLfloat diff = VB->NormalLengthPtr[0] - | |||
1.0/LEN_3FV(VB->NormalPtr->data[0]); | |||
(void)diff; | |||
ASSERT((diff*diff) < .01); | |||
} | |||
@@ -1,4 +1,4 @@ | |||
/* $Id: t_vb_render.c,v 1.1 2000/12/26 05:09:33 keithw Exp $ */ | |||
/* $Id: t_vb_render.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -630,6 +630,7 @@ static void check_render( GLcontext *ctx, struct gl_pipeline_stage *stage ) | |||
if (ctx->_TriangleCaps & DD_TRI_UNFILLED) { | |||
inputs |= VERT_EDGE; | |||
interp |= INTERP_EDGE; | |||
} | |||
if (ctx->RenderMode==GL_FEEDBACK) { |
@@ -1,4 +1,4 @@ | |||
/* $Id: t_vb_rendertmp.h,v 1.1 2000/12/26 05:09:33 keithw Exp $ */ | |||
/* $Id: t_vb_rendertmp.h,v 1.2 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -105,9 +105,8 @@ static void TAG(render_line_strip)( GLcontext *ctx, | |||
RESET_OCCLUSION; | |||
INIT(GL_LINES); | |||
for (j=start+1; j<count; j++ ) { | |||
for (j=start+1; j<count; j++ ) | |||
RENDER_LINE( ELT(j-1), ELT(j) ); | |||
} | |||
if (TEST_PRIM_END(flags)) | |||
RESET_STIPPLE; | |||
@@ -273,55 +272,51 @@ static void TAG(render_poly_pv)( GLcontext *ctx, | |||
INIT(GL_POLYGON); | |||
if (NEED_EDGEFLAG_SETUP) { | |||
if (start+3 < count) { | |||
GLboolean efstart = EDGEFLAG_GET( ELT(start) ); | |||
GLboolean efcount = EDGEFLAG_GET( ELT(count-1) ); | |||
GLboolean efstart = EDGEFLAG_GET( ELT(start) ); | |||
GLboolean efcount = EDGEFLAG_GET( ELT(count-1) ); | |||
/* If the primitive does not begin here, the first edge | |||
* is non-boundary. | |||
*/ | |||
if (!TEST_PRIM_BEGIN(flags)) | |||
EDGEFLAG_SET( ELT(start), GL_FALSE ); | |||
/* If the primitive does not begin here, the first edge | |||
* is non-boundary. | |||
*/ | |||
if (!TEST_PRIM_BEGIN(flags)) | |||
EDGEFLAG_SET( ELT(start), GL_FALSE ); | |||
/* If the primitive does not end here, the final edge is | |||
* non-boundary. | |||
*/ | |||
if (!TEST_PRIM_END(flags)) | |||
EDGEFLAG_SET( ELT(count-1), GL_FALSE ); | |||
/* If the primitive does not end here, the final edge is | |||
* non-boundary. | |||
*/ | |||
if (!TEST_PRIM_END(flags)) | |||
EDGEFLAG_SET( ELT(count-1), GL_FALSE ); | |||
/* Draw the first triangle (possibly also the last). | |||
*/ | |||
if (j<count) { | |||
GLboolean ef = EDGEFLAG_GET( ELT(j) ); | |||
EDGEFLAG_SET( ELT(j), GL_FALSE ); | |||
RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 ); | |||
EDGEFLAG_SET( ELT(j), ef ); | |||
j++; | |||
} | |||
/* Draw the first triangles (possibly zero) | |||
*/ | |||
if (j<count-1) { | |||
GLboolean ef = EDGEFLAG_GET( ELT(j) ); | |||
EDGEFLAG_SET( ELT(j), GL_FALSE ); | |||
RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 ); | |||
EDGEFLAG_SET( ELT(j), ef ); | |||
j++; | |||
/* For internal tris, the first and last edges are non-boundary. | |||
/* Don't render the first edge again: | |||
*/ | |||
EDGEFLAG_SET( ELT(start), GL_FALSE ); | |||
for (;j<count-1;j++) { | |||
GLboolean ef = EDGEFLAG_GET( ELT(j) ); | |||
GLboolean efj = EDGEFLAG_GET( ELT(j) ); | |||
EDGEFLAG_SET( ELT(j), GL_FALSE ); | |||
RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 ); | |||
EDGEFLAG_SET( ELT(j), ef ); | |||
EDGEFLAG_SET( ELT(j), efj ); | |||
} | |||
} | |||
/* Draw the last triangle | |||
*/ | |||
if (j < count) { | |||
RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 ); | |||
j++; | |||
} | |||
/* Draw the last or only triangle | |||
*/ | |||
if (j < count) | |||
RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 ); | |||
/* Restore the first, last edgeflags: | |||
*/ | |||
EDGEFLAG_SET( ELT(count-1), efcount ); | |||
EDGEFLAG_SET( ELT(start), efstart ); | |||
} | |||
/* Restore the first and last edgeflags: | |||
*/ | |||
EDGEFLAG_SET( ELT(count-1), efcount ); | |||
EDGEFLAG_SET( ELT(start), efstart ); | |||
if (TEST_PRIM_END(flags)) { | |||
RESET_STIPPLE; |
@@ -1,4 +1,4 @@ | |||
/* $Id: 3dnow.c,v 1.12 2000/11/22 08:55:53 joukj Exp $ */ | |||
/* $Id: 3dnow.c,v 1.13 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -159,10 +159,10 @@ void gl_init_3dnow_transform_asm( void ) | |||
ASSIGN_XFORM_GROUP( 3dnow, 0, 3, raw ); | |||
ASSIGN_XFORM_GROUP( 3dnow, 0, 4, raw ); | |||
ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 1, masked ); | |||
ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 2, masked ); | |||
ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 3, masked ); | |||
ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 4, masked ); | |||
/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 1, masked ); */ | |||
/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 2, masked ); */ | |||
/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 3, masked ); */ | |||
/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 4, masked ); */ | |||
ASSIGN_NORM_GROUP( 3dnow, 0, raw ); | |||
/* ASSIGN_NORM_GROUP( 3dnow, CULL_MASK_ACTIVE, masked ); */ |
@@ -1,4 +1,4 @@ | |||
/* $Id: x86.c,v 1.13 2000/11/22 08:55:53 joukj Exp $ */ | |||
/* $Id: x86.c,v 1.14 2000/12/27 19:57:37 keithw Exp $ */ | |||
/* | |||
* Mesa 3-D graphics library | |||
@@ -115,9 +115,9 @@ void gl_init_x86_transform_asm( void ) | |||
ASSIGN_XFORM_GROUP( x86, 0, 3, raw ); | |||
ASSIGN_XFORM_GROUP( x86, 0, 4, raw ); | |||
ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 2, masked ); | |||
ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 3, masked ); | |||
ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 4, masked ); | |||
/* ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 2, masked ); */ | |||
/* ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 3, masked ); */ | |||
/* ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 4, masked ); */ | |||
/* XXX this function has been found to cause FP overflow exceptions */ | |||
gl_clip_tab[4] = gl_x86_cliptest_points4; |