]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_backend.c
optimized LoadTGA to have fast paths for all formats, rather than one unified loading...
[xonotic/darkplaces.git] / gl_backend.c
index 7d608d3f5f6127d742be05546bf5d2071c1a44a9..ca2b7104e976313f12c82d35623fb61edcafbbc8 100644 (file)
@@ -396,6 +396,7 @@ static struct gl_state_s
        GLboolean depthmask;
        int colormask; // stored as bottom 4 bits: r g b a (3 2 1 0 order)
        int depthtest;
+       int alphatest;
        int scissortest;
        unsigned int unit;
        unsigned int clientunit;
@@ -503,6 +504,7 @@ void GL_Backend_ResetState(void)
 {
        memset(&gl_state, 0, sizeof(gl_state));
        gl_state.depthtest = true;
+       gl_state.alphatest = false;
        gl_state.blendfunc1 = GL_ONE;
        gl_state.blendfunc2 = GL_ZERO;
        gl_state.blend = false;
@@ -517,11 +519,14 @@ void GL_Backend_ResetState(void)
        CHECKGLERROR
 
        qglColorMask(1, 1, 1, 1);
-       qglEnable(GL_CULL_FACE);CHECKGLERROR
-       qglCullFace(GL_FRONT);CHECKGLERROR
-       qglEnable(GL_DEPTH_TEST);CHECKGLERROR
+       qglAlphaFunc(GL_GEQUAL, 0.5);CHECKGLERROR
+       qglDisable(GL_ALPHA_TEST);CHECKGLERROR
        qglBlendFunc(gl_state.blendfunc1, gl_state.blendfunc2);CHECKGLERROR
        qglDisable(GL_BLEND);CHECKGLERROR
+       qglCullFace(GL_FRONT);CHECKGLERROR
+       qglEnable(GL_CULL_FACE);CHECKGLERROR
+       qglDepthFunc(GL_LEQUAL);CHECKGLERROR
+       qglEnable(GL_DEPTH_TEST);CHECKGLERROR
        qglDepthMask(gl_state.depthmask);CHECKGLERROR
 
        qglVertexPointer(3, GL_FLOAT, sizeof(float[3]), NULL);CHECKGLERROR
@@ -621,6 +626,22 @@ void GL_DepthTest(int state)
        }
 }
 
+void GL_AlphaTest(int state)
+{
+       if (gl_state.alphatest != state)
+       {
+               gl_state.alphatest = state;
+               if (gl_state.alphatest)
+               {
+                       qglEnable(GL_ALPHA_TEST);CHECKGLERROR
+               }
+               else
+               {
+                       qglDisable(GL_ALPHA_TEST);CHECKGLERROR
+               }
+       }
+}
+
 void GL_ColorMask(int r, int g, int b, int a)
 {
        int state = r*8 + g*4 + b*2 + a*1;