Alexandre Julliard : opengl32: Move wglCreateContext to the WGL driver.

Alexandre Julliard julliard at winehq.org
Thu Jun 28 13:55:16 CDT 2012


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Jun 28 15:47:31 2012 +0200

opengl32: Move wglCreateContext to the WGL driver.

---

 dlls/gdi32/gdi32.spec     |    1 -
 dlls/gdi32/opengl.c       |   20 --------------------
 dlls/opengl32/wgl.c       |    4 +---
 dlls/winex11.drv/opengl.c |   26 ++++++++++++++------------
 include/wine/gdi_driver.h |    3 ++-
 5 files changed, 17 insertions(+), 37 deletions(-)

diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec
index 5954892..9dfa4dd 100644
--- a/dlls/gdi32/gdi32.spec
+++ b/dlls/gdi32/gdi32.spec
@@ -499,7 +499,6 @@
 ################################################################
 # Wine extensions: OpenGL support
 #
-@ stdcall -private wglCreateContext(long)
 @ stdcall -private wglGetProcAddress(str)
 
 ################################################################
diff --git a/dlls/gdi32/opengl.c b/dlls/gdi32/opengl.c
index 81a9824..f8e5de7 100644
--- a/dlls/gdi32/opengl.c
+++ b/dlls/gdi32/opengl.c
@@ -62,26 +62,6 @@ static DC* OPENGL_GetDefaultDC(void)
 }
 
 /***********************************************************************
- *		wglCreateContext (OPENGL32.@)
- */
-HGLRC WINAPI wglCreateContext(HDC hdc)
-{
-    HGLRC ret = 0;
-    DC * dc = get_dc_ptr( hdc );
-
-    TRACE("(%p)\n",hdc);
-
-    if (dc)
-    {
-        PHYSDEV physdev = GET_DC_PHYSDEV( dc, pwglCreateContext );
-        update_dc( dc );
-        ret = physdev->funcs->pwglCreateContext( physdev );
-        release_dc_ptr( dc );
-    }
-    return ret;
-}
-
-/***********************************************************************
  *		Internal wglGetProcAddress for retrieving WGL extensions
  */
 PROC WINAPI wglGetProcAddress(LPCSTR func)
diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c
index ab26f4a..c604774 100644
--- a/dlls/opengl32/wgl.c
+++ b/dlls/opengl32/wgl.c
@@ -49,7 +49,6 @@ WINE_DECLARE_DEBUG_CHANNEL(opengl);
 static struct
 {
     PROC  (WINAPI *p_wglGetProcAddress)(LPCSTR  lpszProc);
-    HGLRC (WINAPI *p_wglCreateContext)(HDC hdc);
     INT   (WINAPI *p_GetPixelFormat)(HDC hdc);
 
     /* internal WGL functions */
@@ -174,7 +173,7 @@ HDC WINAPI wglGetCurrentDC(void)
  */
 HGLRC WINAPI wglCreateContext(HDC hdc)
 {
-  return wine_wgl.p_wglCreateContext(hdc);
+    return wgl_driver->p_wglCreateContext(hdc);
 }
 
 /***********************************************************************
@@ -1130,7 +1129,6 @@ static BOOL process_attach(void)
   }
 
   wine_wgl.p_wglGetProcAddress = (void *)GetProcAddress(mod_gdi32, "wglGetProcAddress");
-  wine_wgl.p_wglCreateContext = (void *)GetProcAddress(mod_gdi32, "wglCreateContext");
   wine_wgl.p_GetPixelFormat = (void *)GetProcAddress(mod_gdi32, "GetPixelFormat");
 
   /* internal WGL functions */
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 90d4cd6..df625d3 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -1413,36 +1413,37 @@ static BOOL glxdrv_wglCopyContext(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask)
     return TRUE;
 }
 
-/**
- * X11DRV_wglCreateContext
- *
- * For OpenGL32 wglCreateContext.
+/***********************************************************************
+ *		glxdrv_wglCreateContext
  */
-static HGLRC glxdrv_wglCreateContext(PHYSDEV dev)
+static HGLRC glxdrv_wglCreateContext( HDC hdc )
 {
-    struct glx_physdev *physdev = get_glxdrv_dev( dev );
+    struct x11drv_escape_get_drawable escape;
     Wine_GLContext *ret;
     WineGLPixelFormat *fmt;
     int fmt_count = 0;
 
-    TRACE("(%p)->(PF:%d)\n", dev->hdc, physdev->pixel_format);
+    TRACE( "(%p)\n", hdc );
 
-    if (!has_opengl()) return 0;
+    escape.code = X11DRV_GET_DRAWABLE;
+    if (!ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape.code), (LPCSTR)&escape.code,
+                    sizeof(escape), (LPSTR)&escape ))
+        return 0;
 
-    fmt = ConvertPixelFormatWGLtoGLX(gdi_display, physdev->pixel_format, TRUE /* Offscreen */, &fmt_count);
+    fmt = ConvertPixelFormatWGLtoGLX(gdi_display, escape.pixel_format, TRUE /* Offscreen */, &fmt_count);
     /* We can render using the iPixelFormat (1) of Wine's Main visual AND using some offscreen formats.
      * Note that standard WGL-calls don't recognize offscreen-only formats. For that reason pbuffers
      * use a sort of 'proxy' HDC (wglGetPbufferDCARB).
      * If this fails something is very wrong on the system. */
     if(!fmt) {
-        ERR("Cannot get FB Config for iPixelFormat %d, expect problems!\n", physdev->pixel_format);
+        ERR("Cannot get FB Config for iPixelFormat %d, expect problems!\n", escape.pixel_format);
         SetLastError(ERROR_INVALID_PIXEL_FORMAT);
         return NULL;
     }
 
     if (!(ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret)))) return 0;
 
-    ret->hdc = dev->hdc;
+    ret->hdc = hdc;
     ret->fmt = fmt;
     ret->has_been_current = FALSE;
     ret->sharing = FALSE;
@@ -3591,7 +3592,7 @@ static const struct gdi_dc_funcs glxdrv_funcs =
     glxdrv_SwapBuffers,                 /* pSwapBuffers */
     NULL,                               /* pUnrealizePalette */
     NULL,                               /* pWidenPath */
-    glxdrv_wglCreateContext,            /* pwglCreateContext */
+    NULL,                               /* pwglCreateContext */
     NULL,                               /* pwglCreateContextAttribsARB */
     glxdrv_wglGetProcAddress,           /* pwglGetProcAddress */
     glxdrv_wine_get_wgl_driver,         /* wine_get_wgl_driver */
@@ -3601,6 +3602,7 @@ static const struct gdi_dc_funcs glxdrv_funcs =
 static const struct wgl_funcs glxdrv_wgl_funcs =
 {
     glxdrv_wglCopyContext,              /* p_wglCopyContext */
+    glxdrv_wglCreateContext,            /* p_wglCreateContext */
     glxdrv_wglCreateContextAttribsARB,  /* p_wglCreateContextAttribsARB */
     glxdrv_wglDeleteContext,            /* p_wglDeleteContext */
     glxdrv_wglGetCurrentDC,             /* p_wglGetCurrentDC */
diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h
index b3d01d4..796d4fa 100644
--- a/include/wine/gdi_driver.h
+++ b/include/wine/gdi_driver.h
@@ -203,7 +203,7 @@ struct gdi_dc_funcs
 };
 
 /* increment this when you change the DC function table */
-#define WINE_GDI_DRIVER_VERSION 35
+#define WINE_GDI_DRIVER_VERSION 36
 
 #define GDI_PRIORITY_NULL_DRV        0  /* null driver */
 #define GDI_PRIORITY_FONT_DRV      100  /* any font driver */
@@ -234,6 +234,7 @@ static inline void push_dc_driver( PHYSDEV *dev, PHYSDEV physdev, const struct g
 struct wgl_funcs
 {
     BOOL  (*p_wglCopyContext)(HGLRC,HGLRC,UINT);
+    HGLRC (*p_wglCreateContext)(HDC);
     HGLRC (*p_wglCreateContextAttribsARB)(HDC,HGLRC,const int*);
     BOOL  (*p_wglDeleteContext)(HGLRC);
     HDC   (*p_wglGetCurrentDC)(void);




More information about the wine-cvs mailing list