]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_glx.c
Elric's changes:
[xonotic/darkplaces.git] / vid_glx.c
index 6ccbbc2ab4cde55d7bef491951a9ec1c88c62472..a8a8407a7a5ba444d2ff1c0cad7ceef31816ce35 100644 (file)
--- a/vid_glx.c
+++ b/vid_glx.c
@@ -53,7 +53,7 @@ const char *(GLAPIENTRY *qglXQueryExtensionsString)(Display *dpy, int screen);
 //GLX_ARB_get_proc_address
 void *(GLAPIENTRY *qglXGetProcAddressARB)(const GLubyte *procName);
 
-static gl_extensionfunctionlist_t getprocaddressfuncs[] =
+static dllfunction_t getprocaddressfuncs[] =
 {
        {"glXGetProcAddressARB", (void **) &qglXGetProcAddressARB},
        {NULL, NULL}
@@ -63,7 +63,7 @@ static gl_extensionfunctionlist_t getprocaddressfuncs[] =
 GLint (GLAPIENTRY *qglXGetVideoSyncSGI)(GLuint *count);
 GLint (GLAPIENTRY *qglXWaitVideoSyncSGI)(int divisor, int remainder, unsigned int *count);
 
-static gl_extensionfunctionlist_t videosyncfuncs[] =
+static dllfunction_t videosyncfuncs[] =
 {
        {"glXGetVideoSyncSGI", (void **) &qglXGetVideoSyncSGI},
        {"glXWaitVideoSyncSGI", (void **) &qglXWaitVideoSyncSGI},
@@ -480,6 +480,7 @@ void VID_Shutdown(void)
        {
                uninstall_grabs();
 
+               // FIXME: glXDestroyContext here?
                if (vidmode_active)
                        XF86VidModeSwitchToMode(vidx11_display, scrnum, vidmodes[0]);
                if (win)
@@ -653,9 +654,11 @@ void VID_BuildGLXAttrib(int *attrib, int stencil, int gamma)
        *attrib++ = GLX_BLUE_SIZE;*attrib++ = 1;
        *attrib++ = GLX_DOUBLEBUFFER;
        *attrib++ = GLX_DEPTH_SIZE;*attrib++ = 1;
+       // if stencil is enabled, ask for alpha too
        if (stencil)
        {
                *attrib++ = GLX_STENCIL_SIZE;*attrib++ = 8;
+               *attrib++ = GLX_ALPHA_SIZE;*attrib++ = 1;
        }
        if (gamma)
        {
@@ -673,10 +676,15 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil)
        Window root;
        XVisualInfo *visinfo;
        int MajorVersion, MinorVersion;
-       
-       if (!GL_OpenLibrary("libGL.so.1"))
+       const char *drivername;
+
+       drivername = "libGL.so.1";
+       i = COM_CheckParm("-gl_driver");
+       if (i && i < com_argc - 1)
+               drivername = com_argv[i + 1];
+       if (!GL_OpenLibrary(drivername))
        {
-               Con_Printf("Unable to load GL driver\n");
+               Con_Printf("Unable to load GL driver \"%s\"\n", drivername);
                return false;
        }
 
@@ -814,11 +822,16 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil)
                XF86VidModeSetViewPort(vidx11_display, scrnum, 0, 0);
        }
 
-       XFlush(vidx11_display);
+       //XSync(vidx11_display, False);
 
        ctx = qglXCreateContext(vidx11_display, visinfo, NULL, True);
+       if (!ctx)
+               Sys_Error ("glXCreateContext failed\n");
+
+       if (!qglXMakeCurrent(vidx11_display, win, ctx))
+               Sys_Error ("glXMakeCurrent failed\n");
 
-       qglXMakeCurrent(vidx11_display, win, ctx);
+       XSync(vidx11_display, False);
 
        scr_width = width;
        scr_height = height;