]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
further attempt at workaround for Mac texmatrix bug,
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Sat, 3 May 2008 11:05:32 +0000 (11:05 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Sat, 3 May 2008 11:05:32 +0000 (11:05 +0000)
gl_workaround_mac_texmatrix now has values in the range 0 to 7 with
different behaviors to try
eliminated GL_ClientActiveTexture function, now client active texture
always matches server active texture (in hopes of fixing Mac bug)

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8271 d7cf8633-e32d-0410-b094-e92efae38249

gl_backend.c
gl_backend.h

index d8b1302b0f394c22dc527feff196d2a1679cc10c..de7c0c254dce9514e0176d0c8703b59a63eb3a68 100644 (file)
@@ -526,7 +526,6 @@ static struct gl_state_s
        int alphatest;
        int scissortest;
        unsigned int unit;
-       unsigned int clientunit;
        gltextureunit_t units[MAX_TEXTUREUNITS];
        float color4f[4];
        int lockrange_first;
@@ -571,7 +570,6 @@ void GL_SetupTextureState(void)
        gltextureunit_t *unit;
        CHECKGLERROR
        gl_state.unit = MAX_TEXTUREUNITS;
-       gl_state.clientunit = MAX_TEXTUREUNITS;
        for (i = 0;i < MAX_TEXTUREUNITS;i++)
        {
                unit = gl_state.units + i;
@@ -609,7 +607,7 @@ void GL_SetupTextureState(void)
 
        for (i = 0;i < backendarrayunits;i++)
        {
-               GL_ClientActiveTexture(i);
+               GL_ActiveTexture(i);
                GL_BindVBO(0);
                qglTexCoordPointer(2, GL_FLOAT, sizeof(float[2]), NULL);CHECKGLERROR
                qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
@@ -719,20 +717,7 @@ void GL_ActiveTexture(unsigned int num)
                {
                        CHECKGLERROR
                        qglActiveTexture(GL_TEXTURE0_ARB + gl_state.unit);
-                       CHECKGLERROR
-               }
-       }
-}
-
-void GL_ClientActiveTexture(unsigned int num)
-{
-       if (gl_state.clientunit != num)
-       {
-               gl_state.clientunit = num;
-               if (qglActiveTexture)
-               {
-                       CHECKGLERROR
-                       qglClientActiveTexture(GL_TEXTURE0_ARB + gl_state.clientunit);
+                       qglClientActiveTexture(GL_TEXTURE0_ARB + gl_state.unit);
                        CHECKGLERROR
                }
        }
@@ -1151,7 +1136,7 @@ void R_Mesh_Draw(int firstvertex, int numvertices, int firsttriangle, int numtri
                {
                        if (gl_state.units[i].arrayenabled)
                        {
-                               GL_ClientActiveTexture(i);
+                               GL_ActiveTexture(i);
                                if (!qglIsEnabled(GL_TEXTURE_COORD_ARRAY))
                                        Con_Print("R_Mesh_Draw: texcoord array set but not enabled\n");
                                CHECKGLERROR
@@ -1544,7 +1529,7 @@ void R_Mesh_TexCoordPointer(unsigned int unitnum, unsigned int numcomponents, co
                if (!unit->arrayenabled)
                {
                        unit->arrayenabled = true;
-                       GL_ClientActiveTexture(unitnum);
+                       GL_ActiveTexture(unitnum);
                        qglEnableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
                }
                // texcoord array
@@ -1554,7 +1539,7 @@ void R_Mesh_TexCoordPointer(unsigned int unitnum, unsigned int numcomponents, co
                        unit->pointer_texcoord_buffer = bufferobject;
                        unit->pointer_texcoord_offset = bufferoffset;
                        unit->arraycomponents = numcomponents;
-                       GL_ClientActiveTexture(unitnum);
+                       GL_ActiveTexture(unitnum);
                        GL_BindVBO(bufferobject);
                        qglTexCoordPointer(unit->arraycomponents, GL_FLOAT, sizeof(float) * unit->arraycomponents, bufferobject ? (void *)bufferoffset : texcoord);CHECKGLERROR
                }
@@ -1565,7 +1550,7 @@ void R_Mesh_TexCoordPointer(unsigned int unitnum, unsigned int numcomponents, co
                if (unit->arrayenabled)
                {
                        unit->arrayenabled = false;
-                       GL_ClientActiveTexture(unitnum);
+                       GL_ActiveTexture(unitnum);
                        qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
                }
        }
@@ -1982,8 +1967,12 @@ void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix)
                        CHECKGLERROR
                        Matrix4x4_ToArrayDoubleGL(&unit->matrix, glmatrix);
                        GL_ActiveTexture(unitnum);
-                       GL_ClientActiveTexture(unitnum);
                        qglMatrixMode(GL_TEXTURE);CHECKGLERROR
+                       if (gl_workaround_mac_texmatrix.integer & 4)
+                       {
+                               qglActiveTexture(GL_TEXTURE0_ARB + gl_state.unit);
+                               qglClientActiveTexture(GL_TEXTURE0_ARB + gl_state.unit);
+                       }
                        qglLoadMatrixd(glmatrix);CHECKGLERROR
                        qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
                }
@@ -1997,18 +1986,16 @@ void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix)
                        unit->matrix = identitymatrix;
                        CHECKGLERROR
                        GL_ActiveTexture(unitnum);
-                       GL_ClientActiveTexture(unitnum);
                        qglMatrixMode(GL_TEXTURE);CHECKGLERROR
+                       qglLoadIdentity();CHECKGLERROR
                        if (gl_workaround_mac_texmatrix.integer)
                        {
+                               qglActiveTexture(GL_TEXTURE0_ARB + gl_state.unit);
+                               qglClientActiveTexture(GL_TEXTURE0_ARB + gl_state.unit);
                                qglLoadMatrixd(gl_identitymatrix);CHECKGLERROR
-                               if (gl_workaround_mac_texmatrix.integer == 2)
+                               if (gl_workaround_mac_texmatrix.integer & 1)
                                        qglLoadIdentity();CHECKGLERROR
                        }
-                       else
-                       {
-                               qglLoadIdentity();CHECKGLERROR
-                       }
                        qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
                }
        }
@@ -2166,7 +2153,7 @@ void R_Mesh_ResetTextureState(void)
                if (unit->arrayenabled)
                {
                        unit->arrayenabled = false;
-                       GL_ClientActiveTexture(unitnum);
+                       GL_ActiveTexture(unitnum);
                        qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
                }
        }
index 5ecff60fd7c8abb6e3c89991f6211fdd3aa659b5..df9ff65bbf5f6720e1ab7a6a538ed029c5e8a5e3 100644 (file)
@@ -28,7 +28,6 @@ void GL_Color(float cr, float cg, float cb, float ca);
 void GL_TransformToScreen(const vec4_t in, vec4_t out);
 void GL_LockArrays(int first, int count);
 void GL_ActiveTexture(unsigned int num);
-void GL_ClientActiveTexture(unsigned int num);
 void GL_Scissor(int x, int y, int width, int height);
 void GL_ScissorTest(int state);
 void GL_Clear(int mask);