opengl32: Move wglCreateContext to the WGL driver.
This commit is contained in:
parent
3bcb8057a1
commit
bbdf77a311
|
@ -499,7 +499,6 @@
|
|||
################################################################
|
||||
# Wine extensions: OpenGL support
|
||||
#
|
||||
@ stdcall -private wglCreateContext(long)
|
||||
@ stdcall -private wglGetProcAddress(str)
|
||||
|
||||
################################################################
|
||||
|
|
|
@ -61,26 +61,6 @@ static DC* OPENGL_GetDefaultDC(void)
|
|||
return get_dc_ptr(default_hdc);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* 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
|
||||
*/
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue