1/************************************************************************** 2 * 3 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28/** 29 * @file 30 * 31 * Fake WGL API implementation. 32 * 33 * These functions implement the WGL API, on top of the ICD DDI, so that the 34 * resulting DLL can be used as a drop-in replacement for the system's 35 * opengl32.dll. 36 * 37 * These functions never get called for ICD drivers, which use exclusively the 38 * ICD DDI, i.e., the Drv* entrypoints. 39 */ 40 41#include <windows.h> 42 43#include "util/u_debug.h" 44#include "stw_icd.h" 45#include "stw_context.h" 46#include "stw_pixelformat.h" 47#include "stw_wgl.h" 48 49 50WINGDIAPI BOOL APIENTRY 51wglCopyContext( 52 HGLRC hglrcSrc, 53 HGLRC hglrcDst, 54 UINT mask ) 55{ 56 return DrvCopyContext( (DHGLRC)(UINT_PTR)hglrcSrc, 57 (DHGLRC)(UINT_PTR)hglrcDst, 58 mask ); 59} 60 61WINGDIAPI HGLRC APIENTRY 62wglCreateContext( 63 HDC hdc ) 64{ 65 return (HGLRC) DrvCreateContext(hdc); 66} 67 68WINGDIAPI HGLRC APIENTRY 69wglCreateLayerContext( 70 HDC hdc, 71 int iLayerPlane ) 72{ 73 return (HGLRC) DrvCreateLayerContext( hdc, iLayerPlane ); 74} 75 76WINGDIAPI BOOL APIENTRY 77wglDeleteContext( 78 HGLRC hglrc ) 79{ 80 return DrvDeleteContext((DHGLRC)(UINT_PTR)hglrc ); 81} 82 83 84WINGDIAPI HGLRC APIENTRY 85wglGetCurrentContext( VOID ) 86{ 87 return (HGLRC)(UINT_PTR)stw_get_current_context(); 88} 89 90WINGDIAPI HDC APIENTRY 91wglGetCurrentDC( VOID ) 92{ 93 return stw_get_current_dc(); 94} 95 96WINGDIAPI BOOL APIENTRY 97wglMakeCurrent( 98 HDC hdc, 99 HGLRC hglrc ) 100{ 101 return DrvSetContext( hdc, (DHGLRC)(UINT_PTR)hglrc, NULL ) ? TRUE : FALSE; 102} 103 104 105WINGDIAPI BOOL APIENTRY 106wglSwapBuffers( 107 HDC hdc ) 108{ 109 return DrvSwapBuffers( hdc ); 110} 111 112 113WINGDIAPI DWORD WINAPI 114wglSwapMultipleBuffers(UINT n, 115 CONST WGLSWAP *ps) 116{ 117 UINT i; 118 119 for (i =0; i < n; ++i) 120 wglSwapBuffers(ps->hdc); 121 122 return 0; 123} 124 125 126WINGDIAPI BOOL APIENTRY 127wglSwapLayerBuffers( 128 HDC hdc, 129 UINT fuPlanes ) 130{ 131 return DrvSwapLayerBuffers( hdc, fuPlanes ); 132} 133 134WINGDIAPI PROC APIENTRY 135wglGetProcAddress( 136 LPCSTR lpszProc ) 137{ 138 return DrvGetProcAddress( lpszProc ); 139} 140 141 142WINGDIAPI int APIENTRY 143wglChoosePixelFormat( 144 HDC hdc, 145 CONST PIXELFORMATDESCRIPTOR *ppfd ) 146{ 147 if (ppfd->nSize != sizeof( PIXELFORMATDESCRIPTOR ) || ppfd->nVersion != 1) 148 return 0; 149 if (ppfd->iPixelType != PFD_TYPE_RGBA) 150 return 0; 151 if (!(ppfd->dwFlags & PFD_DRAW_TO_WINDOW)) 152 return 0; 153 if (!(ppfd->dwFlags & PFD_SUPPORT_OPENGL)) 154 return 0; 155 if (ppfd->dwFlags & PFD_DRAW_TO_BITMAP) 156 return 0; 157 if (ppfd->dwFlags & PFD_SUPPORT_GDI) 158 return 0; 159 if (!(ppfd->dwFlags & PFD_STEREO_DONTCARE) && (ppfd->dwFlags & PFD_STEREO)) 160 return 0; 161 162 return stw_pixelformat_choose( hdc, ppfd ); 163} 164 165WINGDIAPI int APIENTRY 166wglDescribePixelFormat( 167 HDC hdc, 168 int iPixelFormat, 169 UINT nBytes, 170 LPPIXELFORMATDESCRIPTOR ppfd ) 171{ 172 return DrvDescribePixelFormat( hdc, iPixelFormat, nBytes, ppfd ); 173} 174 175WINGDIAPI int APIENTRY 176wglGetPixelFormat( 177 HDC hdc ) 178{ 179 return stw_pixelformat_get( hdc ); 180} 181 182WINGDIAPI BOOL APIENTRY 183wglSetPixelFormat( 184 HDC hdc, 185 int iPixelFormat, 186 const PIXELFORMATDESCRIPTOR *ppfd ) 187{ 188 /* SetPixelFormat (hence wglSetPixelFormat) must not touch ppfd, per 189 * http://msdn.microsoft.com/en-us/library/dd369049(v=vs.85).aspx 190 */ 191 (void) ppfd; 192 193 return DrvSetPixelFormat( hdc, iPixelFormat ); 194} 195 196 197WINGDIAPI BOOL APIENTRY 198wglUseFontBitmapsA( 199 HDC hdc, 200 DWORD first, 201 DWORD count, 202 DWORD listBase ) 203{ 204 (void) hdc; 205 (void) first; 206 (void) count; 207 (void) listBase; 208 209 assert( 0 ); 210 211 return FALSE; 212} 213 214WINGDIAPI BOOL APIENTRY 215wglShareLists( 216 HGLRC hglrc1, 217 HGLRC hglrc2 ) 218{ 219 return DrvShareLists((DHGLRC)(UINT_PTR)hglrc1, 220 (DHGLRC)(UINT_PTR)hglrc2); 221} 222 223WINGDIAPI BOOL APIENTRY 224wglUseFontBitmapsW( 225 HDC hdc, 226 DWORD first, 227 DWORD count, 228 DWORD listBase ) 229{ 230 (void) hdc; 231 (void) first; 232 (void) count; 233 (void) listBase; 234 235 assert( 0 ); 236 237 return FALSE; 238} 239 240WINGDIAPI BOOL APIENTRY 241wglUseFontOutlinesA( 242 HDC hdc, 243 DWORD first, 244 DWORD count, 245 DWORD listBase, 246 FLOAT deviation, 247 FLOAT extrusion, 248 int format, 249 LPGLYPHMETRICSFLOAT lpgmf ) 250{ 251 (void) hdc; 252 (void) first; 253 (void) count; 254 (void) listBase; 255 (void) deviation; 256 (void) extrusion; 257 (void) format; 258 (void) lpgmf; 259 260 assert( 0 ); 261 262 return FALSE; 263} 264 265WINGDIAPI BOOL APIENTRY 266wglUseFontOutlinesW( 267 HDC hdc, 268 DWORD first, 269 DWORD count, 270 DWORD listBase, 271 FLOAT deviation, 272 FLOAT extrusion, 273 int format, 274 LPGLYPHMETRICSFLOAT lpgmf ) 275{ 276 (void) hdc; 277 (void) first; 278 (void) count; 279 (void) listBase; 280 (void) deviation; 281 (void) extrusion; 282 (void) format; 283 (void) lpgmf; 284 285 assert( 0 ); 286 287 return FALSE; 288} 289 290WINGDIAPI BOOL APIENTRY 291wglDescribeLayerPlane( 292 HDC hdc, 293 int iPixelFormat, 294 int iLayerPlane, 295 UINT nBytes, 296 LPLAYERPLANEDESCRIPTOR plpd ) 297{ 298 return DrvDescribeLayerPlane(hdc, iPixelFormat, iLayerPlane, nBytes, plpd); 299} 300 301WINGDIAPI int APIENTRY 302wglSetLayerPaletteEntries( 303 HDC hdc, 304 int iLayerPlane, 305 int iStart, 306 int cEntries, 307 CONST COLORREF *pcr ) 308{ 309 return DrvSetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr); 310} 311 312WINGDIAPI int APIENTRY 313wglGetLayerPaletteEntries( 314 HDC hdc, 315 int iLayerPlane, 316 int iStart, 317 int cEntries, 318 COLORREF *pcr ) 319{ 320 return DrvGetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr); 321} 322 323WINGDIAPI BOOL APIENTRY 324wglRealizeLayerPalette( 325 HDC hdc, 326 int iLayerPlane, 327 BOOL bRealize ) 328{ 329 (void) hdc; 330 (void) iLayerPlane; 331 (void) bRealize; 332 333 assert( 0 ); 334 335 return FALSE; 336} 337