diff options
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/dd.h | 11 | ||||
-rw-r--r-- | src/mesa/main/light.c | 66 | ||||
-rw-r--r-- | src/mesa/main/light.h | 6 |
3 files changed, 68 insertions, 15 deletions
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 4d4264978f3..818a6143f2d 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1,4 +1,4 @@ -/* $Id: dd.h,v 1.51 2001/02/06 21:42:48 brianp Exp $ */ +/* $Id: dd.h,v 1.52 2001/02/15 01:33:52 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -815,6 +815,15 @@ struct dd_function_table { void (*EdgeFlagPointer)(GLcontext *ctx, GLsizei stride, const GLvoid *ptr); + /*** + *** TNL Pipeline + ***/ + + void (*PipelineStart)(GLcontext *ctx); + void (*PipelineFinish)(GLcontext *ctx); + /* Called before and after all pipeline stages. + * These are a suitable place for grabbing/releasing hardware locks. + */ /*** *** Rendering diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c index 50bd041f190..155792af52b 100644 --- a/src/mesa/main/light.c +++ b/src/mesa/main/light.c @@ -1,4 +1,4 @@ -/* $Id: light.c,v 1.36 2001/02/13 23:55:30 brianp Exp $ */ +/* $Id: light.c,v 1.37 2001/02/15 01:33:52 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -535,6 +535,54 @@ GLuint gl_material_bitmask( GLcontext *ctx, GLenum face, GLenum pname, } +/* Perform a straight copy between pairs of materials. + */ +void gl_copy_material_pairs( struct gl_material dst[2], + const struct gl_material src[2], + GLuint bitmask ) +{ + if (bitmask & FRONT_EMISSION_BIT) { + COPY_4FV( dst[0].Emission, src[0].Emission ); + } + if (bitmask & BACK_EMISSION_BIT) { + COPY_4FV( dst[1].Emission, src[1].Emission ); + } + if (bitmask & FRONT_AMBIENT_BIT) { + COPY_4FV( dst[0].Ambient, src[0].Ambient ); + } + if (bitmask & BACK_AMBIENT_BIT) { + COPY_4FV( dst[1].Ambient, src[1].Ambient ); + } + if (bitmask & FRONT_DIFFUSE_BIT) { + COPY_4FV( dst[0].Diffuse, src[0].Diffuse ); + } + if (bitmask & BACK_DIFFUSE_BIT) { + COPY_4FV( dst[1].Diffuse, src[1].Diffuse ); + } + if (bitmask & FRONT_SPECULAR_BIT) { + COPY_4FV( dst[0].Specular, src[0].Specular ); + } + if (bitmask & BACK_SPECULAR_BIT) { + COPY_4FV( dst[1].Specular, src[1].Specular ); + } + if (bitmask & FRONT_SHININESS_BIT) { + dst[0].Shininess = src[0].Shininess; + } + if (bitmask & BACK_SHININESS_BIT) { + dst[1].Shininess = src[1].Shininess; + } + if (bitmask & FRONT_INDEXES_BIT) { + dst[0].AmbientIndex = src[0].AmbientIndex; + dst[0].DiffuseIndex = src[0].DiffuseIndex; + dst[0].SpecularIndex = src[0].SpecularIndex; + } + if (bitmask & BACK_INDEXES_BIT) { + dst[1].AmbientIndex = src[1].AmbientIndex; + dst[1].DiffuseIndex = src[1].DiffuseIndex; + dst[1].SpecularIndex = src[1].SpecularIndex; + } +} + /* * Check if the global material has to be updated with info that was @@ -545,11 +593,7 @@ GLuint gl_material_bitmask( GLcontext *ctx, GLenum face, GLenum pname, * * src[0] is front material, src[1] is back material * - * KW: Added code here to keep the precomputed variables uptodate. - * This means we can use the faster shade functions when using - * GL_COLOR_MATERIAL, and we can also now use the precomputed - * values in the slower shading functions, which further offsets - * the cost of doing this here. + * Additionally keeps the precomputed lighting state uptodate. */ void gl_update_material( GLcontext *ctx, const struct gl_material src[2], @@ -610,9 +654,6 @@ void gl_update_material( GLcontext *ctx, if (bitmask & FRONT_DIFFUSE_BIT) { struct gl_material *mat = &ctx->Light.Material[0]; COPY_4FV( mat->Diffuse, src[0].Diffuse ); -/* fprintf(stderr, "FRONT_DIFFUSE %f %f %f %f\n", */ -/* mat->Diffuse[0], mat->Diffuse[1], */ -/* mat->Diffuse[2], mat->Diffuse[3]); */ foreach (light, list) { SCALE_3V( light->_MatDiffuse[0], light->Diffuse, mat->Diffuse ); } @@ -621,9 +662,6 @@ void gl_update_material( GLcontext *ctx, if (bitmask & BACK_DIFFUSE_BIT) { struct gl_material *mat = &ctx->Light.Material[1]; COPY_4FV( mat->Diffuse, src[1].Diffuse ); -/* fprintf(stderr, "BACK_DIFFUSE %f %f %f %f\n", */ -/* mat->Diffuse[0], mat->Diffuse[1], */ -/* mat->Diffuse[2], mat->Diffuse[3]); */ foreach (light, list) { SCALE_3V( light->_MatDiffuse[1], light->Diffuse, mat->Diffuse ); } @@ -647,7 +685,6 @@ void gl_update_material( GLcontext *ctx, } if (bitmask & FRONT_SHININESS_BIT) { -/* fprintf(stderr, "FRONT_SHININESS_BIT %f\n", src[0].Shininess); */ ctx->Light.Material[0].Shininess = src[0].Shininess; gl_invalidate_shine_table( ctx, 0 ); } @@ -692,6 +729,9 @@ void gl_update_material( GLcontext *ctx, + + + /* * Update the current materials from the given rgba color * according to the bitmask in ColorMaterialBitmask, which is diff --git a/src/mesa/main/light.h b/src/mesa/main/light.h index b39aa002d87..38ca33815f8 100644 --- a/src/mesa/main/light.h +++ b/src/mesa/main/light.h @@ -1,4 +1,4 @@ -/* $Id: light.h,v 1.9 2001/02/06 04:06:35 keithw Exp $ */ +/* $Id: light.h,v 1.10 2001/02/15 01:33:52 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -114,6 +114,10 @@ extern void gl_update_material( GLcontext *ctx, const struct gl_material src[2], GLuint bitmask ); +extern void gl_copy_material_pairs( struct gl_material dst[2], + const struct gl_material src[2], + GLuint bitmask ); + extern void gl_update_color_material( GLcontext *ctx, const GLchan rgba[4] ); |