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