//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}
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},
{
uninstall_grabs();
+ // FIXME: glXDestroyContext here?
if (vidmode_active)
XF86VidModeSwitchToMode(vidx11_display, scrnum, vidmodes[0]);
if (win)
*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)
{
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;
}
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;