diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c index 73895c9eb43..a5e04692517 100644 --- a/dlls/gdi32/dibdrv/dc.c +++ b/dlls/gdi32/dibdrv/dc.c @@ -421,7 +421,6 @@ const struct gdi_dc_funcs dib_driver = dibdrv_CreateDC, /* pCreateDC */ dibdrv_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - dibdrv_DescribePixelFormat, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ dibdrv_Ellipse, /* pEllipse */ NULL, /* pEndDoc */ @@ -513,7 +512,6 @@ const struct gdi_dc_funcs dib_driver = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ dibdrv_SetPixel, /* pSetPixel */ - dibdrv_SetPixelFormat, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/dlls/gdi32/dibdrv/dibdrv.h b/dlls/gdi32/dibdrv/dibdrv.h index 0a99fba0ec4..2c53205d8e2 100644 --- a/dlls/gdi32/dibdrv/dibdrv.h +++ b/dlls/gdi32/dibdrv/dibdrv.h @@ -114,7 +114,6 @@ extern DWORD dibdrv_BlendImage( PHYSDEV dev, BITMAPINFO *info, const struct g struct bitblt_coords *src, struct bitblt_coords *dst, BLENDFUNCTION func ) DECLSPEC_HIDDEN; extern BOOL dibdrv_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT start_x, INT start_y, INT end_x, INT end_y ) DECLSPEC_HIDDEN; -extern int dibdrv_DescribePixelFormat( PHYSDEV dev, int fmt, UINT size, PIXELFORMATDESCRIPTOR *descr ) DECLSPEC_HIDDEN; extern BOOL dibdrv_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern BOOL dibdrv_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT type ) DECLSPEC_HIDDEN; extern BOOL dibdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, @@ -146,7 +145,6 @@ extern HPEN dibdrv_SelectPen( PHYSDEV dev, HPEN hpen, const struct brush_pat extern COLORREF dibdrv_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF dibdrv_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN; -extern BOOL dibdrv_SetPixelFormat( PHYSDEV dev, int fmt, const PIXELFORMATDESCRIPTOR *descr ) DECLSPEC_HIDDEN; extern BOOL dibdrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst, PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop ) DECLSPEC_HIDDEN; extern struct opengl_funcs *dibdrv_wine_get_wgl_driver( PHYSDEV dev, UINT version ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/dibdrv/opengl.c b/dlls/gdi32/dibdrv/opengl.c index d37efdfb3b8..7956484f806 100644 --- a/dlls/gdi32/dibdrv/opengl.c +++ b/dlls/gdi32/dibdrv/opengl.c @@ -40,6 +40,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(dib); #include "wine/wgl_driver.h" +extern BOOL WINAPI GdiSetPixelFormat( HDC hdc, INT fmt, const PIXELFORMATDESCRIPTOR *pfd ); + struct wgl_context { OSMesaContext context; @@ -135,9 +137,9 @@ failed: } /********************************************************************** - * dibdrv_DescribePixelFormat + * dibdrv_wglDescribePixelFormat */ -int dibdrv_DescribePixelFormat( PHYSDEV dev, int fmt, UINT size, PIXELFORMATDESCRIPTOR *descr ) +int dibdrv_wglDescribePixelFormat( HDC hdc, int fmt, UINT size, PIXELFORMATDESCRIPTOR *descr ) { int ret = sizeof(pixel_formats) / sizeof(pixel_formats[0]); @@ -170,22 +172,6 @@ int dibdrv_DescribePixelFormat( PHYSDEV dev, int fmt, UINT size, PIXELFORMATDESC return ret; } -/********************************************************************** - * dibdrv_SetPixelFormat - */ -BOOL dibdrv_SetPixelFormat( PHYSDEV dev, int fmt, const PIXELFORMATDESCRIPTOR *descr ) -{ - DC *dc; - BOOL ret = TRUE; - - if (fmt <= 0 || fmt > nb_formats) return FALSE; - dc = get_dc_ptr( dev->hdc ); - if (!dc->pixel_format) dc->pixel_format = fmt; - else ret = (dc->pixel_format == fmt); - release_dc_ptr( dc ); - return ret; -} - /*********************************************************************** * dibdrv_wglCopyContext */ @@ -300,6 +286,15 @@ static BOOL dibdrv_wglMakeCurrent( HDC hdc, struct wgl_context *context ) return ret; } +/********************************************************************** + * dibdrv_wglSetPixelFormat + */ +BOOL dibdrv_wglSetPixelFormat( HDC hdc, int fmt, const PIXELFORMATDESCRIPTOR *descr ) +{ + if (fmt <= 0 || fmt > nb_formats) return FALSE; + return GdiSetPixelFormat( hdc, fmt, descr ); +} + /*********************************************************************** * dibdrv_wglShareLists */ @@ -315,9 +310,11 @@ static struct opengl_funcs opengl_funcs = dibdrv_wglCopyContext, /* p_wglCopyContext */ dibdrv_wglCreateContext, /* p_wglCreateContext */ dibdrv_wglDeleteContext, /* p_wglDeleteContext */ + dibdrv_wglDescribePixelFormat,/* p_wglDescribePixelFormat */ dibdrv_wglGetPixelFormat, /* p_wglGetPixelFormat */ dibdrv_wglGetProcAddress, /* p_wglGetProcAddress */ dibdrv_wglMakeCurrent, /* p_wglMakeCurrent */ + dibdrv_wglSetPixelFormat, /* p_wglSetPixelFormat */ dibdrv_wglShareLists, /* p_wglShareLists */ } }; @@ -340,28 +337,13 @@ struct opengl_funcs *dibdrv_wine_get_wgl_driver( PHYSDEV dev, UINT version ) #else /* SONAME_LIBOSMESA */ -/********************************************************************** - * dibdrv_DescribePixelFormat - */ -int dibdrv_DescribePixelFormat( PHYSDEV dev, int fmt, UINT size, PIXELFORMATDESCRIPTOR *descr ) -{ - return 0; -} - -/********************************************************************** - * dibdrv_SetPixelFormat - */ -BOOL dibdrv_SetPixelFormat( PHYSDEV dev, int fmt, const PIXELFORMATDESCRIPTOR *descr ) -{ - return FALSE; -} - /********************************************************************** * dibdrv_wine_get_wgl_driver */ struct opengl_funcs *dibdrv_wine_get_wgl_driver( PHYSDEV dev, UINT version ) { - ERR( "OSMesa not compiled in, no OpenGL bitmap support\n" ); + static int warned; + if (!warned++) ERR( "OSMesa not compiled in, no OpenGL bitmap support\n" ); return (void *)-1; } diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index 9ebb64cebf3..4cf868f2455 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -228,11 +228,6 @@ static BOOL nulldrv_DeleteObject( PHYSDEV dev, HGDIOBJ obj ) return TRUE; } -static INT nulldrv_DescribePixelFormat( PHYSDEV dev, INT format, UINT size, PIXELFORMATDESCRIPTOR * descr ) -{ - return 0; -} - static DWORD nulldrv_DeviceCapabilities( LPSTR buffer, LPCSTR device, LPCSTR port, WORD cap, LPSTR output, DEVMODEA *devmode ) { @@ -595,11 +590,6 @@ static COLORREF nulldrv_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) return color; } -static BOOL nulldrv_SetPixelFormat( PHYSDEV dev, INT format, const PIXELFORMATDESCRIPTOR *descr ) -{ - return FALSE; -} - static INT nulldrv_SetPolyFillMode( PHYSDEV dev, INT mode ) { return mode; @@ -681,7 +671,6 @@ const struct gdi_dc_funcs null_driver = nulldrv_CreateDC, /* pCreateDC */ nulldrv_DeleteDC, /* pDeleteDC */ nulldrv_DeleteObject, /* pDeleteObject */ - nulldrv_DescribePixelFormat, /* pDescribePixelFormat */ nulldrv_DeviceCapabilities, /* pDeviceCapabilities */ nulldrv_Ellipse, /* pEllipse */ nulldrv_EndDoc, /* pEndDoc */ @@ -773,7 +762,6 @@ const struct gdi_dc_funcs null_driver = nulldrv_SetMapMode, /* pSetMapMode */ nulldrv_SetMapperFlags, /* pSetMapperFlags */ nulldrv_SetPixel, /* pSetPixel */ - nulldrv_SetPixelFormat, /* pSetPixelFormat */ nulldrv_SetPolyFillMode, /* pSetPolyFillMode */ nulldrv_SetROP2, /* pSetROP2 */ nulldrv_SetRelAbs, /* pSetRelAbs */ diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index dfef8e4e3b5..489a9ae7a0c 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -50,7 +50,6 @@ static const struct gdi_dc_funcs EMFDRV_Funcs = NULL, /* pCreateDC */ EMFDRV_DeleteDC, /* pDeleteDC */ EMFDRV_DeleteObject, /* pDeleteObject */ - NULL, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ EMFDRV_Ellipse, /* pEllipse */ NULL, /* pEndDoc */ @@ -142,7 +141,6 @@ static const struct gdi_dc_funcs EMFDRV_Funcs = EMFDRV_SetMapMode, /* pSetMapMode */ EMFDRV_SetMapperFlags, /* pSetMapperFlags */ EMFDRV_SetPixel, /* pSetPixel */ - NULL, /* pSetPixelFormat */ EMFDRV_SetPolyFillMode, /* pSetPolyFillMode */ EMFDRV_SetROP2, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index eddaa4458bb..494ea7db581 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -7754,7 +7754,6 @@ static const struct gdi_dc_funcs freetype_funcs = freetype_CreateDC, /* pCreateDC */ freetype_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - NULL, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ NULL, /* pEllipse */ NULL, /* pEndDoc */ @@ -7846,7 +7845,6 @@ static const struct gdi_dc_funcs freetype_funcs = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ NULL, /* pSetPixel */ - NULL, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c index 691a5d7612a..c44c932c98d 100644 --- a/dlls/gdi32/mfdrv/init.c +++ b/dlls/gdi32/mfdrv/init.c @@ -113,7 +113,6 @@ static const struct gdi_dc_funcs MFDRV_Funcs = NULL, /* pCreateDC */ MFDRV_DeleteDC, /* pDeleteDC */ MFDRV_DeleteObject, /* pDeleteObject */ - NULL, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ MFDRV_Ellipse, /* pEllipse */ NULL, /* pEndDoc */ @@ -205,7 +204,6 @@ static const struct gdi_dc_funcs MFDRV_Funcs = MFDRV_SetMapMode, /* pSetMapMode */ MFDRV_SetMapperFlags, /* pSetMapperFlags */ MFDRV_SetPixel, /* pSetPixel */ - NULL, /* pSetPixelFormat */ MFDRV_SetPolyFillMode, /* pSetPolyFillMode */ MFDRV_SetROP2, /* pSetROP2 */ MFDRV_SetRelAbs, /* pSetRelAbs */ diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c index 822c86ad8b8..e0edd72178e 100644 --- a/dlls/gdi32/painting.c +++ b/dlls/gdi32/painting.c @@ -490,21 +490,19 @@ COLORREF WINAPI GetPixel( HDC hdc, INT x, INT y ) * * Probably not the correct semantics, it's supposed to be an internal backend for SetPixelFormat. */ -BOOL WINAPI GdiSetPixelFormat( HDC hdc, INT iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) +BOOL WINAPI GdiSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR *descr ) { - INT bRet = FALSE; - DC * dc = get_dc_ptr( hdc ); + DC *dc; + BOOL ret = TRUE; - TRACE("(%p,%d,%p)\n",hdc,iPixelFormat,ppfd); + TRACE("(%p,%d,%p)\n", hdc, format, descr); - if (dc) - { - PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetPixelFormat ); - update_dc( dc ); - bRet = physdev->funcs->pSetPixelFormat( physdev, iPixelFormat, ppfd ); - release_dc_ptr( dc ); - } - return bRet; + if (!(dc = get_dc_ptr( hdc ))) return FALSE; + + if (!dc->pixel_format) dc->pixel_format = format; + else ret = (dc->pixel_format == format); + release_dc_ptr( dc ); + return ret; } @@ -513,22 +511,10 @@ BOOL WINAPI GdiSetPixelFormat( HDC hdc, INT iPixelFormat, const PIXELFORMATDESCR * * Probably not the correct semantics, it's supposed to be an internal backend for DescribePixelFormat. */ -INT WINAPI GdiDescribePixelFormat( HDC hdc, INT iPixelFormat, UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd ) +INT WINAPI GdiDescribePixelFormat( HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR *descr ) { - INT ret = 0; - DC * dc = get_dc_ptr( hdc ); - - TRACE("(%p,%d,%d,%p): stub\n",hdc,iPixelFormat,nBytes,ppfd); - - if (dc) - { - PHYSDEV physdev = GET_DC_PHYSDEV( dc, pDescribePixelFormat ); - update_dc( dc ); - ret = physdev->funcs->pDescribePixelFormat( physdev, iPixelFormat, nBytes, ppfd ); - release_dc_ptr( dc ); - } - return ret; + FIXME( "(%p,%d,%d,%p): stub\n", hdc, format, size, descr ); + return 0; } diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c index c2bb8eca7cd..0a591af15f2 100644 --- a/dlls/gdi32/path.c +++ b/dlls/gdi32/path.c @@ -2247,7 +2247,6 @@ const struct gdi_dc_funcs path_driver = pathdrv_CreateDC, /* pCreateDC */ pathdrv_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - NULL, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ pathdrv_Ellipse, /* pEllipse */ NULL, /* pEndDoc */ @@ -2339,7 +2338,6 @@ const struct gdi_dc_funcs path_driver = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ NULL, /* pSetPixel */ - NULL, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index cf6d4e11c6a..82cce39252b 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -622,10 +622,17 @@ my %wgl_functions = [ "UINT", "mask" ] ] ], "wglCreateContext" => [ "struct wgl_context *", [ [ "HDC", "hdc" ] ] ], "wglDeleteContext" => [ "void", [ [ "struct wgl_context *", "context" ] ] ], + "wglDescribePixelFormat" => [ "INT", [ [ "HDC", "hdc" ], + [ "INT", "format" ], + [ "UINT", "size" ], + [ "PIXELFORMATDESCRIPTOR *", "descr" ] ] ], "wglGetPixelFormat" => [ "INT", [ [ "HDC", "hdc" ] ] ], "wglGetProcAddress" => [ "PROC", [ [ "LPCSTR", "name" ] ] ], "wglMakeCurrent" => [ "BOOL", [ [ "HDC", "hdc" ], [ "struct wgl_context *", "context" ] ] ], + "wglSetPixelFormat" => [ "BOOL", [ [ "HDC", "hdc" ], + [ "INT", "format" ], + [ "const PIXELFORMATDESCRIPTOR *", "descr" ] ] ], "wglShareLists" => [ "BOOL", [ [ "struct wgl_context *", "org" ], [ "struct wgl_context *", "dst" ] ] ], ); @@ -874,6 +881,7 @@ print NORM " #include #include \"opengl_ext.h\" #include \"winternl.h\" +#include \"wingdi.h\" #include \"wine/wgl_driver.h\" #include \"wine/debug.h\" @@ -913,6 +921,7 @@ print EXT " #include #include \"opengl_ext.h\" #include \"winternl.h\" +#include \"wingdi.h\" #define WGL_WGLEXT_PROTOTYPES #include \"wine/wglext.h\" #include \"wine/wgl_driver.h\" diff --git a/dlls/opengl32/opengl_ext.c b/dlls/opengl32/opengl_ext.c index 0c1cbe9e186..8e33baa0a42 100644 --- a/dlls/opengl32/opengl_ext.c +++ b/dlls/opengl32/opengl_ext.c @@ -5,6 +5,7 @@ #include #include "opengl_ext.h" #include "winternl.h" +#include "wingdi.h" #define WGL_WGLEXT_PROTOTYPES #include "wine/wglext.h" #include "wine/wgl_driver.h" diff --git a/dlls/opengl32/opengl_norm.c b/dlls/opengl32/opengl_norm.c index 2f5dab7ca73..c387ecde73b 100644 --- a/dlls/opengl32/opengl_norm.c +++ b/dlls/opengl32/opengl_norm.c @@ -5,6 +5,7 @@ #include #include "opengl_ext.h" #include "winternl.h" +#include "wingdi.h" #include "wine/wgl_driver.h" #include "wine/debug.h" @@ -3027,9 +3028,11 @@ void WINAPI wine_glViewport( GLint x, GLint y, GLsizei width, GLsizei height ) { static BOOL null_wglCopyContext( struct wgl_context * src, struct wgl_context * dst, UINT mask ) { return 0; } static struct wgl_context * null_wglCreateContext( HDC hdc ) { return 0; } static void null_wglDeleteContext( struct wgl_context * context ) { } +static INT null_wglDescribePixelFormat( HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR * descr ) { return 0; } static INT null_wglGetPixelFormat( HDC hdc ) { return 0; } static PROC null_wglGetProcAddress( LPCSTR name ) { return 0; } static BOOL null_wglMakeCurrent( HDC hdc, struct wgl_context * context ) { return 0; } +static BOOL null_wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR * descr ) { return 0; } static BOOL null_wglShareLists( struct wgl_context * org, struct wgl_context * dst ) { return 0; } static void null_glAccum( GLenum op, GLfloat value ) { } static void null_glAlphaFunc( GLenum func, GLfloat ref ) { } @@ -3374,9 +3377,11 @@ struct opengl_funcs null_opengl_funcs = null_wglCopyContext, null_wglCreateContext, null_wglDeleteContext, + null_wglDescribePixelFormat, null_wglGetPixelFormat, null_wglGetProcAddress, null_wglMakeCurrent, + null_wglSetPixelFormat, null_wglShareLists, }, #define USE_GL_FUNC(name) null_##name, diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index 162f132438d..bcf398d1b22 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -50,8 +50,6 @@ extern struct opengl_funcs null_opengl_funcs; const GLubyte * WINAPI wine_glGetString( GLenum name ); /* internal GDI functions */ -extern INT WINAPI GdiDescribePixelFormat( HDC hdc, INT fmt, UINT size, PIXELFORMATDESCRIPTOR *pfd ); -extern BOOL WINAPI GdiSetPixelFormat( HDC hdc, INT fmt, const PIXELFORMATDESCRIPTOR *pfd ); extern BOOL WINAPI GdiSwapBuffers( HDC hdc ); /* handle management */ @@ -170,15 +168,6 @@ static void free_handle_ptr( struct wgl_handle *ptr ) LeaveCriticalSection( &wgl_section ); } -/*********************************************************************** - * wglSetPixelFormat(OPENGL32.@) - */ -BOOL WINAPI wglSetPixelFormat( HDC hdc, INT iPixelFormat, - const PIXELFORMATDESCRIPTOR *ppfd) -{ - return GdiSetPixelFormat(hdc, iPixelFormat, ppfd); -} - /*********************************************************************** * wglCopyContext (OPENGL32.@) */ @@ -417,6 +406,16 @@ HGLRC WINAPI wglGetCurrentContext(void) return NtCurrentTeb()->glCurrentRC; } +/*********************************************************************** + * wglDescribePixelFormat (OPENGL32.@) + */ +INT WINAPI wglDescribePixelFormat(HDC hdc, INT format, UINT size, PIXELFORMATDESCRIPTOR *descr ) +{ + struct opengl_funcs *funcs = get_dc_funcs( hdc ); + if (!funcs) return 0; + return funcs->wgl.p_wglDescribePixelFormat( hdc, format, size, descr ); +} + /*********************************************************************** * wglChoosePixelFormat (OPENGL32.@) */ @@ -432,7 +431,7 @@ INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd) ppfd->cColorBits, ppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits, ppfd->cAlphaBits, ppfd->cAccumBits, ppfd->cDepthBits, ppfd->cStencilBits, ppfd->cAuxBuffers ); - count = GdiDescribePixelFormat( hdc, 0, 0, NULL ); + count = wglDescribePixelFormat( hdc, 0, 0, NULL ); if (!count) return 0; best_format = 0; @@ -445,7 +444,7 @@ INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd) for (i = 1; i <= count; i++) { - if (!GdiDescribePixelFormat( hdc, i, sizeof(format), &format )) continue; + if (!wglDescribePixelFormat( hdc, i, sizeof(format), &format )) continue; if (ppfd->iPixelType != format.iPixelType) { @@ -580,15 +579,6 @@ INT WINAPI wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR* ppfd) return best_format; } -/*********************************************************************** - * wglDescribePixelFormat (OPENGL32.@) - */ -INT WINAPI wglDescribePixelFormat(HDC hdc, INT iPixelFormat, UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd) -{ - return GdiDescribePixelFormat(hdc, iPixelFormat, nBytes, ppfd); -} - /*********************************************************************** * wglGetPixelFormat (OPENGL32.@) */ @@ -599,6 +589,16 @@ INT WINAPI wglGetPixelFormat(HDC hdc) return funcs->wgl.p_wglGetPixelFormat( hdc ); } +/*********************************************************************** + * wglSetPixelFormat(OPENGL32.@) + */ +BOOL WINAPI wglSetPixelFormat( HDC hdc, INT format, const PIXELFORMATDESCRIPTOR *descr ) +{ + struct opengl_funcs *funcs = get_dc_funcs( hdc ); + if (!funcs) return 0; + return funcs->wgl.p_wglSetPixelFormat( hdc, format, descr ); +} + /*********************************************************************** * wglCreateLayerContext (OPENGL32.@) */ diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index f659287f3ec..9a4889cd951 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -724,7 +724,6 @@ static const struct gdi_dc_funcs psdrv_funcs = PSDRV_CreateDC, /* pCreateDC */ PSDRV_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - NULL, /* pDescribePixelFormat */ PSDRV_DeviceCapabilities, /* pDeviceCapabilities */ PSDRV_Ellipse, /* pEllipse */ PSDRV_EndDoc, /* pEndDoc */ @@ -816,7 +815,6 @@ static const struct gdi_dc_funcs psdrv_funcs = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ PSDRV_SetPixel, /* pSetPixel */ - NULL, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c index 7dcf8da81dd..0f5d2c2a38c 100644 --- a/dlls/winex11.drv/init.c +++ b/dlls/winex11.drv/init.c @@ -436,31 +436,6 @@ static INT X11DRV_ExtEscape( PHYSDEV dev, INT escape, INT in_count, LPCVOID in_d } -static inline void opengl_error(void) -{ - static int warned; - if (!warned++) ERR("No OpenGL support compiled in.\n"); -} - -/*********************************************************************** - * X11DRV_DescribePixelFormat - */ -static int X11DRV_DescribePixelFormat( PHYSDEV dev, int fmt, UINT size, PIXELFORMATDESCRIPTOR *ppfd ) -{ - opengl_error(); - return 0; -} - -/*********************************************************************** - * X11DRV_SetPixelFormat - */ -static BOOL X11DRV_SetPixelFormat( PHYSDEV dev, int fmt, const PIXELFORMATDESCRIPTOR *ppfd ) -{ - opengl_error(); - return FALSE; -} - - static const struct gdi_dc_funcs x11drv_funcs = { NULL, /* pAbortDoc */ @@ -477,7 +452,6 @@ static const struct gdi_dc_funcs x11drv_funcs = X11DRV_CreateDC, /* pCreateDC */ X11DRV_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - X11DRV_DescribePixelFormat, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ X11DRV_Ellipse, /* pEllipse */ NULL, /* pEndDoc */ @@ -569,7 +543,6 @@ static const struct gdi_dc_funcs x11drv_funcs = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ X11DRV_SetPixel, /* pSetPixel */ - X11DRV_SetPixelFormat, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index b2de6cef220..4b322892367 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -1161,8 +1161,8 @@ Drawable create_glxpixmap(Display *display, XVisualInfo *vis, Pixmap parent) * * Get the pixel-format descriptor associated to the given id */ -static int glxdrv_DescribePixelFormat(PHYSDEV dev, int iPixelFormat, - UINT nBytes, PIXELFORMATDESCRIPTOR *ppfd) +static int glxdrv_wglDescribePixelFormat( HDC hdc, int iPixelFormat, + UINT nBytes, PIXELFORMATDESCRIPTOR *ppfd) { /*XVisualInfo *vis;*/ int value; @@ -1173,7 +1173,7 @@ static int glxdrv_DescribePixelFormat(PHYSDEV dev, int iPixelFormat, if (!has_opengl()) return 0; - TRACE("(%p,%d,%d,%p)\n", dev->hdc, iPixelFormat, nBytes, ppfd); + TRACE("(%p,%d,%d,%p)\n", hdc, iPixelFormat, nBytes, ppfd); /* Look for the iPixelFormat in our list of supported formats. If it is supported we get the index in the FBConfig table and the number of supported formats back */ fmt = ConvertPixelFormatWGLtoGLX(gdi_display, iPixelFormat, FALSE /* Offscreen */, &fmt_count); @@ -1335,24 +1335,27 @@ static int glxdrv_wglGetPixelFormat( HDC hdc ) } /*********************************************************************** - * glxdrv_SetPixelFormat + * glxdrv_wglSetPixelFormat */ -static BOOL glxdrv_SetPixelFormat(PHYSDEV dev, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) +static BOOL glxdrv_wglSetPixelFormat( HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd ) { - struct glx_physdev *physdev = get_glxdrv_dev( dev ); + struct x11drv_escape_get_drawable escape; WineGLPixelFormat *fmt; int value; HWND hwnd; - TRACE("(%p,%d,%p)\n", dev->hdc, iPixelFormat, ppfd); + TRACE("(%p,%d,%p)\n", hdc, iPixelFormat, ppfd); - if (!has_opengl()) return FALSE; + escape.code = X11DRV_GET_DRAWABLE; + if (!ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape.code), (LPCSTR)&escape.code, + sizeof(escape), (LPSTR)&escape )) + return 0; - if(physdev->pixel_format) /* cannot change it if already set */ - return (physdev->pixel_format == iPixelFormat); + if (escape.pixel_format) /* cannot change it if already set */ + return (escape.pixel_format == iPixelFormat); /* SetPixelFormat is not allowed on the X root_window e.g. GetDC(0) */ - if(physdev->x11dev->drawable == root_window) + if (escape.drawable == root_window) { ERR("Invalid operation on root_window\n"); return FALSE; @@ -1369,7 +1372,7 @@ static BOOL glxdrv_SetPixelFormat(PHYSDEV dev, int iPixelFormat, const PIXELFORM pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_DRAWABLE_TYPE, &value); wine_tsx11_unlock(); - hwnd = WindowFromDC(physdev->dev.hdc); + hwnd = WindowFromDC( hdc ); if(hwnd) { if(!(value&GLX_WINDOW_BIT)) { WARN("Pixel format %d is not compatible for window rendering\n", iPixelFormat); @@ -3116,7 +3119,6 @@ static const struct gdi_dc_funcs glxdrv_funcs = glxdrv_CreateDC, /* pCreateDC */ glxdrv_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - glxdrv_DescribePixelFormat, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ NULL, /* pEllipse */ NULL, /* pEndDoc */ @@ -3208,7 +3210,6 @@ static const struct gdi_dc_funcs glxdrv_funcs = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ NULL, /* pSetPixel */ - glxdrv_SetPixelFormat, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ @@ -3241,9 +3242,11 @@ static struct opengl_funcs opengl_funcs = glxdrv_wglCopyContext, /* p_wglCopyContext */ glxdrv_wglCreateContext, /* p_wglCreateContext */ glxdrv_wglDeleteContext, /* p_wglDeleteContext */ + glxdrv_wglDescribePixelFormat, /* p_wglDescribePixelFormat */ glxdrv_wglGetPixelFormat, /* p_wglGetPixelFormat */ glxdrv_wglGetProcAddress, /* p_wglGetProcAddress */ glxdrv_wglMakeCurrent, /* p_wglMakeCurrent */ + glxdrv_wglSetPixelFormat, /* p_wglSetPixelFormat */ glxdrv_wglShareLists, /* p_wglShareLists */ } }; diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index 85229a74bac..55950b1d74d 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -2480,7 +2480,6 @@ static const struct gdi_dc_funcs xrender_funcs = xrenderdrv_CreateDC, /* pCreateDC */ xrenderdrv_DeleteDC, /* pDeleteDC */ NULL, /* pDeleteObject */ - NULL, /* pDescribePixelFormat */ NULL, /* pDeviceCapabilities */ NULL, /* pEllipse */ NULL, /* pEndDoc */ @@ -2572,7 +2571,6 @@ static const struct gdi_dc_funcs xrender_funcs = NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ NULL, /* pSetPixel */ - NULL, /* pSetPixelFormat */ NULL, /* pSetPolyFillMode */ NULL, /* pSetROP2 */ NULL, /* pSetRelAbs */ diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index 68cb7df2e22..2f316280556 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -76,7 +76,6 @@ struct gdi_dc_funcs BOOL (*pCreateDC)(PHYSDEV*,LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*); BOOL (*pDeleteDC)(PHYSDEV); BOOL (*pDeleteObject)(PHYSDEV,HGDIOBJ); - INT (*pDescribePixelFormat)(PHYSDEV,INT,UINT,PIXELFORMATDESCRIPTOR *); DWORD (*pDeviceCapabilities)(LPSTR,LPCSTR,LPCSTR,WORD,LPSTR,LPDEVMODEA); BOOL (*pEllipse)(PHYSDEV,INT,INT,INT,INT); INT (*pEndDoc)(PHYSDEV); @@ -168,7 +167,6 @@ struct gdi_dc_funcs INT (*pSetMapMode)(PHYSDEV,INT); DWORD (*pSetMapperFlags)(PHYSDEV,DWORD); COLORREF (*pSetPixel)(PHYSDEV,INT,INT,COLORREF); - BOOL (*pSetPixelFormat)(PHYSDEV,INT,const PIXELFORMATDESCRIPTOR *); INT (*pSetPolyFillMode)(PHYSDEV,INT); INT (*pSetROP2)(PHYSDEV,INT); INT (*pSetRelAbs)(PHYSDEV,INT); @@ -198,7 +196,7 @@ struct gdi_dc_funcs }; /* increment this when you change the DC function table */ -#define WINE_GDI_DRIVER_VERSION 42 +#define WINE_GDI_DRIVER_VERSION 43 #define GDI_PRIORITY_NULL_DRV 0 /* null driver */ #define GDI_PRIORITY_FONT_DRV 100 /* any font driver */ diff --git a/include/wine/wgl_driver.h b/include/wine/wgl_driver.h index 209c3616e60..c4092e2f578 100644 --- a/include/wine/wgl_driver.h +++ b/include/wine/wgl_driver.h @@ -7,7 +7,7 @@ #define WINE_GLAPI #endif -#define WINE_WGL_DRIVER_VERSION 5 +#define WINE_WGL_DRIVER_VERSION 6 struct wgl_context; struct wgl_pbuffer; @@ -19,9 +19,11 @@ struct opengl_funcs BOOL (WINE_GLAPI *p_wglCopyContext)(struct wgl_context *,struct wgl_context *,UINT); struct wgl_context * (WINE_GLAPI *p_wglCreateContext)(HDC); void (WINE_GLAPI *p_wglDeleteContext)(struct wgl_context *); + INT (WINE_GLAPI *p_wglDescribePixelFormat)(HDC,INT,UINT,PIXELFORMATDESCRIPTOR *); INT (WINE_GLAPI *p_wglGetPixelFormat)(HDC); PROC (WINE_GLAPI *p_wglGetProcAddress)(LPCSTR); BOOL (WINE_GLAPI *p_wglMakeCurrent)(HDC,struct wgl_context *); + BOOL (WINE_GLAPI *p_wglSetPixelFormat)(HDC,INT,const PIXELFORMATDESCRIPTOR *); BOOL (WINE_GLAPI *p_wglShareLists)(struct wgl_context *,struct wgl_context *); } wgl;