r128: fix two-sided lighting segfault seen in GLUT's olight demo
authorPeteri Andras <whysogreen@gmail.com>
Mon, 13 Jul 2009 14:03:16 +0000 (08:03 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 13 Jul 2009 14:04:08 +0000 (08:04 -0600)
src/mesa/drivers/dri/r128/r128_state.c
src/mesa/drivers/dri/r128/r128_tris.c
src/mesa/drivers/dri/r128/r128_tris.h

index 451dcd1b553a2e4327da48454cbb7a33ffebf1e3..4ae7bf5b97dc90de3fc8e30a19a0c13a29650436 100644 (file)
@@ -771,6 +771,11 @@ static void r128DDLightModelfv( GLcontext *ctx, GLenum pname,
       FLUSH_BATCH( rmesa );
       updateSpecularLighting(ctx);
    }
+
+   if ( pname == GL_LIGHT_MODEL_TWO_SIDE ) {
+      FLUSH_BATCH( rmesa );
+      r128ChooseRenderState( ctx );
+   }
 }
 
 static void r128DDShadeModel( GLcontext *ctx, GLenum mode )
index bcc9ffa651ea64090d1695dc6c660532e92150ae..5b91271d740779be2f6dcb6c8e1df0e7b82cdc40 100644 (file)
@@ -426,7 +426,7 @@ r128_fallback_point( r128ContextPtr rmesa,
 #define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
 #define _R128_NEW_RENDER_STATE (ANY_FALLBACK_FLAGS | ANY_RASTER_FLAGS)
 
-static void r128ChooseRenderState(GLcontext *ctx)
+void r128ChooseRenderState(GLcontext *ctx)
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    GLuint flags = ctx->_TriangleCaps;
index d90ca31534e4f0f3e6b74c8ff0d2a8459ba630dc..c0667edb61f71578f6c5d612da771bcf1e5e563a 100644 (file)
@@ -38,7 +38,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/mtypes.h"
 
 extern void r128InitTriFuncs( GLcontext *ctx );
-
+extern void r128ChooseRenderState( GLcontext *ctx );
 
 extern void r128Fallback( GLcontext *ctx, GLuint bit, GLboolean mode );
 #define FALLBACK( rmesa, bit, mode ) r128Fallback( rmesa->glCtx, bit, mode )