Home | History | Annotate | Download | only in wgl
      1 /**************************************************************************
      2  *
      3  * Copyright 2008-2009 Vmware, Inc.
      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 VMWARE 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  * This header defines the interface used by the system's opengl32.dll and the
     32  * Installable Client Driver (ICD).
     33  */
     34 
     35 #ifndef STW_ICD_H
     36 #define STW_ICD_H
     37 
     38 
     39 #include <windows.h>
     40 
     41 #include "GL/gl.h"
     42 
     43 
     44 typedef ULONG DHGLRC;
     45 
     46 #define OPENGL_VERSION_110_ENTRIES  336
     47 
     48 struct __GLdispatchTableRec
     49 {
     50    void (GLAPIENTRY * NewList)(GLuint, GLenum);
     51    void (GLAPIENTRY * EndList)(void);
     52    void (GLAPIENTRY * CallList)(GLuint);
     53    void (GLAPIENTRY * CallLists)(GLsizei, GLenum, const GLvoid *);
     54    void (GLAPIENTRY * DeleteLists)(GLuint, GLsizei);
     55    GLuint (GLAPIENTRY * GenLists)(GLsizei);
     56    void (GLAPIENTRY * ListBase)(GLuint);
     57    void (GLAPIENTRY * Begin)(GLenum);
     58    void (GLAPIENTRY * Bitmap)(GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, const GLubyte *);
     59    void (GLAPIENTRY * Color3b)(GLbyte, GLbyte, GLbyte);
     60    void (GLAPIENTRY * Color3bv)(const GLbyte *);
     61    void (GLAPIENTRY * Color3d)(GLdouble, GLdouble, GLdouble);
     62    void (GLAPIENTRY * Color3dv)(const GLdouble *);
     63    void (GLAPIENTRY * Color3f)(GLfloat, GLfloat, GLfloat);
     64    void (GLAPIENTRY * Color3fv)(const GLfloat *);
     65    void (GLAPIENTRY * Color3i)(GLint, GLint, GLint);
     66    void (GLAPIENTRY * Color3iv)(const GLint *);
     67    void (GLAPIENTRY * Color3s)(GLshort, GLshort, GLshort);
     68    void (GLAPIENTRY * Color3sv)(const GLshort *);
     69    void (GLAPIENTRY * Color3ub)(GLubyte, GLubyte, GLubyte);
     70    void (GLAPIENTRY * Color3ubv)(const GLubyte *);
     71    void (GLAPIENTRY * Color3ui)(GLuint, GLuint, GLuint);
     72    void (GLAPIENTRY * Color3uiv)(const GLuint *);
     73    void (GLAPIENTRY * Color3us)(GLushort, GLushort, GLushort);
     74    void (GLAPIENTRY * Color3usv)(const GLushort *);
     75    void (GLAPIENTRY * Color4b)(GLbyte, GLbyte, GLbyte, GLbyte);
     76    void (GLAPIENTRY * Color4bv)(const GLbyte *);
     77    void (GLAPIENTRY * Color4d)(GLdouble, GLdouble, GLdouble, GLdouble);
     78    void (GLAPIENTRY * Color4dv)(const GLdouble *);
     79    void (GLAPIENTRY * Color4f)(GLfloat, GLfloat, GLfloat, GLfloat);
     80    void (GLAPIENTRY * Color4fv)(const GLfloat *);
     81    void (GLAPIENTRY * Color4i)(GLint, GLint, GLint, GLint);
     82    void (GLAPIENTRY * Color4iv)(const GLint *);
     83    void (GLAPIENTRY * Color4s)(GLshort, GLshort, GLshort, GLshort);
     84    void (GLAPIENTRY * Color4sv)(const GLshort *);
     85    void (GLAPIENTRY * Color4ub)(GLubyte, GLubyte, GLubyte, GLubyte);
     86    void (GLAPIENTRY * Color4ubv)(const GLubyte *);
     87    void (GLAPIENTRY * Color4ui)(GLuint, GLuint, GLuint, GLuint);
     88    void (GLAPIENTRY * Color4uiv)(const GLuint *);
     89    void (GLAPIENTRY * Color4us)(GLushort, GLushort, GLushort, GLushort);
     90    void (GLAPIENTRY * Color4usv)(const GLushort *);
     91    void (GLAPIENTRY * EdgeFlag)(GLboolean);
     92    void (GLAPIENTRY * EdgeFlagv)(const GLboolean *);
     93    void (GLAPIENTRY * End)(void);
     94    void (GLAPIENTRY * Indexd)(GLdouble);
     95    void (GLAPIENTRY * Indexdv)(const GLdouble *);
     96    void (GLAPIENTRY * Indexf)(GLfloat);
     97    void (GLAPIENTRY * Indexfv)(const GLfloat *);
     98    void (GLAPIENTRY * Indexi)(GLint);
     99    void (GLAPIENTRY * Indexiv)(const GLint *);
    100    void (GLAPIENTRY * Indexs)(GLshort);
    101    void (GLAPIENTRY * Indexsv)(const GLshort *);
    102    void (GLAPIENTRY * Normal3b)(GLbyte, GLbyte, GLbyte);
    103    void (GLAPIENTRY * Normal3bv)(const GLbyte *);
    104    void (GLAPIENTRY * Normal3d)(GLdouble, GLdouble, GLdouble);
    105    void (GLAPIENTRY * Normal3dv)(const GLdouble *);
    106    void (GLAPIENTRY * Normal3f)(GLfloat, GLfloat, GLfloat);
    107    void (GLAPIENTRY * Normal3fv)(const GLfloat *);
    108    void (GLAPIENTRY * Normal3i)(GLint, GLint, GLint);
    109    void (GLAPIENTRY * Normal3iv)(const GLint *);
    110    void (GLAPIENTRY * Normal3s)(GLshort, GLshort, GLshort);
    111    void (GLAPIENTRY * Normal3sv)(const GLshort *);
    112    void (GLAPIENTRY * RasterPos2d)(GLdouble, GLdouble);
    113    void (GLAPIENTRY * RasterPos2dv)(const GLdouble *);
    114    void (GLAPIENTRY * RasterPos2f)(GLfloat, GLfloat);
    115    void (GLAPIENTRY * RasterPos2fv)(const GLfloat *);
    116    void (GLAPIENTRY * RasterPos2i)(GLint, GLint);
    117    void (GLAPIENTRY * RasterPos2iv)(const GLint *);
    118    void (GLAPIENTRY * RasterPos2s)(GLshort, GLshort);
    119    void (GLAPIENTRY * RasterPos2sv)(const GLshort *);
    120    void (GLAPIENTRY * RasterPos3d)(GLdouble, GLdouble, GLdouble);
    121    void (GLAPIENTRY * RasterPos3dv)(const GLdouble *);
    122    void (GLAPIENTRY * RasterPos3f)(GLfloat, GLfloat, GLfloat);
    123    void (GLAPIENTRY * RasterPos3fv)(const GLfloat *);
    124    void (GLAPIENTRY * RasterPos3i)(GLint, GLint, GLint);
    125    void (GLAPIENTRY * RasterPos3iv)(const GLint *);
    126    void (GLAPIENTRY * RasterPos3s)(GLshort, GLshort, GLshort);
    127    void (GLAPIENTRY * RasterPos3sv)(const GLshort *);
    128    void (GLAPIENTRY * RasterPos4d)(GLdouble, GLdouble, GLdouble, GLdouble);
    129    void (GLAPIENTRY * RasterPos4dv)(const GLdouble *);
    130    void (GLAPIENTRY * RasterPos4f)(GLfloat, GLfloat, GLfloat, GLfloat);
    131    void (GLAPIENTRY * RasterPos4fv)(const GLfloat *);
    132    void (GLAPIENTRY * RasterPos4i)(GLint, GLint, GLint, GLint);
    133    void (GLAPIENTRY * RasterPos4iv)(const GLint *);
    134    void (GLAPIENTRY * RasterPos4s)(GLshort, GLshort, GLshort, GLshort);
    135    void (GLAPIENTRY * RasterPos4sv)(const GLshort *);
    136    void (GLAPIENTRY * Rectd)(GLdouble, GLdouble, GLdouble, GLdouble);
    137    void (GLAPIENTRY * Rectdv)(const GLdouble *, const GLdouble *);
    138    void (GLAPIENTRY * Rectf)(GLfloat, GLfloat, GLfloat, GLfloat);
    139    void (GLAPIENTRY * Rectfv)(const GLfloat *, const GLfloat *);
    140    void (GLAPIENTRY * Recti)(GLint, GLint, GLint, GLint);
    141    void (GLAPIENTRY * Rectiv)(const GLint *, const GLint *);
    142    void (GLAPIENTRY * Rects)(GLshort, GLshort, GLshort, GLshort);
    143    void (GLAPIENTRY * Rectsv)(const GLshort *, const GLshort *);
    144    void (GLAPIENTRY * TexCoord1d)(GLdouble);
    145    void (GLAPIENTRY * TexCoord1dv)(const GLdouble *);
    146    void (GLAPIENTRY * TexCoord1f)(GLfloat);
    147    void (GLAPIENTRY * TexCoord1fv)(const GLfloat *);
    148    void (GLAPIENTRY * TexCoord1i)(GLint);
    149    void (GLAPIENTRY * TexCoord1iv)(const GLint *);
    150    void (GLAPIENTRY * TexCoord1s)(GLshort);
    151    void (GLAPIENTRY * TexCoord1sv)(const GLshort *);
    152    void (GLAPIENTRY * TexCoord2d)(GLdouble, GLdouble);
    153    void (GLAPIENTRY * TexCoord2dv)(const GLdouble *);
    154    void (GLAPIENTRY * TexCoord2f)(GLfloat, GLfloat);
    155    void (GLAPIENTRY * TexCoord2fv)(const GLfloat *);
    156    void (GLAPIENTRY * TexCoord2i)(GLint, GLint);
    157    void (GLAPIENTRY * TexCoord2iv)(const GLint *);
    158    void (GLAPIENTRY * TexCoord2s)(GLshort, GLshort);
    159    void (GLAPIENTRY * TexCoord2sv)(const GLshort *);
    160    void (GLAPIENTRY * TexCoord3d)(GLdouble, GLdouble, GLdouble);
    161    void (GLAPIENTRY * TexCoord3dv)(const GLdouble *);
    162    void (GLAPIENTRY * TexCoord3f)(GLfloat, GLfloat, GLfloat);
    163    void (GLAPIENTRY * TexCoord3fv)(const GLfloat *);
    164    void (GLAPIENTRY * TexCoord3i)(GLint, GLint, GLint);
    165    void (GLAPIENTRY * TexCoord3iv)(const GLint *);
    166    void (GLAPIENTRY * TexCoord3s)(GLshort, GLshort, GLshort);
    167    void (GLAPIENTRY * TexCoord3sv)(const GLshort *);
    168    void (GLAPIENTRY * TexCoord4d)(GLdouble, GLdouble, GLdouble, GLdouble);
    169    void (GLAPIENTRY * TexCoord4dv)(const GLdouble *);
    170    void (GLAPIENTRY * TexCoord4f)(GLfloat, GLfloat, GLfloat, GLfloat);
    171    void (GLAPIENTRY * TexCoord4fv)(const GLfloat *);
    172    void (GLAPIENTRY * TexCoord4i)(GLint, GLint, GLint, GLint);
    173    void (GLAPIENTRY * TexCoord4iv)(const GLint *);
    174    void (GLAPIENTRY * TexCoord4s)(GLshort, GLshort, GLshort, GLshort);
    175    void (GLAPIENTRY * TexCoord4sv)(const GLshort *);
    176    void (GLAPIENTRY * Vertex2d)(GLdouble, GLdouble);
    177    void (GLAPIENTRY * Vertex2dv)(const GLdouble *);
    178    void (GLAPIENTRY * Vertex2f)(GLfloat, GLfloat);
    179    void (GLAPIENTRY * Vertex2fv)(const GLfloat *);
    180    void (GLAPIENTRY * Vertex2i)(GLint, GLint);
    181    void (GLAPIENTRY * Vertex2iv)(const GLint *);
    182    void (GLAPIENTRY * Vertex2s)(GLshort, GLshort);
    183    void (GLAPIENTRY * Vertex2sv)(const GLshort *);
    184    void (GLAPIENTRY * Vertex3d)(GLdouble, GLdouble, GLdouble);
    185    void (GLAPIENTRY * Vertex3dv)(const GLdouble *);
    186    void (GLAPIENTRY * Vertex3f)(GLfloat, GLfloat, GLfloat);
    187    void (GLAPIENTRY * Vertex3fv)(const GLfloat *);
    188    void (GLAPIENTRY * Vertex3i)(GLint, GLint, GLint);
    189    void (GLAPIENTRY * Vertex3iv)(const GLint *);
    190    void (GLAPIENTRY * Vertex3s)(GLshort, GLshort, GLshort);
    191    void (GLAPIENTRY * Vertex3sv)(const GLshort *);
    192    void (GLAPIENTRY * Vertex4d)(GLdouble, GLdouble, GLdouble, GLdouble);
    193    void (GLAPIENTRY * Vertex4dv)(const GLdouble *);
    194    void (GLAPIENTRY * Vertex4f)(GLfloat, GLfloat, GLfloat, GLfloat);
    195    void (GLAPIENTRY * Vertex4fv)(const GLfloat *);
    196    void (GLAPIENTRY * Vertex4i)(GLint, GLint, GLint, GLint);
    197    void (GLAPIENTRY * Vertex4iv)(const GLint *);
    198    void (GLAPIENTRY * Vertex4s)(GLshort, GLshort, GLshort, GLshort);
    199    void (GLAPIENTRY * Vertex4sv)(const GLshort *);
    200    void (GLAPIENTRY * ClipPlane)(GLenum, const GLdouble *);
    201    void (GLAPIENTRY * ColorMaterial)(GLenum, GLenum);
    202    void (GLAPIENTRY * CullFace)(GLenum);
    203    void (GLAPIENTRY * Fogf)(GLenum, GLfloat);
    204    void (GLAPIENTRY * Fogfv)(GLenum, const GLfloat *);
    205    void (GLAPIENTRY * Fogi)(GLenum, GLint);
    206    void (GLAPIENTRY * Fogiv)(GLenum, const GLint *);
    207    void (GLAPIENTRY * FrontFace)(GLenum);
    208    void (GLAPIENTRY * Hint)(GLenum, GLenum);
    209    void (GLAPIENTRY * Lightf)(GLenum, GLenum, GLfloat);
    210    void (GLAPIENTRY * Lightfv)(GLenum, GLenum, const GLfloat *);
    211    void (GLAPIENTRY * Lighti)(GLenum, GLenum, GLint);
    212    void (GLAPIENTRY * Lightiv)(GLenum, GLenum, const GLint *);
    213    void (GLAPIENTRY * LightModelf)(GLenum, GLfloat);
    214    void (GLAPIENTRY * LightModelfv)(GLenum, const GLfloat *);
    215    void (GLAPIENTRY * LightModeli)(GLenum, GLint);
    216    void (GLAPIENTRY * LightModeliv)(GLenum, const GLint *);
    217    void (GLAPIENTRY * LineStipple)(GLint, GLushort);
    218    void (GLAPIENTRY * LineWidth)(GLfloat);
    219    void (GLAPIENTRY * Materialf)(GLenum, GLenum, GLfloat);
    220    void (GLAPIENTRY * Materialfv)(GLenum, GLenum, const GLfloat *);
    221    void (GLAPIENTRY * Materiali)(GLenum, GLenum, GLint);
    222    void (GLAPIENTRY * Materialiv)(GLenum, GLenum, const GLint *);
    223    void (GLAPIENTRY * PointSize)(GLfloat);
    224    void (GLAPIENTRY * PolygonMode)(GLenum, GLenum);
    225    void (GLAPIENTRY * PolygonStipple)(const GLubyte *);
    226    void (GLAPIENTRY * Scissor)(GLint, GLint, GLsizei, GLsizei);
    227    void (GLAPIENTRY * ShadeModel)(GLenum);
    228    void (GLAPIENTRY * TexParameterf)(GLenum, GLenum, GLfloat);
    229    void (GLAPIENTRY * TexParameterfv)(GLenum, GLenum, const GLfloat *);
    230    void (GLAPIENTRY * TexParameteri)(GLenum, GLenum, GLint);
    231    void (GLAPIENTRY * TexParameteriv)(GLenum, GLenum, const GLint *);
    232    void (GLAPIENTRY * TexImage1D)(GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
    233    void (GLAPIENTRY * TexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
    234    void (GLAPIENTRY * TexEnvf)(GLenum, GLenum, GLfloat);
    235    void (GLAPIENTRY * TexEnvfv)(GLenum, GLenum, const GLfloat *);
    236    void (GLAPIENTRY * TexEnvi)(GLenum, GLenum, GLint);
    237    void (GLAPIENTRY * TexEnviv)(GLenum, GLenum, const GLint *);
    238    void (GLAPIENTRY * TexGend)(GLenum, GLenum, GLdouble);
    239    void (GLAPIENTRY * TexGendv)(GLenum, GLenum, const GLdouble *);
    240    void (GLAPIENTRY * TexGenf)(GLenum, GLenum, GLfloat);
    241    void (GLAPIENTRY * TexGenfv)(GLenum, GLenum, const GLfloat *);
    242    void (GLAPIENTRY * TexGeni)(GLenum, GLenum, GLint);
    243    void (GLAPIENTRY * TexGeniv)(GLenum, GLenum, const GLint *);
    244    void (GLAPIENTRY * FeedbackBuffer)(GLsizei, GLenum, GLfloat *);
    245    void (GLAPIENTRY * SelectBuffer)(GLsizei, GLuint *);
    246    GLint (GLAPIENTRY * RenderMode)(GLenum);
    247    void (GLAPIENTRY * InitNames)(void);
    248    void (GLAPIENTRY * LoadName)(GLuint);
    249    void (GLAPIENTRY * PassThrough)(GLfloat);
    250    void (GLAPIENTRY * PopName)(void);
    251    void (GLAPIENTRY * PushName)(GLuint);
    252    void (GLAPIENTRY * DrawBuffer)(GLenum);
    253    void (GLAPIENTRY * Clear)(GLbitfield);
    254    void (GLAPIENTRY * ClearAccum)(GLfloat, GLfloat, GLfloat, GLfloat);
    255    void (GLAPIENTRY * ClearIndex)(GLfloat);
    256    void (GLAPIENTRY * ClearColor)(GLclampf, GLclampf, GLclampf, GLclampf);
    257    void (GLAPIENTRY * ClearStencil)(GLint);
    258    void (GLAPIENTRY * ClearDepth)(GLclampd);
    259    void (GLAPIENTRY * StencilMask)(GLuint);
    260    void (GLAPIENTRY * ColorMask)(GLboolean, GLboolean, GLboolean, GLboolean);
    261    void (GLAPIENTRY * DepthMask)(GLboolean);
    262    void (GLAPIENTRY * IndexMask)(GLuint);
    263    void (GLAPIENTRY * Accum)(GLenum, GLfloat);
    264    void (GLAPIENTRY * Disable)(GLenum);
    265    void (GLAPIENTRY * Enable)(GLenum);
    266    void (GLAPIENTRY * Finish)(void);
    267    void (GLAPIENTRY * Flush)(void);
    268    void (GLAPIENTRY * PopAttrib)(void);
    269    void (GLAPIENTRY * PushAttrib)(GLbitfield);
    270    void (GLAPIENTRY * Map1d)(GLenum, GLdouble, GLdouble, GLint, GLint, const GLdouble *);
    271    void (GLAPIENTRY * Map1f)(GLenum, GLfloat, GLfloat, GLint, GLint, const GLfloat *);
    272    void (GLAPIENTRY * Map2d)(GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *);
    273    void (GLAPIENTRY * Map2f)(GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *);
    274    void (GLAPIENTRY * MapGrid1d)(GLint, GLdouble, GLdouble);
    275    void (GLAPIENTRY * MapGrid1f)(GLint, GLfloat, GLfloat);
    276    void (GLAPIENTRY * MapGrid2d)(GLint, GLdouble, GLdouble, GLint, GLdouble, GLdouble);
    277    void (GLAPIENTRY * MapGrid2f)(GLint, GLfloat, GLfloat, GLint, GLfloat, GLfloat);
    278    void (GLAPIENTRY * EvalCoord1d)(GLdouble);
    279    void (GLAPIENTRY * EvalCoord1dv)(const GLdouble *);
    280    void (GLAPIENTRY * EvalCoord1f)(GLfloat);
    281    void (GLAPIENTRY * EvalCoord1fv)(const GLfloat *);
    282    void (GLAPIENTRY * EvalCoord2d)(GLdouble, GLdouble);
    283    void (GLAPIENTRY * EvalCoord2dv)(const GLdouble *);
    284    void (GLAPIENTRY * EvalCoord2f)(GLfloat, GLfloat);
    285    void (GLAPIENTRY * EvalCoord2fv)(const GLfloat *);
    286    void (GLAPIENTRY * EvalMesh1)(GLenum, GLint, GLint);
    287    void (GLAPIENTRY * EvalPoint1)(GLint);
    288    void (GLAPIENTRY * EvalMesh2)(GLenum, GLint, GLint, GLint, GLint);
    289    void (GLAPIENTRY * EvalPoint2)(GLint, GLint);
    290    void (GLAPIENTRY * AlphaFunc)(GLenum, GLclampf);
    291    void (GLAPIENTRY * BlendFunc)(GLenum, GLenum);
    292    void (GLAPIENTRY * LogicOp)(GLenum);
    293    void (GLAPIENTRY * StencilFunc)(GLenum, GLint, GLuint);
    294    void (GLAPIENTRY * StencilOp)(GLenum, GLenum, GLenum);
    295    void (GLAPIENTRY * DepthFunc)(GLenum);
    296    void (GLAPIENTRY * PixelZoom)(GLfloat, GLfloat);
    297    void (GLAPIENTRY * PixelTransferf)(GLenum, GLfloat);
    298    void (GLAPIENTRY * PixelTransferi)(GLenum, GLint);
    299    void (GLAPIENTRY * PixelStoref)(GLenum, GLfloat);
    300    void (GLAPIENTRY * PixelStorei)(GLenum, GLint);
    301    void (GLAPIENTRY * PixelMapfv)(GLenum, GLint, const GLfloat *);
    302    void (GLAPIENTRY * PixelMapuiv)(GLenum, GLint, const GLuint *);
    303    void (GLAPIENTRY * PixelMapusv)(GLenum, GLint, const GLushort *);
    304    void (GLAPIENTRY * ReadBuffer)(GLenum);
    305    void (GLAPIENTRY * CopyPixels)(GLint, GLint, GLsizei, GLsizei, GLenum);
    306    void (GLAPIENTRY * ReadPixels)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid *);
    307    void (GLAPIENTRY * DrawPixels)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
    308    void (GLAPIENTRY * GetBooleanv)(GLenum, GLboolean *);
    309    void (GLAPIENTRY * GetClipPlane)(GLenum, GLdouble *);
    310    void (GLAPIENTRY * GetDoublev)(GLenum, GLdouble *);
    311    GLenum (GLAPIENTRY * GetError)(void);
    312    void (GLAPIENTRY * GetFloatv)(GLenum, GLfloat *);
    313    void (GLAPIENTRY * GetIntegerv)(GLenum, GLint *);
    314    void (GLAPIENTRY * GetLightfv)(GLenum, GLenum, GLfloat *);
    315    void (GLAPIENTRY * GetLightiv)(GLenum, GLenum, GLint *);
    316    void (GLAPIENTRY * GetMapdv)(GLenum, GLenum, GLdouble *);
    317    void (GLAPIENTRY * GetMapfv)(GLenum, GLenum, GLfloat *);
    318    void (GLAPIENTRY * GetMapiv)(GLenum, GLenum, GLint *);
    319    void (GLAPIENTRY * GetMaterialfv)(GLenum, GLenum, GLfloat *);
    320    void (GLAPIENTRY * GetMaterialiv)(GLenum, GLenum, GLint *);
    321    void (GLAPIENTRY * GetPixelMapfv)(GLenum, GLfloat *);
    322    void (GLAPIENTRY * GetPixelMapuiv)(GLenum, GLuint *);
    323    void (GLAPIENTRY * GetPixelMapusv)(GLenum, GLushort *);
    324    void (GLAPIENTRY * GetPolygonStipple)(GLubyte *);
    325    const GLubyte * (GLAPIENTRY * GetString)(GLenum);
    326    void (GLAPIENTRY * GetTexEnvfv)(GLenum, GLenum, GLfloat *);
    327    void (GLAPIENTRY * GetTexEnviv)(GLenum, GLenum, GLint *);
    328    void (GLAPIENTRY * GetTexGendv)(GLenum, GLenum, GLdouble *);
    329    void (GLAPIENTRY * GetTexGenfv)(GLenum, GLenum, GLfloat *);
    330    void (GLAPIENTRY * GetTexGeniv)(GLenum, GLenum, GLint *);
    331    void (GLAPIENTRY * GetTexImage)(GLenum, GLint, GLenum, GLenum, GLvoid *);
    332    void (GLAPIENTRY * GetTexParameterfv)(GLenum, GLenum, GLfloat *);
    333    void (GLAPIENTRY * GetTexParameteriv)(GLenum, GLenum, GLint *);
    334    void (GLAPIENTRY * GetTexLevelParameterfv)(GLenum, GLint, GLenum, GLfloat *);
    335    void (GLAPIENTRY * GetTexLevelParameteriv)(GLenum, GLint, GLenum, GLint *);
    336    GLboolean (GLAPIENTRY * IsEnabled)(GLenum);
    337    GLboolean (GLAPIENTRY * IsList)(GLuint);
    338    void (GLAPIENTRY * DepthRange)(GLclampd, GLclampd);
    339    void (GLAPIENTRY * Frustum)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
    340    void (GLAPIENTRY * LoadIdentity)(void);
    341    void (GLAPIENTRY * LoadMatrixf)(const GLfloat *);
    342    void (GLAPIENTRY * LoadMatrixd)(const GLdouble *);
    343    void (GLAPIENTRY * MatrixMode)(GLenum);
    344    void (GLAPIENTRY * MultMatrixf)(const GLfloat *);
    345    void (GLAPIENTRY * MultMatrixd)(const GLdouble *);
    346    void (GLAPIENTRY * Ortho)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
    347    void (GLAPIENTRY * PopMatrix)(void);
    348    void (GLAPIENTRY * PushMatrix)(void);
    349    void (GLAPIENTRY * Rotated)(GLdouble, GLdouble, GLdouble, GLdouble);
    350    void (GLAPIENTRY * Rotatef)(GLfloat, GLfloat, GLfloat, GLfloat);
    351    void (GLAPIENTRY * Scaled)(GLdouble, GLdouble, GLdouble);
    352    void (GLAPIENTRY * Scalef)(GLfloat, GLfloat, GLfloat);
    353    void (GLAPIENTRY * Translated)(GLdouble, GLdouble, GLdouble);
    354    void (GLAPIENTRY * Translatef)(GLfloat, GLfloat, GLfloat);
    355    void (GLAPIENTRY * Viewport)(GLint, GLint, GLsizei, GLsizei);
    356    void (GLAPIENTRY * ArrayElement)(GLint);
    357    void (GLAPIENTRY * BindTexture)(GLenum, GLuint);
    358    void (GLAPIENTRY * ColorPointer)(GLint, GLenum, GLsizei, const GLvoid *);
    359    void (GLAPIENTRY * DisableClientState)(GLenum);
    360    void (GLAPIENTRY * DrawArrays)(GLenum, GLint, GLsizei);
    361    void (GLAPIENTRY * DrawElements)(GLenum, GLsizei, GLenum, const GLvoid *);
    362    void (GLAPIENTRY * EdgeFlagPointer)(GLsizei, const GLvoid *);
    363    void (GLAPIENTRY * EnableClientState)(GLenum);
    364    void (GLAPIENTRY * IndexPointer)(GLenum, GLsizei, const GLvoid *);
    365    void (GLAPIENTRY * Indexub)(GLubyte);
    366    void (GLAPIENTRY * Indexubv)(const GLubyte *);
    367    void (GLAPIENTRY * InterleavedArrays)(GLenum, GLsizei, const GLvoid *);
    368    void (GLAPIENTRY * NormalPointer)(GLenum, GLsizei, const GLvoid *);
    369    void (GLAPIENTRY * PolygonOffset)(GLfloat, GLfloat);
    370    void (GLAPIENTRY * TexCoordPointer)(GLint, GLenum, GLsizei, const GLvoid *);
    371    void (GLAPIENTRY * VertexPointer)(GLint, GLenum, GLsizei, const GLvoid *);
    372    GLboolean (GLAPIENTRY * AreTexturesResident)(GLsizei, const GLuint *, GLboolean *);
    373    void (GLAPIENTRY * CopyTexImage1D)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
    374    void (GLAPIENTRY * CopyTexImage2D)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
    375    void (GLAPIENTRY * CopyTexSubImage1D)(GLenum, GLint, GLint, GLint, GLint, GLsizei);
    376    void (GLAPIENTRY * CopyTexSubImage2D)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
    377    void (GLAPIENTRY * DeleteTextures)(GLsizei, const GLuint *);
    378    void (GLAPIENTRY * GenTextures)(GLsizei, GLuint *);
    379    void (GLAPIENTRY * GetPointerv)(GLenum, GLvoid **);
    380    GLboolean (GLAPIENTRY * IsTexture)(GLuint);
    381    void (GLAPIENTRY * PrioritizeTextures)(GLsizei, const GLuint *, const GLclampf *);
    382    void (GLAPIENTRY * TexSubImage1D)(GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *);
    383    void (GLAPIENTRY * TexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
    384    void (GLAPIENTRY * PopClientAttrib)(void);
    385    void (GLAPIENTRY * PushClientAttrib)(GLbitfield);
    386 };
    387 
    388 typedef struct __GLdispatchTableRec GLDISPATCHTABLE;
    389 
    390 typedef struct _GLCLTPROCTABLE
    391 {
    392    int cEntries;
    393    GLDISPATCHTABLE glDispatchTable;
    394 } GLCLTPROCTABLE, * PGLCLTPROCTABLE;
    395 
    396 typedef VOID (APIENTRY * PFN_SETPROCTABLE)(PGLCLTPROCTABLE);
    397 
    398 /**
    399  * Presentation data passed to opengl32!wglCbPresentBuffers.
    400  *
    401  * Pure software drivers don't need to worry about this -- if they stick to the
    402  * GDI API then will integrate with the Desktop Window Manager (DWM) without
    403  * problems. Hardware drivers, however, cannot present directly to the primary
    404  * surface while the DWM is active, as DWM gets exclusive access to the primary
    405  * surface.
    406  *
    407  * Proper DWM integration requires:
    408  * - advertise the PFD_SUPPORT_COMPOSITION flag
    409  * - redirect glFlush/glfinish/wglSwapBuffers into a surface shared with the
    410  * DWM process.
    411  *
    412  * @sa http://www.opengl.org/pipeline/article/vol003_7/
    413  * @sa http://blogs.msdn.com/greg_schechter/archive/2006/05/02/588934.aspx
    414  */
    415 typedef struct _GLCBPRESENTBUFFERSDATA
    416 {
    417    /**
    418     * wglCbPresentBuffers enforces this to be 2.
    419     */
    420    DWORD magic1;
    421 
    422    /**
    423     * wglCbPresentBuffers enforces to be 0 or 1, but it is most commonly
    424     * set to 0.
    425     */
    426    DWORD magic2;
    427 
    428    /**
    429     * Locally unique identifier (LUID) of the graphics adapter.
    430     *
    431     * This should contain the value returned by D3DKMTOpenAdapterFromHdc. It
    432     * is passed to dwmapi!DwmpDxGetWindowSharedSurface in order to obtain
    433     * the shared surface handle for the bound drawable (window).
    434     *
    435     * @sa http://msdn.microsoft.com/en-us/library/ms799177.aspx
    436     */
    437    LUID AdapterLuid;
    438 
    439    /**
    440     * This is passed unmodified to DrvPresentBuffers
    441     */
    442    LPVOID pPrivateData;
    443 
    444    /**
    445     * Client area rectangle to update, relative to the window upper-left corner.
    446     */
    447    RECT rect;
    448 } GLCBPRESENTBUFFERSDATA, *PGLCBPRESENTBUFFERSDATA;
    449 
    450 /**
    451  * Callbacks supplied to DrvSetCallbackProcs by the OpenGL runtime.
    452  *
    453  * Pointers to several callback functions in opengl32.dll.
    454  */
    455 typedef struct _GLCALLBACKTABLE
    456 {
    457    /**
    458     * Set per-thread driver private data.
    459     *
    460     * Unused.
    461     **/
    462    void (APIENTRY *wglCbSetCurrentValue)(void *pvData);
    463 
    464    /**
    465     * Get per-thread private data.
    466     *
    467     * Unused.
    468     */
    469    void * (APIENTRY *wglCbGetCurrentValue)(void);
    470 
    471    /**
    472     * Get the ICD GHGLRC handle corresponding to the specified hglrc handle.
    473     *
    474     * Currently unused.
    475     */
    476    DHGLRC (APIENTRY *wglCbGetDhglrc)(HGLRC hglrc);
    477 
    478    /** Unused */
    479    PROC wglCbGetDdHandle;
    480 
    481    /**
    482     * Queue a present composition.
    483     *
    484     * Makes the runtime call DrvPresentBuffers with the composition information.
    485     */
    486    BOOL (APIENTRY *wglCbPresentBuffers)(HDC hdc, PGLCBPRESENTBUFFERSDATA data);
    487 
    488 } GLCALLBACKTABLE;
    489 
    490 typedef struct _GLPRESENTBUFFERSDATA
    491 {
    492    /**
    493     * The shared surface handle.
    494     *
    495     * Return by dwmapi!DwmpDxGetWindowSharedSurface.
    496     *
    497     * @sa http://channel9.msdn.com/forums/TechOff/251261-Help-Getting-the-shared-window-texture-out-of-DWM-/
    498     */
    499    HANDLE hSharedSurface;
    500 
    501    LUID AdapterLuid;
    502 
    503    /**
    504     * Present history token.
    505     *
    506     * This is returned by dwmapi!DwmpDxGetWindowSharedSurface and
    507     * should be passed to D3DKMTRender in D3DKMT_RENDER::PresentHistoryToken.
    508     *
    509     * @sa http://msdn.microsoft.com/en-us/library/ms799176.aspx
    510     */
    511    ULONGLONG PresentHistoryToken;
    512 
    513    /** Same as GLCBPRESENTBUFFERSDATA::pPrivateData */
    514    LPVOID pPrivateData;
    515 } GLPRESENTBUFFERSDATA, *PGLPRESENTBUFFERSDATA;
    516 
    517 BOOL APIENTRY
    518 DrvCopyContext(
    519    DHGLRC dhrcSource,
    520    DHGLRC dhrcDest,
    521    UINT fuMask );
    522 
    523 DHGLRC APIENTRY
    524 DrvCreateLayerContext(
    525    HDC hdc,
    526    INT iLayerPlane );
    527 
    528 DHGLRC APIENTRY
    529 DrvCreateContext(
    530    HDC hdc );
    531 
    532 BOOL APIENTRY
    533 DrvDeleteContext(
    534    DHGLRC dhglrc );
    535 
    536 BOOL APIENTRY
    537 DrvDescribeLayerPlane(
    538    HDC hdc,
    539    INT iPixelFormat,
    540    INT iLayerPlane,
    541    UINT nBytes,
    542    LPLAYERPLANEDESCRIPTOR plpd );
    543 
    544 LONG APIENTRY
    545 DrvDescribePixelFormat(
    546    HDC hdc,
    547    INT iPixelFormat,
    548    ULONG cjpfd,
    549    PIXELFORMATDESCRIPTOR *ppfd );
    550 
    551 int APIENTRY
    552 DrvGetLayerPaletteEntries(
    553    HDC hdc,
    554    INT iLayerPlane,
    555    INT iStart,
    556    INT cEntries,
    557    COLORREF *pcr );
    558 
    559 PROC APIENTRY
    560 DrvGetProcAddress(
    561    LPCSTR lpszProc );
    562 
    563 BOOL APIENTRY
    564 DrvPresentBuffers(HDC hdc, PGLPRESENTBUFFERSDATA data);
    565 
    566 BOOL APIENTRY
    567 DrvRealizeLayerPalette(
    568    HDC hdc,
    569    INT iLayerPlane,
    570    BOOL bRealize );
    571 
    572 BOOL APIENTRY
    573 DrvReleaseContext(
    574    DHGLRC dhglrc );
    575 
    576 void APIENTRY
    577 DrvSetCallbackProcs(
    578    INT nProcs,
    579    PROC *pProcs );
    580 
    581 PGLCLTPROCTABLE APIENTRY
    582 DrvSetContext(
    583    HDC hdc,
    584    DHGLRC dhglrc,
    585    PFN_SETPROCTABLE pfnSetProcTable );
    586 
    587 int APIENTRY
    588 DrvSetLayerPaletteEntries(
    589    HDC hdc,
    590    INT iLayerPlane,
    591    INT iStart,
    592    INT cEntries,
    593    CONST COLORREF *pcr );
    594 
    595 BOOL APIENTRY
    596 DrvSetPixelFormat(
    597    HDC hdc,
    598    LONG iPixelFormat );
    599 
    600 BOOL APIENTRY
    601 DrvShareLists(
    602    DHGLRC dhglrc1,
    603    DHGLRC dhglrc2 );
    604 
    605 BOOL APIENTRY
    606 DrvSwapBuffers(
    607    HDC hdc );
    608 
    609 BOOL APIENTRY
    610 DrvSwapLayerBuffers(
    611    HDC hdc,
    612    UINT fuPlanes );
    613 
    614 BOOL APIENTRY
    615 DrvValidateVersion(
    616    ULONG ulVersion );
    617 
    618 #endif /* STW_ICD_H */
    619