Fix setup.light_twoside determination.
authorBrian <brian.paul@tungstengraphics.com>
Fri, 13 Jul 2007 20:28:15 +0000 (14:28 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 13 Jul 2007 20:28:15 +0000 (14:28 -0600)
When a vertex program is used, use value of GL_VERTEX_PROGRAM_TWO_SIDE.
Otherwise, if FF lighting, use value of GL_LIGHT_MODEL_TWO_SIDE.

src/mesa/state_tracker/st_atom_setup.c

index 08f7a8a7325af8853bb07efbc26213d9a56cff05..6ee96f617841905d441fb0eabc59bb974f01dc62 100644 (file)
@@ -98,14 +98,18 @@ static void update_setup_state( struct st_context *st )
    if (ctx->Light.ShadeModel == GL_FLAT)
       setup.flatshade = 1;
 
-   /* _NEW_LIGHT 
+   /* _NEW_LIGHT | _NEW_PROGRAM
     *
-    * Not sure about the light->enabled requirement - does this still
-    * apply??
+    * Back-face colors can come from traditional lighting (when
+    * GL_LIGHT_MODEL_TWO_SIDE is set) or from vertex programs (when
+    * GL_VERTEX_PROGRAM_TWO_SIDE is set).  Note the logic here.
     */
-   if (ctx->Light.Enabled && 
-       ctx->Light.Model.TwoSide)
+   if (ctx->VertexProgram._Enabled) {
+      setup.light_twoside = ctx->VertexProgram.TwoSideEnabled;
+   }
+   else if (ctx->Light.Enabled && ctx->Light.Model.TwoSide) {
       setup.light_twoside = 1;
+   }
 
    /* _NEW_POLYGON
     */