Alexandre Julliard : winex11: Store a format pointer instead of an index in the drawable structures.

Alexandre Julliard julliard at winehq.org
Fri Sep 7 13:26:21 CDT 2012


Module: wine
Branch: master
Commit: 356f9897cd890b29b5a373e06bc075c0b86a15ed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=356f9897cd890b29b5a373e06bc075c0b86a15ed

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Sep  7 15:36:57 2012 +0200

winex11: Store a format pointer instead of an index in the drawable structures.

---

 dlls/winex11.drv/opengl.c |   46 ++++++++++++++++++++++----------------------
 1 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index a31c5ef..3c557db 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -184,23 +184,23 @@ enum dc_gl_type
 
 struct glx_physdev
 {
-    struct gdi_physdev dev;
-    X11DRV_PDEVICE    *x11dev;
-    enum dc_gl_type    type;          /* type of GL device context */
-    int                pixel_format;
-    Drawable           drawable;
-    Pixmap             pixmap;        /* pixmap for a DL_GL_PIXMAP_WIN drawable */
+    struct gdi_physdev             dev;
+    X11DRV_PDEVICE                *x11dev;
+    enum dc_gl_type                type;          /* type of GL device context */
+    const struct wgl_pixel_format *format;
+    Drawable                       drawable;
+    Pixmap                         pixmap;        /* pixmap for a DL_GL_PIXMAP_WIN drawable */
 };
 
 struct gl_drawable
 {
-    enum dc_gl_type type;         /* type of GL surface */
-    Drawable        drawable;     /* drawable for rendering to the client area */
-    Pixmap          pixmap;       /* base pixmap if drawable is a GLXPixmap */
-    Colormap        colormap;     /* colormap used for the drawable */
-    int             pixel_format; /* pixel format for the drawable */
-    XVisualInfo    *visual;       /* information about the GL visual */
-    RECT            rect;         /* drawable rect, relative to whole window drawable */
+    enum dc_gl_type                type;         /* type of GL surface */
+    Drawable                       drawable;     /* drawable for rendering to the client area */
+    Pixmap                         pixmap;       /* base pixmap if drawable is a GLXPixmap */
+    Colormap                       colormap;     /* colormap used for the drawable */
+    const struct wgl_pixel_format *format;       /* pixel format for the drawable */
+    XVisualInfo                   *visual;       /* information about the GL visual */
+    RECT                           rect;         /* drawable rect, relative to whole window drawable */
 };
 
 /* X context to associate a struct gl_drawable to an hwnd */
@@ -1180,8 +1180,8 @@ BOOL set_win_format( HWND hwnd, XID fbconfig_id )
     if (!(format = pixelformat_from_fbconfig_id( fbconfig_id ))) return FALSE;
 
     gl = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*gl) );
-    gl->pixel_format = format;
-    gl->visual = pglXGetVisualFromFBConfig( gdi_display, pixel_formats[format - 1].fbconfig );
+    gl->format = &pixel_formats[format - 1];
+    gl->visual = pglXGetVisualFromFBConfig( gdi_display, gl->format->fbconfig );
     if (!gl->visual)
     {
         HeapFree( GetProcessHeap(), 0, gl );
@@ -1516,7 +1516,7 @@ static int glxdrv_wglGetPixelFormat( HDC hdc )
     EnterCriticalSection( &context_section );
     if (!XFindContext( gdi_display, (XID)hwnd, gl_hwnd_context, (char **)&gl ) ||
         !XFindContext( gdi_display, (XID)hdc, gl_pbuffer_context, (char **)&gl ))
-        ret = gl->pixel_format;
+        ret = gl->format - pixel_formats + 1;
     LeaveCriticalSection( &context_section );
 
     /* Offscreen formats can't be used with traditional WGL calls.
@@ -1561,7 +1561,7 @@ static BOOL glxdrv_wglSetPixelFormat( HDC hdc, int iPixelFormat, const PIXELFORM
 
     EnterCriticalSection( &context_section );
     if (!XFindContext( gdi_display, (XID)hwnd, gl_hwnd_context, (char **)&gl ))
-        prev = gl->pixel_format;
+        prev = gl->format - pixel_formats + 1;
     LeaveCriticalSection( &context_section );
 
     if (prev) return prev == iPixelFormat;  /* cannot change it if already set */
@@ -2212,7 +2212,7 @@ static HDC X11DRV_wglGetPbufferDCARB( struct wgl_pbuffer *object )
     }
     gl->type = DC_GL_PBUFFER;
     gl->drawable = object->drawable;
-    gl->pixel_format = object->fmt - pixel_formats + 1;
+    gl->format = object->fmt;
 
     EnterCriticalSection( &context_section );
     if (!XFindContext( gdi_display, (XID)hdc, gl_pbuffer_context, (char **)&prev ))
@@ -3206,28 +3206,28 @@ static INT glxdrv_ExtEscape( PHYSDEV dev, INT escape, INT in_count, LPCVOID in_d
                 if (!XFindContext( gdi_display, (XID)data->hwnd, gl_hwnd_context, (char **)&gl ) ||
                     !XFindContext( gdi_display, (XID)dev->hdc, gl_pbuffer_context, (char **)&gl ))
                 {
-                    physdev->pixel_format = gl->pixel_format;
+                    physdev->format       = gl->format;
                     physdev->type         = gl->type;
                     physdev->drawable     = gl->drawable;
                     physdev->pixmap       = gl->pixmap;
                 }
                 else
                 {
-                    physdev->pixel_format = 0;
+                    physdev->format       = NULL;
                     physdev->type         = DC_GL_NONE;
                     physdev->drawable     = 0;
                     physdev->pixmap       = 0;
                 }
                 LeaveCriticalSection( &context_section );
-                TRACE( "SET_DRAWABLE hdc %p drawable %lx pf %u type %u\n",
-                       dev->hdc, physdev->drawable, physdev->pixel_format, physdev->type );
+                TRACE( "SET_DRAWABLE hdc %p drawable %lx pf %p type %u\n",
+                       dev->hdc, physdev->drawable, physdev->format, physdev->type );
             }
             break;
         case X11DRV_GET_DRAWABLE:
             if (out_count >= sizeof(struct x11drv_escape_get_drawable))
             {
                 struct x11drv_escape_get_drawable *data = out_data;
-                data->pixel_format = physdev->pixel_format;
+                data->pixel_format = physdev->format ? physdev->format - pixel_formats + 1 : 0;
                 data->gl_drawable  = physdev->drawable;
             }
             break;




More information about the wine-cvs mailing list