[mythtv] PATCH: OpenGL vsync not working

Kyle Rose krose+mythtv at krose.org
Thu Dec 2 21:25:58 UTC 2004


FWIW, OpenGL vsync wasn't working for me because vsync.cpp does some
of the GLX initialization in a non-portable way.  I didn't bother
trying to figure out which of the following modifications fix the
problem, but one of them does.

Is there a specific reason the following calls were made the way they
were?  I'd like to see this one checked in because it fixes my problem
and, if nothing else, it's closer to the way GLX calls *should* be
made.

Cheers,
Kyle


Index: libs/libmythtv/vsync.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/vsync.cpp,v
retrieving revision 1.8
diff -u -r1.8 vsync.cpp
--- libs/libmythtv/vsync.cpp    29 Nov 2004 22:21:54 -0000      1.8
+++ libs/libmythtv/vsync.cpp    2 Dec 2004 21:19:36 -0000
@@ -429,14 +429,16 @@
     }
 
     /* Look for GLX at all */
-    if (glXQueryExtension(m_display, NULL, NULL) == 0)
+    int ndummy;
+    if (glXQueryExtension(m_display, &ndummy, &ndummy) == 0)
     {
         VERBOSE(VB_PLAYBACK, "OpenGLVideoSync: OpenGL extension not present.");
         return false;
     }
 
     /* Look for video sync extension */
-    const char *xt = glXQueryExtensionsString(m_display, 0);
+    const char *xt = glXQueryExtensionsString(m_display, DefaultScreen(m_display));
+    VERBOSE(VB_PLAYBACK, QString("OpenGLVideoSync: GLX extensions: %1").arg(xt));
     if (strstr(xt, "GLX_SGI_video_sync") == NULL)
     {
         VERBOSE(VB_PLAYBACK, "OpenGLVideoSync: GLX Video Sync"
@@ -453,20 +455,20 @@
     XSetWindowAttributes swa;
     Window w;
     
-    vis = glXChooseVisual(m_display, 0, attribList);
+    vis = glXChooseVisual(m_display, DefaultScreen(m_display), attribList);
     if (vis == NULL) 
     {
         VERBOSE(VB_PLAYBACK, "OpenGLVideoSync: No appropriate visual found");
         return false;
     }
-    swa.colormap = XCreateColormap(m_display, RootWindow(m_display, 0),
+    swa.colormap = XCreateColormap(m_display, RootWindow(m_display, vis->screen),
                                    vis->visual, AllocNone);
     if (swa.colormap == 0)
     {
         VERBOSE(VB_PLAYBACK, "OpenGLVideoSync: Failed to create colormap");
         return false;
     }
-    w = XCreateWindow(m_display, RootWindow(m_display, 0), 0, 0, 1, 1,
+    w = XCreateWindow(m_display, RootWindow(m_display, vis->screen), 0, 0, 1, 1,
                       0, vis->depth, InputOutput, vis->visual, 
                       CWColormap, &swa);
     if (w == 0)
@@ -474,7 +476,7 @@
         VERBOSE(VB_PLAYBACK, "OpenGLVideoSync: Failed to create dummy window");
         return false;
     }
-    m_context = glXCreateContext(m_display, vis, NULL, GL_TRUE);
+    m_context = glXCreateContext(m_display, vis, None, GL_TRUE);
     if (m_context == NULL)
     {
         VERBOSE(VB_PLAYBACK, "OpenGLVideoSync: Failed to create GLX context");


More information about the mythtv-dev mailing list