]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_shared.c
no time to explain, more changes on the path to q3bsp support
[xonotic/darkplaces.git] / vid_shared.c
index 8f33726427d5e70fb4d6dba5dab664b6614a11c0..76d3c75b2889ac147f080f91d4183ec075145570 100644 (file)
@@ -30,6 +30,8 @@ int gl_support_clamptoedge = false;
 int gl_support_var = false;
 // GL_NV_vertex_array_range2
 int gl_support_var2 = false;
+// GL_EXT_texture_filter_anisotropic
+int gl_support_anisotropy = false;
 
 // LordHavoc: if window is hidden, don't update screen
 int vid_hidden = true;
@@ -94,7 +96,8 @@ const char *gl_platformextensions;
 char gl_driver[256];
 
 // GL_ARB_multitexture
-//void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
+void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
+void (GLAPIENTRY *qglMultiTexCoord3f) (GLenum, GLfloat, GLfloat, GLfloat);
 void (GLAPIENTRY *qglActiveTexture) (GLenum);
 void (GLAPIENTRY *qglClientActiveTexture) (GLenum);
 
@@ -122,7 +125,7 @@ void (GLAPIENTRY *qglCullFace)(GLenum mode);
 //void (GLAPIENTRY *qglReadBuffer)(GLenum mode);
 void (GLAPIENTRY *qglEnable)(GLenum cap);
 void (GLAPIENTRY *qglDisable)(GLenum cap);
-//GLboolean GLAPIENTRY *qglIsEnabled)(GLenum cap);
+GLboolean (GLAPIENTRY *qglIsEnabled)(GLenum cap);
 
 void (GLAPIENTRY *qglEnableClientState)(GLenum cap);
 void (GLAPIENTRY *qglDisableClientState)(GLenum cap);
@@ -140,23 +143,25 @@ void (GLAPIENTRY *qglFlush)(void);
 void (GLAPIENTRY *qglClearDepth)(GLclampd depth);
 void (GLAPIENTRY *qglDepthFunc)(GLenum func);
 void (GLAPIENTRY *qglDepthMask)(GLboolean flag);
-//void (GLAPIENTRY *qglDepthRange)(GLclampd near_val, GLclampd far_val);
+void (GLAPIENTRY *qglDepthRange)(GLclampd near_val, GLclampd far_val);
 void (GLAPIENTRY *qglColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
 
 void (GLAPIENTRY *qglDrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
 void (GLAPIENTRY *qglDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
 void (GLAPIENTRY *qglVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
-//void (GLAPIENTRY *qglNormalPointer)(GLenum type, GLsizei stride, const GLvoid *ptr);
+void (GLAPIENTRY *qglNormalPointer)(GLenum type, GLsizei stride, const GLvoid *ptr);
 void (GLAPIENTRY *qglColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
 void (GLAPIENTRY *qglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
-//void (GLAPIENTRY *qglArrayElement)(GLint i);
+void (GLAPIENTRY *qglArrayElement)(GLint i);
 
 void (GLAPIENTRY *qglColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-//void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
-//void (GLAPIENTRY *qglVertex2f)(GLfloat x, GLfloat y);
-//void (GLAPIENTRY *qglVertex3f)(GLfloat x, GLfloat y, GLfloat z);
-//void (GLAPIENTRY *qglBegin)(GLenum mode);
-//void (GLAPIENTRY *qglEnd)(void);
+void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
+void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
+void (GLAPIENTRY *qglTexCoord3f)(GLfloat s, GLfloat t, GLfloat r);
+void (GLAPIENTRY *qglVertex2f)(GLfloat x, GLfloat y);
+void (GLAPIENTRY *qglVertex3f)(GLfloat x, GLfloat y, GLfloat z);
+void (GLAPIENTRY *qglBegin)(GLenum mode);
+void (GLAPIENTRY *qglEnd)(void);
 
 void (GLAPIENTRY *qglMatrixMode)(GLenum mode);
 void (GLAPIENTRY *qglOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
@@ -185,7 +190,7 @@ void (GLAPIENTRY *qglClearStencil)(GLint s);
 
 //void (GLAPIENTRY *qglTexEnvf)(GLenum target, GLenum pname, GLfloat param);
 void (GLAPIENTRY *qglTexEnvi)(GLenum target, GLenum pname, GLint param);
-//void (GLAPIENTRY *qglTexParameterf)(GLenum target, GLenum pname, GLfloat param);
+void (GLAPIENTRY *qglTexParameterf)(GLenum target, GLenum pname, GLfloat param);
 //void (GLAPIENTRY *qglTexParameterfv)(GLenum target, GLenum pname, GLfloat *params);
 void (GLAPIENTRY *qglTexParameteri)(GLenum target, GLenum pname, GLint param);
 
@@ -225,14 +230,14 @@ int GL_CheckExtension(const char *name, const dllfunction_t *funcs, const char *
        int failed = false;
        const dllfunction_t *func;
 
-       Con_Printf("checking for %s...  ", name);
+       Con_DPrintf("checking for %s...  ", name);
 
        for (func = funcs;func && func->name;func++)
                *func->funcvariable = NULL;
 
        if (disableparm && COM_CheckParm(disableparm))
        {
-               Con_Printf("disabled by commandline\n");
+               Con_DPrintf("disabled by commandline\n");
                return false;
        }
 
@@ -244,19 +249,19 @@ int GL_CheckExtension(const char *name, const dllfunction_t *funcs, const char *
                        if (!(*func->funcvariable = (void *) GL_GetProcAddress(func->name)))
                        {
                                if (!silent)
-                                       Con_Printf("missing function \"%s\" - broken driver!\n", func->name);
+                                       Con_Printf("OpenGL extension \"%s\" is missing function \"%s\" - broken driver!\n", name, func->name);
                                failed = true;
                        }
                }
                // delay the return so it prints all missing functions
                if (failed)
                        return false;
-               Con_Printf("enabled\n");
+               Con_DPrintf("enabled\n");
                return true;
        }
        else
        {
-               Con_Printf("not detected\n");
+               Con_DPrintf("not detected\n");
                return false;
        }
 }
@@ -272,7 +277,7 @@ static dllfunction_t opengl110funcs[] =
 //     {"glReadBuffer", (void **) &qglReadBuffer},
        {"glEnable", (void **) &qglEnable},
        {"glDisable", (void **) &qglDisable},
-//     {"glIsEnabled", (void **) &qglIsEnabled},
+       {"glIsEnabled", (void **) &qglIsEnabled},
        {"glEnableClientState", (void **) &qglEnableClientState},
        {"glDisableClientState", (void **) &qglDisableClientState},
 //     {"glGetBooleanv", (void **) &qglGetBooleanv},
@@ -286,20 +291,21 @@ static dllfunction_t opengl110funcs[] =
        {"glClearDepth", (void **) &qglClearDepth},
        {"glDepthFunc", (void **) &qglDepthFunc},
        {"glDepthMask", (void **) &qglDepthMask},
-//     {"glDepthRange", (void **) &qglDepthRange},
+       {"glDepthRange", (void **) &qglDepthRange},
        {"glDrawElements", (void **) &qglDrawElements},
        {"glColorMask", (void **) &qglColorMask},
        {"glVertexPointer", (void **) &qglVertexPointer},
-//     {"glNormalPointer", (void **) &qglNormalPointer},
+       {"glNormalPointer", (void **) &qglNormalPointer},
        {"glColorPointer", (void **) &qglColorPointer},
        {"glTexCoordPointer", (void **) &qglTexCoordPointer},
-//     {"glArrayElement", (void **) &qglArrayElement},
+       {"glArrayElement", (void **) &qglArrayElement},
        {"glColor4f", (void **) &qglColor4f},
-//     {"glTexCoord2f", (void **) &qglTexCoord2f},
-//     {"glVertex2f", (void **) &qglVertex2f},
-//     {"glVertex3f", (void **) &qglVertex3f},
-//     {"glBegin", (void **) &qglBegin},
-//     {"glEnd", (void **) &qglEnd},
+       {"glTexCoord2f", (void **) &qglTexCoord2f},
+       {"glTexCoord3f", (void **) &qglTexCoord3f},
+       {"glVertex2f", (void **) &qglVertex2f},
+       {"glVertex3f", (void **) &qglVertex3f},
+       {"glBegin", (void **) &qglBegin},
+       {"glEnd", (void **) &qglEnd},
        {"glMatrixMode", (void **) &qglMatrixMode},
        {"glOrtho", (void **) &qglOrtho},
        {"glFrustum", (void **) &qglFrustum},
@@ -324,7 +330,7 @@ static dllfunction_t opengl110funcs[] =
        {"glClearStencil", (void **) &qglClearStencil},
 //     {"glTexEnvf", (void **) &qglTexEnvf},
        {"glTexEnvi", (void **) &qglTexEnvi},
-//     {"glTexParameterf", (void **) &qglTexParameterf},
+       {"glTexParameterf", (void **) &qglTexParameterf},
 //     {"glTexParameterfv", (void **) &qglTexParameterfv},
        {"glTexParameteri", (void **) &qglTexParameteri},
 //     {"glPixelStoref", (void **) &qglPixelStoref},
@@ -362,7 +368,8 @@ static dllfunction_t drawrangeelementsextfuncs[] =
 
 static dllfunction_t multitexturefuncs[] =
 {
-       //{"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f},
+       {"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f},
+       {"glMultiTexCoord3fARB", (void **) &qglMultiTexCoord3f},
        {"glActiveTextureARB", (void **) &qglActiveTexture},
        {"glClientActiveTextureARB", (void **) &qglClientActiveTexture},
        {NULL, NULL}
@@ -416,13 +423,13 @@ void VID_CheckExtensions(void)
        if (!GL_CheckExtension("OpenGL 1.1.0", opengl110funcs, NULL, false))
                Sys_Error("OpenGL 1.1.0 functions not found\n");
 
-       Con_Printf ("GL_VENDOR: %s\n", gl_vendor);
-       Con_Printf ("GL_RENDERER: %s\n", gl_renderer);
-       Con_Printf ("GL_VERSION: %s\n", gl_version);
-       Con_Printf ("GL_EXTENSIONS: %s\n", gl_extensions);
-       Con_Printf ("%s_EXTENSIONS: %s\n", gl_platform, gl_platformextensions);
+       Con_DPrintf ("GL_VENDOR: %s\n", gl_vendor);
+       Con_DPrintf ("GL_RENDERER: %s\n", gl_renderer);
+       Con_DPrintf ("GL_VERSION: %s\n", gl_version);
+       Con_DPrintf ("GL_EXTENSIONS: %s\n", gl_extensions);
+       Con_DPrintf ("%s_EXTENSIONS: %s\n", gl_platform, gl_platformextensions);
 
-       Con_Printf("Checking OpenGL extensions...\n");
+       Con_DPrintf("Checking OpenGL extensions...\n");
 
        if (!GL_CheckExtension("glDrawRangeElements", drawrangeelementsfuncs, "-nodrawrangeelements", true))
                GL_CheckExtension("GL_EXT_draw_range_elements", drawrangeelementsextfuncs, "-nodrawrangeelements", false);
@@ -447,6 +454,8 @@ void VID_CheckExtensions(void)
        if (gl_support_var)
                gl_support_var2 = GL_CheckExtension("GL_NV_vertex_array_range2", NULL, "-novar2", false);
 
+       gl_support_anisotropy = GL_CheckExtension("GL_EXT_texture_filter_anisotropic", NULL, "-noanisotropy", false);
+
        // we don't care if it's an extension or not, they are identical functions, so keep it simple in the rendering code
        if (qglDrawRangeElements == NULL)
                qglDrawRangeElements = qglDrawRangeElementsEXT;
@@ -664,6 +673,8 @@ void VID_Shared_Init(void)
        Cvar_RegisterVariable(&m_filter);
        Cmd_AddCommand("force_centerview", Force_CenterView_f);
        Cmd_AddCommand("vid_restart", VID_Restart_f);
+       if (gamemode == GAME_GOODVSBAD2)
+               Cvar_Set("gl_combine", "0");
 }
 
 int current_vid_fullscreen;
@@ -762,7 +773,7 @@ void VID_Open(void)
                Cvar_SetValueQuick(&vid_stencil, 0);
        }
 
-       Con_Printf("Starting video system\n");
+       Con_DPrintf("Starting video system\n");
        if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_stencil.integer))
        {
                Con_Printf("Desired video mode fail, trying fallbacks...\n");