Home | History | Annotate | Download | only in wgl
      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 
     50 WINGDIAPI BOOL APIENTRY
     51 wglCopyContext(
     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 
     61 WINGDIAPI HGLRC APIENTRY
     62 wglCreateContext(
     63    HDC hdc )
     64 {
     65    return (HGLRC) DrvCreateContext(hdc);
     66 }
     67 
     68 WINGDIAPI HGLRC APIENTRY
     69 wglCreateLayerContext(
     70    HDC hdc,
     71    int iLayerPlane )
     72 {
     73    return (HGLRC) DrvCreateLayerContext( hdc, iLayerPlane );
     74 }
     75 
     76 WINGDIAPI BOOL APIENTRY
     77 wglDeleteContext(
     78    HGLRC hglrc )
     79 {
     80    return DrvDeleteContext((DHGLRC)(UINT_PTR)hglrc );
     81 }
     82 
     83 
     84 WINGDIAPI HGLRC APIENTRY
     85 wglGetCurrentContext( VOID )
     86 {
     87    return (HGLRC)(UINT_PTR)stw_get_current_context();
     88 }
     89 
     90 WINGDIAPI HDC APIENTRY
     91 wglGetCurrentDC( VOID )
     92 {
     93    return stw_get_current_dc();
     94 }
     95 
     96 WINGDIAPI BOOL APIENTRY
     97 wglMakeCurrent(
     98    HDC hdc,
     99    HGLRC hglrc )
    100 {
    101    return DrvSetContext( hdc, (DHGLRC)(UINT_PTR)hglrc, NULL ) ? TRUE : FALSE;
    102 }
    103 
    104 
    105 WINGDIAPI BOOL APIENTRY
    106 wglSwapBuffers(
    107    HDC hdc )
    108 {
    109    return DrvSwapBuffers( hdc );
    110 }
    111 
    112 
    113 WINGDIAPI DWORD WINAPI
    114 wglSwapMultipleBuffers(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 
    126 WINGDIAPI BOOL APIENTRY
    127 wglSwapLayerBuffers(
    128    HDC hdc,
    129    UINT fuPlanes )
    130 {
    131    return DrvSwapLayerBuffers( hdc, fuPlanes );
    132 }
    133 
    134 WINGDIAPI PROC APIENTRY
    135 wglGetProcAddress(
    136     LPCSTR lpszProc )
    137 {
    138    return DrvGetProcAddress( lpszProc );
    139 }
    140 
    141 
    142 WINGDIAPI int APIENTRY
    143 wglChoosePixelFormat(
    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 
    165 WINGDIAPI int APIENTRY
    166 wglDescribePixelFormat(
    167    HDC hdc,
    168    int iPixelFormat,
    169    UINT nBytes,
    170    LPPIXELFORMATDESCRIPTOR ppfd )
    171 {
    172    return DrvDescribePixelFormat( hdc, iPixelFormat, nBytes, ppfd );
    173 }
    174 
    175 WINGDIAPI int APIENTRY
    176 wglGetPixelFormat(
    177    HDC hdc )
    178 {
    179    return stw_pixelformat_get( hdc );
    180 }
    181 
    182 WINGDIAPI BOOL APIENTRY
    183 wglSetPixelFormat(
    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 
    197 WINGDIAPI BOOL APIENTRY
    198 wglUseFontBitmapsA(
    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 
    214 WINGDIAPI BOOL APIENTRY
    215 wglShareLists(
    216    HGLRC hglrc1,
    217    HGLRC hglrc2 )
    218 {
    219    return DrvShareLists((DHGLRC)(UINT_PTR)hglrc1,
    220                         (DHGLRC)(UINT_PTR)hglrc2);
    221 }
    222 
    223 WINGDIAPI BOOL APIENTRY
    224 wglUseFontBitmapsW(
    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 
    240 WINGDIAPI BOOL APIENTRY
    241 wglUseFontOutlinesA(
    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 
    265 WINGDIAPI BOOL APIENTRY
    266 wglUseFontOutlinesW(
    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 
    290 WINGDIAPI BOOL APIENTRY
    291 wglDescribeLayerPlane(
    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 
    301 WINGDIAPI int APIENTRY
    302 wglSetLayerPaletteEntries(
    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 
    312 WINGDIAPI int APIENTRY
    313 wglGetLayerPaletteEntries(
    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 
    323 WINGDIAPI BOOL APIENTRY
    324 wglRealizeLayerPalette(
    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