Disable vertex shader fog, compute fog in fragment shader.
authorBrian <brian.paul@tungstengraphics.com>
Tue, 25 Sep 2007 21:18:51 +0000 (15:18 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Tue, 25 Sep 2007 21:18:51 +0000 (15:18 -0600)
src/mesa/main/texenvprogram.c
src/mesa/state_tracker/st_context.c

index 37f8fc8090813daee6aeddd5b80d7210a4134a38..48c28d45ca2af2753a4b241ed425e84b1f6dbb97 100644 (file)
@@ -1097,15 +1097,21 @@ create_new_program(GLcontext *ctx, struct state_key *key,
    ASSERT(p.program->Base.NumInstructions <= MAX_INSTRUCTIONS);
 
    /* Allocate final instruction array */
-   program->Base.Instructions
-      = _mesa_alloc_instructions(program->Base.NumInstructions);
-   if (!program->Base.Instructions) {
+   p.program->Base.Instructions
+      = _mesa_alloc_instructions(p.program->Base.NumInstructions);
+   if (!p.program->Base.Instructions) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY,
                   "generating tex env program");
       return;
    }
-   _mesa_copy_instructions(program->Base.Instructions, instBuffer,
-                           program->Base.NumInstructions);
+   _mesa_copy_instructions(p.program->Base.Instructions, instBuffer,
+                           p.program->Base.NumInstructions);
+
+   if (p.program->FogOption) {
+      _mesa_append_fog_code(ctx, p.program);
+      p.program->FogOption = GL_NONE;
+   }
+
 
    /* Notify driver the fragment program has (actually) changed.
     */
index e0304dd22db5ba2dc83af6a3b3034d7c677c7b5c..7c20b036a44201b08f3aff13828fa7171f6dbefa 100644 (file)
@@ -26,6 +26,8 @@
  **************************************************************************/
 
 #include "main/imports.h"
+#include "main/extensions.h"
+#include "tnl/tnl.h"
 #include "vbo/vbo.h"
 #include "st_public.h"
 #include "st_context.h"
@@ -98,6 +100,9 @@ struct st_context *st_create_context( GLcontext *ctx,
    /* XXXX This is temporary! */
    _mesa_enable_sw_extensions(ctx);
 
+   /* we'll always do per-pixel fog in the fragment shader */
+   _tnl_allow_vertex_fog(ctx, GL_FALSE);
+
    return st;
 }