[vlc-devel] commit: GLX: udpate view port after the X server resized the window ( Rémi Denis-Courmont )

git version control git at videolan.org
Sat Dec 12 20:09:10 CET 2009


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Dec 12 21:08:27 2009 +0200| [7fe5527dfe6060cd4aadc98e8bbb327e9bc08597] | committer: Rémi Denis-Courmont 

GLX: udpate view port after the X server resized the window

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7fe5527dfe6060cd4aadc98e8bbb327e9bc08597
---

 modules/video_output/xcb/glx.c |   31 ++++++++++++++++---------------
 1 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/modules/video_output/xcb/glx.c b/modules/video_output/xcb/glx.c
index 8e5ae3a..ad9868c 100644
--- a/modules/video_output/xcb/glx.c
+++ b/modules/video_output/xcb/glx.c
@@ -66,8 +66,6 @@ struct vout_display_sys_t
     xcb_cursor_t cursor; /* blank cursor */
     xcb_window_t window; /* drawable X window */
     xcb_window_t glwin; /* GLX window */
-    uint16_t width; /* render pixel width */
-    uint16_t height; /* render pixel height */
     bool visible; /* whether to draw */
     bool v1_3; /* whether GLX >= 1.3 is available */
 
@@ -172,7 +170,8 @@ static bool CheckGLX (vout_display_t *vd, Display *dpy, bool *restrict pv13)
 }
 
 static int CreateWindow (vout_display_t *vd, xcb_connection_t *conn,
-                         uint_fast8_t depth, xcb_visualid_t vid)
+                         uint_fast8_t depth, xcb_visualid_t vid,
+                         uint_fast16_t width, uint_fast16_t height)
 {
     vout_display_sys_t *sys = vd->sys;
     const uint32_t mask = XCB_CW_EVENT_MASK;
@@ -184,7 +183,7 @@ static int CreateWindow (vout_display_t *vd, xcb_connection_t *conn,
 
     cc = xcb_create_window_checked (conn, depth, sys->window,
                                     sys->embed->xid, 0, 0,
-                                    sys->width, sys->height, 0,
+                                    width, height, 0,
                                     XCB_WINDOW_CLASS_INPUT_OUTPUT,
                                     vid, mask, values);
     cm = xcb_map_window_checked (conn, sys->window);
@@ -241,8 +240,9 @@ static int Open (vlc_object_t *obj)
     /* Find window parameters */
     unsigned snum;
     uint8_t depth;
+    uint16_t width, height;
     const xcb_screen_t *scr = FindWindow (vd, conn, &snum, &depth,
-                                          &sys->width, &sys->height);
+                                          &width, &height);
     if (scr == NULL)
         goto error;
 
@@ -269,7 +269,7 @@ static int Open (vlc_object_t *obj)
         }
 
         /*XVisualInfo *vi = glXGetVisualFromFBConfig (dpy, confs[0]);*/
-        CreateWindow (vd, conn, depth, 0 /* ??? */);
+        CreateWindow (vd, conn, depth, 0 /* ??? */, width, height);
         /*XFree (vi);*/
 
         sys->glwin = glXCreateWindow (dpy, confs[0], sys->window, NULL );
@@ -311,7 +311,7 @@ static int Open (vlc_object_t *obj)
         }
         msg_Dbg (vd, "using GLX visual ID 0x%"PRIx32, (uint32_t)vi->visualid);
 
-        if (CreateWindow (vd, conn, depth, 0 /* ??? */) == 0)
+        if (CreateWindow (vd, conn, depth, 0 /* ??? */, width, height) == 0)
             sys->ctx = glXCreateContext (dpy, vi, 0, True);
         XFree (vi);
         if (sys->ctx == NULL)
@@ -355,7 +355,7 @@ static int Open (vlc_object_t *obj)
 
     /* */
     vout_display_SendEventFullscreen (vd, false);
-    vout_display_SendEventDisplaySize (vd, sys->width, sys->height, false);
+    vout_display_SendEventDisplaySize (vd, width, height, false);
 
     return VLC_SUCCESS;
 
@@ -397,7 +397,6 @@ static void SwapBuffers (vout_opengl_t *gl)
 {
     vout_display_sys_t *sys = gl->sys;
 
-    glViewport (0, 0, sys->width, sys->height);
     glXSwapBuffers (sys->display, sys->glwin);
 }
 
@@ -486,17 +485,19 @@ static int Control (vout_display_t *vd, int query, va_list ap)
 
         vout_display_place_t place;
         vout_display_PlacePicture (&place, source, cfg, false);
-        sys->width  = place.width;
-        sys->height = place.height;
 
         /* Move the picture within the window */
         const uint32_t values[] = { place.x, place.y,
                                     place.width, place.height, };
-        xcb_configure_window (conn, sys->window,
-                              XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y
-                            | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT,
+        xcb_void_cookie_t ck =
+            xcb_configure_window_checked (conn, sys->window,
+                            XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y
+                          | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT,
                               values);
-        xcb_flush (conn);
+        if (CheckError (vd, conn, "cannot resize X11 window", ck))
+            return VLC_EGENERIC;
+
+        glViewport (0, 0, place.width, place.height);
         return VLC_SUCCESS;
     }
 




More information about the vlc-devel mailing list