Fix redundant glTexEnv calls gles
authorparasti <parasti@78b8d119-cf0a-0410-b17c-f493084dd1d7>
Sun, 12 Jun 2011 13:55:03 +0000 (13:55 +0000)
committerparasti <parasti@78b8d119-cf0a-0410-b17c-f493084dd1d7>
Sun, 12 Jun 2011 13:55:03 +0000 (13:55 +0000)
(Also comment on the crossbar issue.)

git-svn-id: https://s.snth.net/svn/neverball/branches/gles@3598 78b8d119-cf0a-0410-b17c-f493084dd1d7

share/geom.c

index da2346e..23a710c 100644 (file)
@@ -248,8 +248,6 @@ void clip_init(void)
     if (gli.max_texture_units < 3)
         return;
 
-    glActiveTexture_(GL_TEXTURE2);
-
     glGenTextures(1, &clip_text);
     glBindTexture(GL_TEXTURE_2D, clip_text);
 
@@ -263,6 +261,8 @@ void clip_init(void)
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
+    glActiveTexture_(GL_TEXTURE2);
+
     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
 
     /* Fade to black using stored alpha. */
@@ -350,6 +350,41 @@ void shad_init(void)
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
     }
 
+    glActiveTexture_(GL_TEXTURE1);
+
+    if (gli.max_texture_units < 3)
+    {
+        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
+    }
+    else
+    {
+        /*
+         * FIXME: we use texture "crossbar" (i.e., refer to other TUs
+         * directly) here which is not available in OpenGL ES
+         * 1.1. This can be fixed by a simple reordering of the
+         * texture stages but may require code changes all over the
+         * place.
+         */
+
+        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
+
+        /* Keep color intact. */
+
+        glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
+        glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
+        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
+
+        /* Multiply shadow alpha and clip alpha. */
+
+        glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
+        glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE1);
+        glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE2);
+        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
+        glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
+    }
+
+    glActiveTexture_(GL_TEXTURE0);
+
     clip_init();
 }
 
@@ -370,29 +405,6 @@ void shad_draw_set(void)
     {
         glEnable(GL_TEXTURE_2D);
         glBindTexture(GL_TEXTURE_2D, shad_text);
-
-        if (gli.max_texture_units < 3)
-        {
-            glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
-        }
-        else
-        {
-            glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
-
-            /* Keep color intact. */
-
-            glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
-            glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
-            glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
-
-            /* Multiply shadow alpha and clip alpha. */
-
-            glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
-            glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE1);
-            glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE2);
-            glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
-            glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
-        }
     }
     glActiveTexture_(GL_TEXTURE0);