]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_shared.c
consistency cleanup of a (disabled) part of Invert_Simple
[xonotic/darkplaces.git] / vid_shared.c
index 8cb5234dbca455069b3107de5255ce9353777279..a7932293a62e73437b1683afe929823a9fc56c4e 100644 (file)
@@ -12,8 +12,11 @@ int gl_combine_extension = false;
 // LordHavoc: GL_EXT_compiled_vertex_array support
 int gl_supportslockarrays = false;
 
-int gl_maxdrawrangeelementsvertices;
-int gl_maxdrawrangeelementsindices;
+// LordHavoc: if window is hidden, don't update screen
+int vid_hidden = false;
+// LordHavoc: if window is not the active window, don't hog as much CPU time,
+// let go of the mouse, turn off sound, and restore system gamma ramps...
+int vid_activewindow = true;
 
 cvar_t vid_mode = {0, "vid_mode", "0"};
 cvar_t vid_mouse = {CVAR_SAVE, "vid_mouse", "1"};
@@ -25,6 +28,11 @@ cvar_t in_pitch_max = {0, "in_pitch_max", "90"};
 
 cvar_t m_filter = {CVAR_SAVE, "m_filter","0"};
 
+const char *gl_vendor;
+const char *gl_renderer;
+const char *gl_version;
+const char *gl_extensions;
+
 // GL_ARB_multitexture
 void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
 void (GLAPIENTRY *qglActiveTexture) (GLenum);
@@ -286,27 +294,26 @@ static HINSTANCE gldll;
 static void *prjobj = NULL;
 #endif
 
-static void gl_getfuncs_begin(void)
+void GL_OpenLibrary(void)
 {
 #ifdef WIN32
-       gldll = LoadLibrary("opengl32.dll");
+       if (gldll)
+               FreeLibrary(gldll);
+       if (!(gldll = LoadLibrary("opengl32.dll")))
+               Sys_Error("Unable to LoadLibrary opengl32.dll\n");
 #else
        if (prjobj)
                dlclose(prjobj);
-
-       prjobj = dlopen(NULL, RTLD_LAZY);
-       if (prjobj == NULL)
-       {
-               Con_Printf("Unable to open symbol list for main program.\n");
-               return;
-       }
+       if (!(prjobj = dlopen("libGL.so.1", RTLD_LAZY)))
+               Sys_Error("Unable to open symbol list for libGL.so.1\n");
 #endif
 }
 
-static void gl_getfuncs_end(void)
+void GL_CloseLibrary(void)
 {
 #ifdef WIN32
        FreeLibrary(gldll);
+       gldll = 0;
 #else
        if (prjobj)
                dlclose(prjobj);
@@ -314,7 +321,7 @@ static void gl_getfuncs_end(void)
 #endif
 }
 
-static void *gl_getfuncaddress(char *name)
+void *GL_GetProcAddress(char *name)
 {
        void *p = NULL;
 #ifdef WIN32
@@ -349,7 +356,7 @@ static int gl_checkextension(char *name, gl_extensionfunctionlist_t *funcs, char
                for (func = funcs;func && func->name != NULL;func++)
                {
                        // functions are cleared before all the extensions are evaluated
-                       if (!(*func->funcvariable = (void *) gl_getfuncaddress(func->name)))
+                       if (!(*func->funcvariable = (void *) GL_GetProcAddress(func->name)))
                        {
                                if (!silent)
                                        Con_Printf("missing function \"%s\" - broken driver!\n", func->name);
@@ -371,9 +378,12 @@ static int gl_checkextension(char *name, gl_extensionfunctionlist_t *funcs, char
 
 void VID_CheckExtensions(void)
 {
-       Con_Printf("Checking OpenGL extensions...\n");
+       gl_vendor = NULL;
+       gl_renderer = NULL;
+       gl_version = NULL;
+       gl_extensions = NULL;
 
-       gl_getfuncs_begin();
+       Con_Printf("Opening OpenGL library to retrieve functions\n");
 
        gl_combine_extension = false;
        gl_supportslockarrays = false;
@@ -388,18 +398,20 @@ void VID_CheckExtensions(void)
        if (!gl_checkextension("OpenGL 1.1.0", opengl110funcs, NULL, false))
                Sys_Error("OpenGL 1.1.0 functions not found\n");
 
-       if (gl_checkextension("glDrawRangeElements", drawrangeelementsfuncs, "-nodrawrangeelements", true)
-        || gl_checkextension("GL_EXT_draw_range_elements", drawrangeelementsextfuncs, "-nodrawrangeelements", true))
-       {
-               qglGetIntegerv(GL_MAX_ELEMENTS_VERTICES, &gl_maxdrawrangeelementsvertices);
-               qglGetIntegerv(GL_MAX_ELEMENTS_INDICES, &gl_maxdrawrangeelementsindices);
+       gl_vendor = qglGetString (GL_VENDOR);
+       gl_renderer = qglGetString (GL_RENDERER);
+       gl_version = qglGetString (GL_VERSION);
+       gl_extensions = qglGetString (GL_EXTENSIONS);
 
-               if (gl_maxdrawrangeelementsvertices < 1 || gl_maxdrawrangeelementsindices < 1)
-               {
-                       Con_Printf("invalid GL_MAX_ELEMENTS_VERTICES (%i) and/or GL_MAX_ELEMENTS_INDICES (%i)\n", gl_maxdrawrangeelementsvertices, gl_maxdrawrangeelementsindices);
-                       qglDrawRangeElements = qglDrawRangeElementsEXT = NULL;
-               }
-       }
+       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("Checking OpenGL extensions...\n");
+
+       if (!gl_checkextension("glDrawRangeElements", drawrangeelementsfuncs, "-nodrawrangeelements", true))
+               gl_checkextension("GL_EXT_draw_range_elements", drawrangeelementsextfuncs, "-nodrawrangeelements", false);
 
        if (gl_checkextension("GL_ARB_multitexture", multitexturefuncs, "-nomtex", false))
        {
@@ -415,8 +427,6 @@ void VID_CheckExtensions(void)
 
        gl_supportslockarrays = gl_checkextension("GL_EXT_compiled_vertex_array", compiledvertexarrayfuncs, "-nocva", false);
 
-       gl_getfuncs_end();
-
        // 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;