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