Module: wine Branch: master Commit: bbdf77a3118df6af777af73fd3fa1efe592d315a URL: http://source.winehq.org/git/wine.git/?a=commit;h=bbdf77a3118df6af777af73fd3...
Author: Alexandre Julliard julliard@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);