]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
moved gl_state definition higher in the code
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 8 Dec 2009 01:46:18 +0000 (01:46 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 8 Dec 2009 01:46:18 +0000 (01:46 +0000)
replaced backendunits, backendimageunits, and backendarrayunits
references with vid.texunits, vid.teximageunits, vid.texarrayunits

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

gl_backend.c

index 20182617d62fd20f53535b5ec986b68d4a46c385..86b88dcd3f783781c2bc3ac6d9161d181a24c6db 100644 (file)
@@ -83,11 +83,72 @@ void GL_PrintError(int errornumber, char *filename, int linenumber)
 
 void SCR_ScreenShot_f (void);
 
 
 void SCR_ScreenShot_f (void);
 
+typedef struct gl_bufferobjectinfo_s
+{
+       int target;
+       int object;
+       size_t size;
+       char name[MAX_QPATH];
+}
+gl_bufferobjectinfo_t;
+
+typedef struct gltextureunit_s
+{
+       const void *pointer_texcoord;
+       size_t pointer_texcoord_offset;
+       int pointer_texcoord_buffer;
+       int t2d, t3d, tcubemap, trectangle;
+       int arrayenabled;
+       unsigned int arraycomponents;
+       int rgbscale, alphascale;
+       int combinergb, combinealpha;
+       // texmatrixenabled exists only to avoid unnecessary texmatrix compares
+       int texmatrixenabled;
+       matrix4x4_t matrix;
+}
+gltextureunit_t;
+
+typedef struct gl_state_s
+{
+       int cullface;
+       int cullfaceenable;
+       int blendfunc1;
+       int blendfunc2;
+       int blend;
+       GLboolean depthmask;
+       int colormask; // stored as bottom 4 bits: r g b a (3 2 1 0 order)
+       int depthtest;
+       float depthrange[2];
+       float polygonoffset[2];
+       int alphatest;
+       int scissortest;
+       unsigned int unit;
+       unsigned int clientunit;
+       gltextureunit_t units[MAX_TEXTUREUNITS];
+       float color4f[4];
+       int lockrange_first;
+       int lockrange_count;
+       int vertexbufferobject;
+       int elementbufferobject;
+       qboolean pointer_color_enabled;
+       const void *pointer_vertex;
+       const void *pointer_color;
+       size_t pointer_vertex_offset;
+       size_t pointer_color_offset;
+       int pointer_vertex_buffer;
+       int pointer_color_buffer;
+}
+gl_state_t;
+
+static gl_state_t gl_state;
+
+static memexpandablearray_t gl_bufferobjectinfoarray;
+
 static r_viewport_t backend_viewport;
 static matrix4x4_t backend_modelmatrix;
 static matrix4x4_t backend_modelviewmatrix;
 
 static r_viewport_t backend_viewport;
 static matrix4x4_t backend_modelmatrix;
 static matrix4x4_t backend_modelviewmatrix;
 
-static unsigned int backendunits, backendimageunits, backendarrayunits, backendactive;
+static unsigned int backendactive;
 
 /*
 note: here's strip order for a terrain row:
 
 /*
 note: here's strip order for a terrain row:
@@ -148,30 +209,11 @@ unsigned short polygonelement3s[(POLYGONELEMENTS_MAXPOINTS-2)*3];
 int quadelement3i[QUADELEMENTS_MAXQUADS*6];
 unsigned short quadelement3s[QUADELEMENTS_MAXQUADS*6];
 
 int quadelement3i[QUADELEMENTS_MAXQUADS*6];
 unsigned short quadelement3s[QUADELEMENTS_MAXQUADS*6];
 
-void GL_Backend_AllocArrays(void)
-{
-}
-
-void GL_Backend_FreeArrays(void)
-{
-}
-
 void GL_VBOStats_f(void)
 {
        GL_Mesh_ListVBOs(true);
 }
 
 void GL_VBOStats_f(void)
 {
        GL_Mesh_ListVBOs(true);
 }
 
-typedef struct gl_bufferobjectinfo_s
-{
-       int target;
-       int object;
-       size_t size;
-       char name[MAX_QPATH];
-}
-gl_bufferobjectinfo_t;
-
-memexpandablearray_t gl_bufferobjectinfoarray;
-
 static void gl_backend_start(void)
 {
        CHECKGLERROR
 static void gl_backend_start(void)
 {
        CHECKGLERROR
@@ -186,24 +228,14 @@ static void gl_backend_start(void)
                Con_DPrintf("GL_MAX_ELEMENTS_VERTICES = %i\nGL_MAX_ELEMENTS_INDICES = %i\n", gl_maxdrawrangeelementsvertices, gl_maxdrawrangeelementsindices);
        }
 
                Con_DPrintf("GL_MAX_ELEMENTS_VERTICES = %i\nGL_MAX_ELEMENTS_INDICES = %i\n", gl_maxdrawrangeelementsvertices, gl_maxdrawrangeelementsindices);
        }
 
-       backendunits = bound(1, gl_textureunits, MAX_TEXTUREUNITS);
-       backendimageunits = backendunits;
-       backendarrayunits = backendunits;
        if (gl_support_fragment_shader)
        {
        if (gl_support_fragment_shader)
        {
-               CHECKGLERROR
-               qglGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, (int *)&backendimageunits);
-               CHECKGLERROR
-               qglGetIntegerv(GL_MAX_TEXTURE_COORDS_ARB, (int *)&backendarrayunits);
-               CHECKGLERROR
-               Con_DPrintf("GLSL shader support detected: texture units = %i texenv, %i image, %i array\n", backendunits, backendimageunits, backendarrayunits);
-               backendimageunits = bound(1, backendimageunits, MAX_TEXTUREUNITS);
-               backendarrayunits = bound(1, backendarrayunits, MAX_TEXTUREUNITS);
+               Con_DPrintf("GLSL shader support detected: texture units = %i texenv, %i image, %i array\n", vid.texunits, vid.teximageunits, vid.texarrayunits);
+               vid.teximageunits = bound(1, vid.teximageunits, MAX_TEXTUREUNITS);
+               vid.texarrayunits = bound(1, vid.texarrayunits, MAX_TEXTUREUNITS);
        }
        else
        }
        else
-               Con_DPrintf("GL_MAX_TEXTUREUNITS = %i\n", backendunits);
-
-       GL_Backend_AllocArrays();
+               Con_DPrintf("GL_MAX_TEXTUREUNITS = %i\n", vid.texunits);
 
        Mem_ExpandableArray_NewArray(&gl_bufferobjectinfoarray, r_main_mempool, sizeof(gl_bufferobjectinfo_t), 128);
 
 
        Mem_ExpandableArray_NewArray(&gl_bufferobjectinfoarray, r_main_mempool, sizeof(gl_bufferobjectinfo_t), 128);
 
@@ -216,16 +248,11 @@ static void gl_backend_start(void)
 
 static void gl_backend_shutdown(void)
 {
 
 static void gl_backend_shutdown(void)
 {
-       backendunits = 0;
-       backendimageunits = 0;
-       backendarrayunits = 0;
        backendactive = false;
 
        Con_DPrint("OpenGL Backend shutting down\n");
 
        Mem_ExpandableArray_FreeArray(&gl_bufferobjectinfoarray);
        backendactive = false;
 
        Con_DPrint("OpenGL Backend shutting down\n");
 
        Mem_ExpandableArray_FreeArray(&gl_bufferobjectinfoarray);
-
-       GL_Backend_FreeArrays();
 }
 
 static void gl_backend_newmap(void)
 }
 
 static void gl_backend_newmap(void)
@@ -602,55 +629,6 @@ void R_GetViewport(r_viewport_t *v)
        *v = backend_viewport;
 }
 
        *v = backend_viewport;
 }
 
-typedef struct gltextureunit_s
-{
-       const void *pointer_texcoord;
-       size_t pointer_texcoord_offset;
-       int pointer_texcoord_buffer;
-       int t2d, t3d, tcubemap, trectangle;
-       int arrayenabled;
-       unsigned int arraycomponents;
-       int rgbscale, alphascale;
-       int combinergb, combinealpha;
-       // FIXME: add more combine stuff
-       // texmatrixenabled exists only to avoid unnecessary texmatrix compares
-       int texmatrixenabled;
-       matrix4x4_t matrix;
-}
-gltextureunit_t;
-
-static struct gl_state_s
-{
-       int cullface;
-       int cullfaceenable;
-       int blendfunc1;
-       int blendfunc2;
-       int blend;
-       GLboolean depthmask;
-       int colormask; // stored as bottom 4 bits: r g b a (3 2 1 0 order)
-       int depthtest;
-       float depthrange[2];
-       float polygonoffset[2];
-       int alphatest;
-       int scissortest;
-       unsigned int unit;
-       unsigned int clientunit;
-       gltextureunit_t units[MAX_TEXTUREUNITS];
-       float color4f[4];
-       int lockrange_first;
-       int lockrange_count;
-       int vertexbufferobject;
-       int elementbufferobject;
-       qboolean pointer_color_enabled;
-       const void *pointer_vertex;
-       const void *pointer_color;
-       size_t pointer_vertex_offset;
-       size_t pointer_color_offset;
-       int pointer_vertex_buffer;
-       int pointer_color_buffer;
-}
-gl_state;
-
 static void GL_BindVBO(int bufferobject)
 {
        if (gl_state.vertexbufferobject != bufferobject)
 static void GL_BindVBO(int bufferobject)
 {
        if (gl_state.vertexbufferobject != bufferobject)
@@ -699,7 +677,7 @@ void GL_SetupTextureState(void)
                unit->matrix = identitymatrix;
        }
 
                unit->matrix = identitymatrix;
        }
 
-       for (i = 0;i < backendimageunits;i++)
+       for (i = 0;i < vid.teximageunits;i++)
        {
                GL_ActiveTexture(i);
                qglBindTexture(GL_TEXTURE_2D, 0);CHECKGLERROR
        {
                GL_ActiveTexture(i);
                qglBindTexture(GL_TEXTURE_2D, 0);CHECKGLERROR
@@ -717,7 +695,7 @@ void GL_SetupTextureState(void)
                }
        }
 
                }
        }
 
-       for (i = 0;i < backendarrayunits;i++)
+       for (i = 0;i < vid.texarrayunits;i++)
        {
                GL_ClientActiveTexture(i);
                GL_BindVBO(0);
        {
                GL_ClientActiveTexture(i);
                GL_BindVBO(0);
@@ -725,7 +703,7 @@ void GL_SetupTextureState(void)
                qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
        }
 
                qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
        }
 
-       for (i = 0;i < backendunits;i++)
+       for (i = 0;i < vid.texunits;i++)
        {
                GL_ActiveTexture(i);
                qglDisable(GL_TEXTURE_2D);CHECKGLERROR
        {
                GL_ActiveTexture(i);
                qglDisable(GL_TEXTURE_2D);CHECKGLERROR
@@ -1178,8 +1156,6 @@ void GL_Backend_FreeProgram(unsigned int prog)
        CHECKGLERROR
 }
 
        CHECKGLERROR
 }
 
-int gl_backend_rebindtextures;
-
 void GL_Backend_RenumberElements(int *out, int count, const int *in, int offset)
 {
        int i;
 void GL_Backend_RenumberElements(int *out, int count, const int *in, int offset)
 {
        int i;
@@ -1255,7 +1231,7 @@ void R_Mesh_Draw(int firstvertex, int numvertices, int firsttriangle, int numtri
                                for (j = 0, size = numvertices * 4, p = (int *)((float *)gl_state.pointer_color + firstvertex * 4);j < size;j++, p++)
                                        paranoidblah += *p;
                }
                                for (j = 0, size = numvertices * 4, p = (int *)((float *)gl_state.pointer_color + firstvertex * 4);j < size;j++, p++)
                                        paranoidblah += *p;
                }
-               for (i = 0;i < backendarrayunits;i++)
+               for (i = 0;i < vid.texarrayunits;i++)
                {
                        if (gl_state.units[i].arrayenabled)
                        {
                {
                        if (gl_state.units[i].arrayenabled)
                        {
@@ -1303,11 +1279,11 @@ void R_Mesh_Draw(int firstvertex, int numvertices, int firsttriangle, int numtri
                        for (i = 0;i < (unsigned int) numtriangles * 3;i++)
                        {
                                element = element3i ? element3i[i] : element3s[i];
                        for (i = 0;i < (unsigned int) numtriangles * 3;i++)
                        {
                                element = element3i ? element3i[i] : element3s[i];
-                               for (j = 0;j < backendarrayunits;j++)
+                               for (j = 0;j < vid.texarrayunits;j++)
                                {
                                        if (gl_state.units[j].pointer_texcoord && gl_state.units[j].arrayenabled)
                                        {
                                {
                                        if (gl_state.units[j].pointer_texcoord && gl_state.units[j].arrayenabled)
                                        {
-                                               if (backendarrayunits > 1)
+                                               if (vid.texarrayunits > 1)
                                                {
                                                        if (gl_state.units[j].arraycomponents == 4)
                                                        {
                                                {
                                                        if (gl_state.units[j].arraycomponents == 4)
                                                        {
@@ -1451,7 +1427,7 @@ void R_Mesh_Finish(void)
        GL_LockArrays(0, 0);
        CHECKGLERROR
 
        GL_LockArrays(0, 0);
        CHECKGLERROR
 
-       for (i = 0;i < backendimageunits;i++)
+       for (i = 0;i < vid.teximageunits;i++)
        {
                GL_ActiveTexture(i);
                qglBindTexture(GL_TEXTURE_2D, 0);CHECKGLERROR
        {
                GL_ActiveTexture(i);
                qglBindTexture(GL_TEXTURE_2D, 0);CHECKGLERROR
@@ -1468,14 +1444,14 @@ void R_Mesh_Finish(void)
                        qglBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);CHECKGLERROR
                }
        }
                        qglBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);CHECKGLERROR
                }
        }
-       for (i = 0;i < backendarrayunits;i++)
+       for (i = 0;i < vid.texarrayunits;i++)
        {
        {
-               GL_ActiveTexture(backendarrayunits - 1 - i);
+               GL_ActiveTexture(vid.texarrayunits - 1 - i);
                qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
        }
                qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
        }
-       for (i = 0;i < backendunits;i++)
+       for (i = 0;i < vid.texunits;i++)
        {
        {
-               GL_ActiveTexture(backendunits - 1 - i);
+               GL_ActiveTexture(vid.texunits - 1 - i);
                qglDisable(GL_TEXTURE_2D);CHECKGLERROR
                if (gl_texture3d)
                {
                qglDisable(GL_TEXTURE_2D);CHECKGLERROR
                if (gl_texture3d)
                {
@@ -1688,13 +1664,13 @@ void R_Mesh_TexCoordPointer(unsigned int unitnum, unsigned int numcomponents, co
 void R_Mesh_TexBindAll(unsigned int unitnum, int tex2d, int tex3d, int texcubemap, int texrectangle)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
 void R_Mesh_TexBindAll(unsigned int unitnum, int tex2d, int tex3d, int texcubemap, int texrectangle)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
-       if (unitnum >= backendimageunits)
+       if (unitnum >= vid.teximageunits)
                return;
        // update 2d texture binding
        if (unit->t2d != tex2d)
        {
                GL_ActiveTexture(unitnum);
                return;
        // update 2d texture binding
        if (unit->t2d != tex2d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (tex2d)
                        {
                {
                        if (tex2d)
                        {
@@ -1718,7 +1694,7 @@ void R_Mesh_TexBindAll(unsigned int unitnum, int tex2d, int tex3d, int texcubema
        if (unit->t3d != tex3d)
        {
                GL_ActiveTexture(unitnum);
        if (unit->t3d != tex3d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (tex3d)
                        {
                {
                        if (tex3d)
                        {
@@ -1742,7 +1718,7 @@ void R_Mesh_TexBindAll(unsigned int unitnum, int tex2d, int tex3d, int texcubema
        if (unit->tcubemap != texcubemap)
        {
                GL_ActiveTexture(unitnum);
        if (unit->tcubemap != texcubemap)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (texcubemap)
                        {
                {
                        if (texcubemap)
                        {
@@ -1766,7 +1742,7 @@ void R_Mesh_TexBindAll(unsigned int unitnum, int tex2d, int tex3d, int texcubema
        if (unit->trectangle != texrectangle)
        {
                GL_ActiveTexture(unitnum);
        if (unit->trectangle != texrectangle)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (texrectangle)
                        {
                {
                        if (texrectangle)
                        {
@@ -1791,13 +1767,13 @@ void R_Mesh_TexBindAll(unsigned int unitnum, int tex2d, int tex3d, int texcubema
 void R_Mesh_TexBind(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
 void R_Mesh_TexBind(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
-       if (unitnum >= backendimageunits)
+       if (unitnum >= vid.teximageunits)
                return;
        // update 2d texture binding
        if (unit->t2d != texnum)
        {
                GL_ActiveTexture(unitnum);
                return;
        // update 2d texture binding
        if (unit->t2d != texnum)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (texnum)
                        {
                {
                        if (texnum)
                        {
@@ -1821,7 +1797,7 @@ void R_Mesh_TexBind(unsigned int unitnum, int texnum)
        if (unit->t3d)
        {
                GL_ActiveTexture(unitnum);
        if (unit->t3d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->t3d)
                        {
                {
                        if (unit->t3d)
                        {
@@ -1835,7 +1811,7 @@ void R_Mesh_TexBind(unsigned int unitnum, int texnum)
        if (unit->tcubemap != 0)
        {
                GL_ActiveTexture(unitnum);
        if (unit->tcubemap != 0)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->tcubemap)
                        {
                {
                        if (unit->tcubemap)
                        {
@@ -1849,7 +1825,7 @@ void R_Mesh_TexBind(unsigned int unitnum, int texnum)
        if (unit->trectangle != 0)
        {
                GL_ActiveTexture(unitnum);
        if (unit->trectangle != 0)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->trectangle)
                        {
                {
                        if (unit->trectangle)
                        {
@@ -1864,13 +1840,13 @@ void R_Mesh_TexBind(unsigned int unitnum, int texnum)
 void R_Mesh_TexBind3D(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
 void R_Mesh_TexBind3D(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
-       if (unitnum >= backendimageunits)
+       if (unitnum >= vid.teximageunits)
                return;
        // update 2d texture binding
        if (unit->t2d)
        {
                GL_ActiveTexture(unitnum);
                return;
        // update 2d texture binding
        if (unit->t2d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->t2d)
                        {
                {
                        if (unit->t2d)
                        {
@@ -1884,7 +1860,7 @@ void R_Mesh_TexBind3D(unsigned int unitnum, int texnum)
        if (unit->t3d != texnum)
        {
                GL_ActiveTexture(unitnum);
        if (unit->t3d != texnum)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (texnum)
                        {
                {
                        if (texnum)
                        {
@@ -1908,7 +1884,7 @@ void R_Mesh_TexBind3D(unsigned int unitnum, int texnum)
        if (unit->tcubemap != 0)
        {
                GL_ActiveTexture(unitnum);
        if (unit->tcubemap != 0)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->tcubemap)
                        {
                {
                        if (unit->tcubemap)
                        {
@@ -1922,7 +1898,7 @@ void R_Mesh_TexBind3D(unsigned int unitnum, int texnum)
        if (unit->trectangle != 0)
        {
                GL_ActiveTexture(unitnum);
        if (unit->trectangle != 0)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->trectangle)
                        {
                {
                        if (unit->trectangle)
                        {
@@ -1937,13 +1913,13 @@ void R_Mesh_TexBind3D(unsigned int unitnum, int texnum)
 void R_Mesh_TexBindCubeMap(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
 void R_Mesh_TexBindCubeMap(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
-       if (unitnum >= backendimageunits)
+       if (unitnum >= vid.teximageunits)
                return;
        // update 2d texture binding
        if (unit->t2d)
        {
                GL_ActiveTexture(unitnum);
                return;
        // update 2d texture binding
        if (unit->t2d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->t2d)
                        {
                {
                        if (unit->t2d)
                        {
@@ -1957,7 +1933,7 @@ void R_Mesh_TexBindCubeMap(unsigned int unitnum, int texnum)
        if (unit->t3d)
        {
                GL_ActiveTexture(unitnum);
        if (unit->t3d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->t3d)
                        {
                {
                        if (unit->t3d)
                        {
@@ -1971,7 +1947,7 @@ void R_Mesh_TexBindCubeMap(unsigned int unitnum, int texnum)
        if (unit->tcubemap != texnum)
        {
                GL_ActiveTexture(unitnum);
        if (unit->tcubemap != texnum)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (texnum)
                        {
                {
                        if (texnum)
                        {
@@ -1995,7 +1971,7 @@ void R_Mesh_TexBindCubeMap(unsigned int unitnum, int texnum)
        if (unit->trectangle != 0)
        {
                GL_ActiveTexture(unitnum);
        if (unit->trectangle != 0)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->trectangle)
                        {
                {
                        if (unit->trectangle)
                        {
@@ -2010,13 +1986,13 @@ void R_Mesh_TexBindCubeMap(unsigned int unitnum, int texnum)
 void R_Mesh_TexBindRectangle(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
 void R_Mesh_TexBindRectangle(unsigned int unitnum, int texnum)
 {
        gltextureunit_t *unit = gl_state.units + unitnum;
-       if (unitnum >= backendimageunits)
+       if (unitnum >= vid.teximageunits)
                return;
        // update 2d texture binding
        if (unit->t2d)
        {
                GL_ActiveTexture(unitnum);
                return;
        // update 2d texture binding
        if (unit->t2d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->t2d)
                        {
                {
                        if (unit->t2d)
                        {
@@ -2030,7 +2006,7 @@ void R_Mesh_TexBindRectangle(unsigned int unitnum, int texnum)
        if (unit->t3d)
        {
                GL_ActiveTexture(unitnum);
        if (unit->t3d)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->t3d)
                        {
                {
                        if (unit->t3d)
                        {
@@ -2044,7 +2020,7 @@ void R_Mesh_TexBindRectangle(unsigned int unitnum, int texnum)
        if (unit->tcubemap != 0)
        {
                GL_ActiveTexture(unitnum);
        if (unit->tcubemap != 0)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (unit->tcubemap)
                        {
                {
                        if (unit->tcubemap)
                        {
@@ -2058,7 +2034,7 @@ void R_Mesh_TexBindRectangle(unsigned int unitnum, int texnum)
        if (unit->trectangle != texnum)
        {
                GL_ActiveTexture(unitnum);
        if (unit->trectangle != texnum)
        {
                GL_ActiveTexture(unitnum);
-               if (unitnum < backendunits)
+               if (unitnum < vid.texunits)
                {
                        if (texnum)
                        {
                {
                        if (texnum)
                        {
@@ -2080,7 +2056,7 @@ void R_Mesh_TexBindRectangle(unsigned int unitnum, int texnum)
        }
 }
 
        }
 }
 
-static const double gl_identitymatrix[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1};
+static const float gl_identitymatrix[16] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1};
 
 void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix)
 {
 
 void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix)
 {
@@ -2090,14 +2066,14 @@ void R_Mesh_TexMatrix(unsigned int unitnum, const matrix4x4_t *matrix)
                // texmatrix specified, check if it is different
                if (!unit->texmatrixenabled || memcmp(&unit->matrix, matrix, sizeof(matrix4x4_t)))
                {
                // texmatrix specified, check if it is different
                if (!unit->texmatrixenabled || memcmp(&unit->matrix, matrix, sizeof(matrix4x4_t)))
                {
-                       double glmatrix[16];
+                       float glmatrix[16];
                        unit->texmatrixenabled = true;
                        unit->matrix = *matrix;
                        CHECKGLERROR
                        unit->texmatrixenabled = true;
                        unit->matrix = *matrix;
                        CHECKGLERROR
-                       Matrix4x4_ToArrayDoubleGL(&unit->matrix, glmatrix);
+                       Matrix4x4_ToArrayFloatGL(&unit->matrix, glmatrix);
                        GL_ActiveTexture(unitnum);
                        qglMatrixMode(GL_TEXTURE);CHECKGLERROR
                        GL_ActiveTexture(unitnum);
                        qglMatrixMode(GL_TEXTURE);CHECKGLERROR
-                       qglLoadMatrixd(glmatrix);CHECKGLERROR
+                       qglLoadMatrixf(glmatrix);CHECKGLERROR
                        qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
                }
        }
                        qglMatrixMode(GL_MODELVIEW);CHECKGLERROR
                }
        }
@@ -2176,23 +2152,16 @@ void R_Mesh_TextureState(const rmeshstate_t *m)
        BACKENDACTIVECHECK
 
        CHECKGLERROR
        BACKENDACTIVECHECK
 
        CHECKGLERROR
-       if (gl_backend_rebindtextures)
-       {
-               gl_backend_rebindtextures = false;
-               GL_SetupTextureState();
-               CHECKGLERROR
-       }
-
-       for (i = 0;i < backendimageunits;i++)
+       for (i = 0;i < vid.teximageunits;i++)
                R_Mesh_TexBindAll(i, m->tex[i], m->tex3d[i], m->texcubemap[i], m->texrectangle[i]);
                R_Mesh_TexBindAll(i, m->tex[i], m->tex3d[i], m->texcubemap[i], m->texrectangle[i]);
-       for (i = 0;i < backendarrayunits;i++)
+       for (i = 0;i < vid.texarrayunits;i++)
        {
                if (m->pointer_texcoord3f[i])
                        R_Mesh_TexCoordPointer(i, 3, m->pointer_texcoord3f[i], m->pointer_texcoord_bufferobject[i], m->pointer_texcoord_bufferoffset[i]);
                else
                        R_Mesh_TexCoordPointer(i, 2, m->pointer_texcoord[i], m->pointer_texcoord_bufferobject[i], m->pointer_texcoord_bufferoffset[i]);
        }
        {
                if (m->pointer_texcoord3f[i])
                        R_Mesh_TexCoordPointer(i, 3, m->pointer_texcoord3f[i], m->pointer_texcoord_bufferobject[i], m->pointer_texcoord_bufferoffset[i]);
                else
                        R_Mesh_TexCoordPointer(i, 2, m->pointer_texcoord[i], m->pointer_texcoord_bufferobject[i], m->pointer_texcoord_bufferoffset[i]);
        }
-       for (i = 0;i < backendunits;i++)
+       for (i = 0;i < vid.texunits;i++)
        {
                R_Mesh_TexMatrix(i, &m->texmatrix[i]);
                R_Mesh_TexCombine(i, m->texcombinergb[i], m->texcombinealpha[i], m->texrgbscale[i], m->texalphascale[i]);
        {
                R_Mesh_TexMatrix(i, &m->texmatrix[i]);
                R_Mesh_TexCombine(i, m->texcombinergb[i], m->texcombinealpha[i], m->texrgbscale[i], m->texalphascale[i]);
@@ -2207,21 +2176,14 @@ void R_Mesh_ResetTextureState(void)
        BACKENDACTIVECHECK
 
        CHECKGLERROR
        BACKENDACTIVECHECK
 
        CHECKGLERROR
-       if (gl_backend_rebindtextures)
-       {
-               gl_backend_rebindtextures = false;
-               GL_SetupTextureState();
-               CHECKGLERROR
-       }
-
-       for (unitnum = 0;unitnum < backendimageunits;unitnum++)
+       for (unitnum = 0;unitnum < vid.teximageunits;unitnum++)
        {
                gltextureunit_t *unit = gl_state.units + unitnum;
                // update 2d texture binding
                if (unit->t2d)
                {
                        GL_ActiveTexture(unitnum);
        {
                gltextureunit_t *unit = gl_state.units + unitnum;
                // update 2d texture binding
                if (unit->t2d)
                {
                        GL_ActiveTexture(unitnum);
-                       if (unitnum < backendunits)
+                       if (unitnum < vid.texunits)
                        {
                                qglDisable(GL_TEXTURE_2D);CHECKGLERROR
                        }
                        {
                                qglDisable(GL_TEXTURE_2D);CHECKGLERROR
                        }
@@ -2232,7 +2194,7 @@ void R_Mesh_ResetTextureState(void)
                if (unit->t3d)
                {
                        GL_ActiveTexture(unitnum);
                if (unit->t3d)
                {
                        GL_ActiveTexture(unitnum);
-                       if (unitnum < backendunits)
+                       if (unitnum < vid.texunits)
                        {
                                qglDisable(GL_TEXTURE_3D);CHECKGLERROR
                        }
                        {
                                qglDisable(GL_TEXTURE_3D);CHECKGLERROR
                        }
@@ -2243,7 +2205,7 @@ void R_Mesh_ResetTextureState(void)
                if (unit->tcubemap)
                {
                        GL_ActiveTexture(unitnum);
                if (unit->tcubemap)
                {
                        GL_ActiveTexture(unitnum);
-                       if (unitnum < backendunits)
+                       if (unitnum < vid.texunits)
                        {
                                qglDisable(GL_TEXTURE_CUBE_MAP_ARB);CHECKGLERROR
                        }
                        {
                                qglDisable(GL_TEXTURE_CUBE_MAP_ARB);CHECKGLERROR
                        }
@@ -2254,7 +2216,7 @@ void R_Mesh_ResetTextureState(void)
                if (unit->trectangle)
                {
                        GL_ActiveTexture(unitnum);
                if (unit->trectangle)
                {
                        GL_ActiveTexture(unitnum);
-                       if (unitnum < backendunits)
+                       if (unitnum < vid.texunits)
                        {
                                qglDisable(GL_TEXTURE_RECTANGLE_ARB);CHECKGLERROR
                        }
                        {
                                qglDisable(GL_TEXTURE_RECTANGLE_ARB);CHECKGLERROR
                        }
@@ -2262,7 +2224,7 @@ void R_Mesh_ResetTextureState(void)
                        qglBindTexture(GL_TEXTURE_RECTANGLE_ARB, unit->trectangle);CHECKGLERROR
                }
        }
                        qglBindTexture(GL_TEXTURE_RECTANGLE_ARB, unit->trectangle);CHECKGLERROR
                }
        }
-       for (unitnum = 0;unitnum < backendarrayunits;unitnum++)
+       for (unitnum = 0;unitnum < vid.texarrayunits;unitnum++)
        {
                gltextureunit_t *unit = gl_state.units + unitnum;
                // texture array unit is disabled, disable the array
        {
                gltextureunit_t *unit = gl_state.units + unitnum;
                // texture array unit is disabled, disable the array
@@ -2273,7 +2235,7 @@ void R_Mesh_ResetTextureState(void)
                        qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
                }
        }
                        qglDisableClientState(GL_TEXTURE_COORD_ARRAY);CHECKGLERROR
                }
        }
-       for (unitnum = 0;unitnum < backendunits;unitnum++)
+       for (unitnum = 0;unitnum < vid.texunits;unitnum++)
        {
                gltextureunit_t *unit = gl_state.units + unitnum;
                // no texmatrix specified, revert to identity
        {
                gltextureunit_t *unit = gl_state.units + unitnum;
                // no texmatrix specified, revert to identity