| /************************************************************************** |
| * |
| * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. |
| * All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial portions |
| * of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR |
| * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| **************************************************************************/ |
| |
| /** |
| * @file |
| * |
| * Fake WGL API implementation. |
| * |
| * These functions implement the WGL API, on top of the ICD DDI, so that the |
| * resulting DLL can be used as a drop-in replacement for the system's |
| * opengl32.dll. |
| * |
| * These functions never get called for ICD drivers, which use exclusively the |
| * ICD DDI, i.e., the Drv* entrypoints. |
| */ |
| |
| #include <windows.h> |
| |
| #include "util/u_debug.h" |
| #include "stw_icd.h" |
| #include "stw_context.h" |
| #include "stw_pixelformat.h" |
| #include "stw_wgl.h" |
| |
| |
| WINGDIAPI BOOL APIENTRY |
| wglCopyContext( |
| HGLRC hglrcSrc, |
| HGLRC hglrcDst, |
| UINT mask ) |
| { |
| return DrvCopyContext( (DHGLRC)(UINT_PTR)hglrcSrc, |
| (DHGLRC)(UINT_PTR)hglrcDst, |
| mask ); |
| } |
| |
| WINGDIAPI HGLRC APIENTRY |
| wglCreateContext( |
| HDC hdc ) |
| { |
| return (HGLRC) DrvCreateContext(hdc); |
| } |
| |
| WINGDIAPI HGLRC APIENTRY |
| wglCreateLayerContext( |
| HDC hdc, |
| int iLayerPlane ) |
| { |
| return (HGLRC) DrvCreateLayerContext( hdc, iLayerPlane ); |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglDeleteContext( |
| HGLRC hglrc ) |
| { |
| return DrvDeleteContext((DHGLRC)(UINT_PTR)hglrc ); |
| } |
| |
| |
| WINGDIAPI HGLRC APIENTRY |
| wglGetCurrentContext( VOID ) |
| { |
| return (HGLRC)(UINT_PTR)stw_get_current_context(); |
| } |
| |
| WINGDIAPI HDC APIENTRY |
| wglGetCurrentDC( VOID ) |
| { |
| return stw_get_current_dc(); |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglMakeCurrent( |
| HDC hdc, |
| HGLRC hglrc ) |
| { |
| return DrvSetContext( hdc, (DHGLRC)(UINT_PTR)hglrc, NULL ) ? TRUE : FALSE; |
| } |
| |
| |
| WINGDIAPI BOOL APIENTRY |
| wglSwapBuffers( |
| HDC hdc ) |
| { |
| return DrvSwapBuffers( hdc ); |
| } |
| |
| |
| WINGDIAPI DWORD WINAPI |
| wglSwapMultipleBuffers(UINT n, |
| CONST WGLSWAP *ps) |
| { |
| UINT i; |
| |
| for (i =0; i < n; ++i) |
| wglSwapBuffers(ps->hdc); |
| |
| return 0; |
| } |
| |
| |
| WINGDIAPI BOOL APIENTRY |
| wglSwapLayerBuffers( |
| HDC hdc, |
| UINT fuPlanes ) |
| { |
| return DrvSwapLayerBuffers( hdc, fuPlanes ); |
| } |
| |
| WINGDIAPI PROC APIENTRY |
| wglGetProcAddress( |
| LPCSTR lpszProc ) |
| { |
| return DrvGetProcAddress( lpszProc ); |
| } |
| |
| |
| WINGDIAPI int APIENTRY |
| wglChoosePixelFormat( |
| HDC hdc, |
| CONST PIXELFORMATDESCRIPTOR *ppfd ) |
| { |
| if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR ) || ppfd->nVersion != 1) |
| return 0; |
| if (ppfd->iPixelType != PFD_TYPE_RGBA) |
| return 0; |
| if (!(ppfd->dwFlags & PFD_DRAW_TO_WINDOW)) |
| return 0; |
| if (!(ppfd->dwFlags & PFD_SUPPORT_OPENGL)) |
| return 0; |
| if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP) |
| return 0; |
| if (ppfd->dwFlags & PFD_SUPPORT_GDI) |
| return 0; |
| if (!(ppfd->dwFlags & PFD_STEREO_DONTCARE) && (ppfd->dwFlags & PFD_STEREO)) |
| return 0; |
| |
| return stw_pixelformat_choose( hdc, ppfd ); |
| } |
| |
| WINGDIAPI int APIENTRY |
| wglDescribePixelFormat( |
| HDC hdc, |
| int iPixelFormat, |
| UINT nBytes, |
| LPPIXELFORMATDESCRIPTOR ppfd ) |
| { |
| return DrvDescribePixelFormat( hdc, iPixelFormat, nBytes, ppfd ); |
| } |
| |
| WINGDIAPI int APIENTRY |
| wglGetPixelFormat( |
| HDC hdc ) |
| { |
| return stw_pixelformat_get( hdc ); |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglSetPixelFormat( |
| HDC hdc, |
| int iPixelFormat, |
| const PIXELFORMATDESCRIPTOR *ppfd ) |
| { |
| /* SetPixelFormat (hence wglSetPixelFormat) must not touch ppfd, per |
| * http://msdn.microsoft.com/en-us/library/dd369049(v=vs.85).aspx |
| */ |
| (void) ppfd; |
| |
| return DrvSetPixelFormat( hdc, iPixelFormat ); |
| } |
| |
| |
| WINGDIAPI BOOL APIENTRY |
| wglUseFontBitmapsA( |
| HDC hdc, |
| DWORD first, |
| DWORD count, |
| DWORD listBase ) |
| { |
| (void) hdc; |
| (void) first; |
| (void) count; |
| (void) listBase; |
| |
| assert( 0 ); |
| |
| return FALSE; |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglShareLists( |
| HGLRC hglrc1, |
| HGLRC hglrc2 ) |
| { |
| return DrvShareLists((DHGLRC)(UINT_PTR)hglrc1, |
| (DHGLRC)(UINT_PTR)hglrc2); |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglUseFontBitmapsW( |
| HDC hdc, |
| DWORD first, |
| DWORD count, |
| DWORD listBase ) |
| { |
| (void) hdc; |
| (void) first; |
| (void) count; |
| (void) listBase; |
| |
| assert( 0 ); |
| |
| return FALSE; |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglUseFontOutlinesA( |
| HDC hdc, |
| DWORD first, |
| DWORD count, |
| DWORD listBase, |
| FLOAT deviation, |
| FLOAT extrusion, |
| int format, |
| LPGLYPHMETRICSFLOAT lpgmf ) |
| { |
| (void) hdc; |
| (void) first; |
| (void) count; |
| (void) listBase; |
| (void) deviation; |
| (void) extrusion; |
| (void) format; |
| (void) lpgmf; |
| |
| assert( 0 ); |
| |
| return FALSE; |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglUseFontOutlinesW( |
| HDC hdc, |
| DWORD first, |
| DWORD count, |
| DWORD listBase, |
| FLOAT deviation, |
| FLOAT extrusion, |
| int format, |
| LPGLYPHMETRICSFLOAT lpgmf ) |
| { |
| (void) hdc; |
| (void) first; |
| (void) count; |
| (void) listBase; |
| (void) deviation; |
| (void) extrusion; |
| (void) format; |
| (void) lpgmf; |
| |
| assert( 0 ); |
| |
| return FALSE; |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglDescribeLayerPlane( |
| HDC hdc, |
| int iPixelFormat, |
| int iLayerPlane, |
| UINT nBytes, |
| LPLAYERPLANEDESCRIPTOR plpd ) |
| { |
| return DrvDescribeLayerPlane(hdc, iPixelFormat, iLayerPlane, nBytes, plpd); |
| } |
| |
| WINGDIAPI int APIENTRY |
| wglSetLayerPaletteEntries( |
| HDC hdc, |
| int iLayerPlane, |
| int iStart, |
| int cEntries, |
| CONST COLORREF *pcr ) |
| { |
| return DrvSetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr); |
| } |
| |
| WINGDIAPI int APIENTRY |
| wglGetLayerPaletteEntries( |
| HDC hdc, |
| int iLayerPlane, |
| int iStart, |
| int cEntries, |
| COLORREF *pcr ) |
| { |
| return DrvGetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr); |
| } |
| |
| WINGDIAPI BOOL APIENTRY |
| wglRealizeLayerPalette( |
| HDC hdc, |
| int iLayerPlane, |
| BOOL bRealize ) |
| { |
| (void) hdc; |
| (void) iLayerPlane; |
| (void) bRealize; |
| |
| assert( 0 ); |
| |
| return FALSE; |
| } |