]> git.cworth.org Git - apitrace/blob - dispatch/glproc.py
stash: Trace and replay of glx-tfp works
[apitrace] / dispatch / glproc.py
1 ##########################################################################
2 #
3 # Copyright 2010 VMware, Inc.
4 # All Rights Reserved.
5 #
6 # Permission is hereby granted, free of charge, to any person obtaining a copy
7 # of this software and associated documentation files (the "Software"), to deal
8 # in the Software without restriction, including without limitation the rights
9 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 # copies of the Software, and to permit persons to whom the Software is
11 # furnished to do so, subject to the following conditions:
12 #
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
15 #
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 # THE SOFTWARE.
23 #
24 ##########################################################################/
25
26
27 """Generated an header, glproc.hpp, which does pretty much what GLEW does, but
28 covers all the functions we support.
29 """ 
30
31
32 from dispatch import Dispatcher
33 import specs.stdapi as stdapi
34 from specs.glapi import glapi
35 from specs.glxapi import glxapi
36 from specs.wglapi import wglapi
37 from specs.cglapi import cglapi
38 from specs.eglapi import eglapi
39 from specs.glesapi import glesapi
40 from specs.xapi import xapi
41
42
43 # See http://www.opengl.org/registry/ABI/
44 public_symbols = set([
45     # GL 1.2 and ARB_multitexture
46     "glAccum",
47     "glAlphaFunc",
48     "glAreTexturesResident",
49     "glArrayElement",
50     "glBegin",
51     "glBindTexture",
52     "glBitmap",
53     "glBlendFunc",
54     "glCallList",
55     "glCallLists",
56     "glClear",
57     "glClearAccum",
58     "glClearColor",
59     "glClearDepth",
60     "glClearIndex",
61     "glClearStencil",
62     "glClipPlane",
63     "glColor3b",
64     "glColor3bv",
65     "glColor3d",
66     "glColor3dv",
67     "glColor3f",
68     "glColor3fv",
69     "glColor3i",
70     "glColor3iv",
71     "glColor3s",
72     "glColor3sv",
73     "glColor3ub",
74     "glColor3ubv",
75     "glColor3ui",
76     "glColor3uiv",
77     "glColor3us",
78     "glColor3usv",
79     "glColor4b",
80     "glColor4bv",
81     "glColor4d",
82     "glColor4dv",
83     "glColor4f",
84     "glColor4fv",
85     "glColor4i",
86     "glColor4iv",
87     "glColor4s",
88     "glColor4sv",
89     "glColor4ub",
90     "glColor4ubv",
91     "glColor4ui",
92     "glColor4uiv",
93     "glColor4us",
94     "glColor4usv",
95     "glColorMask",
96     "glColorMaterial",
97     "glColorPointer",
98     "glCopyPixels",
99     "glCopyTexImage1D",
100     "glCopyTexImage2D",
101     "glCopyTexSubImage1D",
102     "glCopyTexSubImage2D",
103     "glCullFace",
104     "glDeleteLists",
105     "glDeleteTextures",
106     "glDepthFunc",
107     "glDepthMask",
108     "glDepthRange",
109     "glDisable",
110     "glDisableClientState",
111     "glDrawArrays",
112     "glDrawBuffer",
113     "glDrawElements",
114     "glDrawPixels",
115     "glEdgeFlag",
116     "glEdgeFlagPointer",
117     "glEdgeFlagv",
118     "glEnable",
119     "glEnableClientState",
120     "glEnd",
121     "glEndList",
122     "glEvalCoord1d",
123     "glEvalCoord1dv",
124     "glEvalCoord1f",
125     "glEvalCoord1fv",
126     "glEvalCoord2d",
127     "glEvalCoord2dv",
128     "glEvalCoord2f",
129     "glEvalCoord2fv",
130     "glEvalMesh1",
131     "glEvalMesh2",
132     "glEvalPoint1",
133     "glEvalPoint2",
134     "glFeedbackBuffer",
135     "glFinish",
136     "glFlush",
137     "glFogf",
138     "glFogfv",
139     "glFogi",
140     "glFogiv",
141     "glFrontFace",
142     "glFrustum",
143     "glGenLists",
144     "glGenTextures",
145     "glGetBooleanv",
146     "glGetClipPlane",
147     "glGetDoublev",
148     "glGetError",
149     "glGetFloatv",
150     "glGetIntegerv",
151     "glGetLightfv",
152     "glGetLightiv",
153     "glGetMapdv",
154     "glGetMapfv",
155     "glGetMapiv",
156     "glGetMaterialfv",
157     "glGetMaterialiv",
158     "glGetPixelMapfv",
159     "glGetPixelMapuiv",
160     "glGetPixelMapusv",
161     "glGetPointerv",
162     "glGetPolygonStipple",
163     "glGetString",
164     "glGetTexEnvfv",
165     "glGetTexEnviv",
166     "glGetTexGendv",
167     "glGetTexGenfv",
168     "glGetTexGeniv",
169     "glGetTexImage",
170     "glGetTexLevelParameterfv",
171     "glGetTexLevelParameteriv",
172     "glGetTexParameterfv",
173     "glGetTexParameteriv",
174     "glHint",
175     "glIndexMask",
176     "glIndexPointer",
177     "glIndexd",
178     "glIndexdv",
179     "glIndexf",
180     "glIndexfv",
181     "glIndexi",
182     "glIndexiv",
183     "glIndexs",
184     "glIndexsv",
185     "glIndexub",
186     "glIndexubv",
187     "glInitNames",
188     "glInterleavedArrays",
189     "glIsEnabled",
190     "glIsList",
191     "glIsTexture",
192     "glLightModelf",
193     "glLightModelfv",
194     "glLightModeli",
195     "glLightModeliv",
196     "glLightf",
197     "glLightfv",
198     "glLighti",
199     "glLightiv",
200     "glLineStipple",
201     "glLineWidth",
202     "glListBase",
203     "glLoadIdentity",
204     "glLoadMatrixd",
205     "glLoadMatrixf",
206     "glLoadName",
207     "glLogicOp",
208     "glMap1d",
209     "glMap1f",
210     "glMap2d",
211     "glMap2f",
212     "glMapGrid1d",
213     "glMapGrid1f",
214     "glMapGrid2d",
215     "glMapGrid2f",
216     "glMaterialf",
217     "glMaterialfv",
218     "glMateriali",
219     "glMaterialiv",
220     "glMatrixMode",
221     "glMultMatrixd",
222     "glMultMatrixf",
223     "glNewList",
224     "glNormal3b",
225     "glNormal3bv",
226     "glNormal3d",
227     "glNormal3dv",
228     "glNormal3f",
229     "glNormal3fv",
230     "glNormal3i",
231     "glNormal3iv",
232     "glNormal3s",
233     "glNormal3sv",
234     "glNormalPointer",
235     "glOrtho",
236     "glPassThrough",
237     "glPixelMapfv",
238     "glPixelMapuiv",
239     "glPixelMapusv",
240     "glPixelStoref",
241     "glPixelStorei",
242     "glPixelTransferf",
243     "glPixelTransferi",
244     "glPixelZoom",
245     "glPointSize",
246     "glPolygonMode",
247     "glPolygonOffset",
248     "glPolygonStipple",
249     "glPopAttrib",
250     "glPopClientAttrib",
251     "glPopMatrix",
252     "glPopName",
253     "glPrioritizeTextures",
254     "glPushAttrib",
255     "glPushClientAttrib",
256     "glPushMatrix",
257     "glPushName",
258     "glRasterPos2d",
259     "glRasterPos2dv",
260     "glRasterPos2f",
261     "glRasterPos2fv",
262     "glRasterPos2i",
263     "glRasterPos2iv",
264     "glRasterPos2s",
265     "glRasterPos2sv",
266     "glRasterPos3d",
267     "glRasterPos3dv",
268     "glRasterPos3f",
269     "glRasterPos3fv",
270     "glRasterPos3i",
271     "glRasterPos3iv",
272     "glRasterPos3s",
273     "glRasterPos3sv",
274     "glRasterPos4d",
275     "glRasterPos4dv",
276     "glRasterPos4f",
277     "glRasterPos4fv",
278     "glRasterPos4i",
279     "glRasterPos4iv",
280     "glRasterPos4s",
281     "glRasterPos4sv",
282     "glReadBuffer",
283     "glReadPixels",
284     "glRectd",
285     "glRectdv",
286     "glRectf",
287     "glRectfv",
288     "glRecti",
289     "glRectiv",
290     "glRects",
291     "glRectsv",
292     "glRenderMode",
293     "glRotated",
294     "glRotatef",
295     "glScaled",
296     "glScalef",
297     "glScissor",
298     "glSelectBuffer",
299     "glShadeModel",
300     "glStencilFunc",
301     "glStencilMask",
302     "glStencilOp",
303     "glTexCoord1d",
304     "glTexCoord1dv",
305     "glTexCoord1f",
306     "glTexCoord1fv",
307     "glTexCoord1i",
308     "glTexCoord1iv",
309     "glTexCoord1s",
310     "glTexCoord1sv",
311     "glTexCoord2d",
312     "glTexCoord2dv",
313     "glTexCoord2f",
314     "glTexCoord2fv",
315     "glTexCoord2i",
316     "glTexCoord2iv",
317     "glTexCoord2s",
318     "glTexCoord2sv",
319     "glTexCoord3d",
320     "glTexCoord3dv",
321     "glTexCoord3f",
322     "glTexCoord3fv",
323     "glTexCoord3i",
324     "glTexCoord3iv",
325     "glTexCoord3s",
326     "glTexCoord3sv",
327     "glTexCoord4d",
328     "glTexCoord4dv",
329     "glTexCoord4f",
330     "glTexCoord4fv",
331     "glTexCoord4i",
332     "glTexCoord4iv",
333     "glTexCoord4s",
334     "glTexCoord4sv",
335     "glTexCoordPointer",
336     "glTexEnvf",
337     "glTexEnvfv",
338     "glTexEnvi",
339     "glTexEnviv",
340     "glTexGend",
341     "glTexGendv",
342     "glTexGenf",
343     "glTexGenfv",
344     "glTexGeni",
345     "glTexGeniv",
346     "glTexImage1D",
347     "glTexImage2D",
348     "glTexParameterf",
349     "glTexParameterfv",
350     "glTexParameteri",
351     "glTexParameteriv",
352     "glTexSubImage1D",
353     "glTexSubImage2D",
354     "glTranslated",
355     "glTranslatef",
356     "glVertex2d",
357     "glVertex2dv",
358     "glVertex2f",
359     "glVertex2fv",
360     "glVertex2i",
361     "glVertex2iv",
362     "glVertex2s",
363     "glVertex2sv",
364     "glVertex3d",
365     "glVertex3dv",
366     "glVertex3f",
367     "glVertex3fv",
368     "glVertex3i",
369     "glVertex3iv",
370     "glVertex3s",
371     "glVertex3sv",
372     "glVertex4d",
373     "glVertex4dv",
374     "glVertex4f",
375     "glVertex4fv",
376     "glVertex4i",
377     "glVertex4iv",
378     "glVertex4s",
379     "glVertex4sv",
380     "glVertexPointer",
381     "glViewport",
382
383     # GLX 1.3 and GLX_ARB_get_proc_address
384     "glXChooseVisual",
385     "glXCreateContext",
386     "glXDestroyContext",
387     "glXMakeCurrent",
388     "glXCopyContext",
389     "glXSwapBuffers",
390     "glXCreateGLXPixmap",
391     "glXDestroyGLXPixmap",
392     "glXQueryExtension",
393     "glXQueryVersion",
394     "glXIsDirect",
395     "glXGetConfig",
396     "glXGetCurrentContext",
397     "glXGetCurrentDrawable",
398     "glXWaitGL",
399     "glXWaitX",
400     "glXUseXFont",
401     "glXQueryExtensionsString",
402     "glXQueryServerString",
403     "glXGetClientString",
404     "glXGetCurrentDisplay",
405     "glXChooseFBConfig",
406     "glXGetFBConfigAttrib",
407     "glXGetFBConfigs",
408     "glXGetVisualFromFBConfig",
409     "glXCreateWindow",
410     "glXDestroyWindow",
411     "glXCreatePixmap",
412     "glXDestroyPixmap",
413     "glXCreatePbuffer",
414     "glXDestroyPbuffer",
415     "glXQueryDrawable",
416     "glXCreateNewContext",
417     "glXMakeContextCurrent",
418     "glXGetCurrentReadDrawable",
419     "glXQueryContext",
420     "glXSelectEvent",
421     "glXGetSelectedEvent",
422     "glXGetProcAddressARB",
423     "glXGetProcAddress",
424     
425     # WGL
426     #"glDebugEntry",
427     "wglChoosePixelFormat",
428     "wglCopyContext",
429     "wglCreateContext",
430     "wglCreateLayerContext",
431     "wglDeleteContext",
432     "wglDescribeLayerPlane",
433     "wglDescribePixelFormat",
434     "wglGetCurrentContext",
435     "wglGetCurrentDC",
436     "wglGetDefaultProcAddress",
437     "wglGetLayerPaletteEntries",
438     "wglGetPixelFormat",
439     "wglGetProcAddress",
440     "wglMakeCurrent",
441     "wglRealizeLayerPalette",
442     "wglSetLayerPaletteEntries",
443     "wglSetPixelFormat",
444     "wglShareLists",
445     "wglSwapBuffers",
446     "wglSwapLayerBuffers",
447     "wglSwapMultipleBuffers",
448     "wglUseFontBitmapsA",
449     "wglUseFontBitmapsW",
450     "wglUseFontOutlinesA",
451     "wglUseFontOutlinesW",
452
453     # X
454     "XCreatePixmap",
455
456 ])
457
458 # EGL 1.4
459 public_symbols.update([
460    "eglBindAPI",
461    "eglBindTexImage",
462    "eglChooseConfig",
463    "eglCopyBuffers",
464    "eglCreateContext",
465    "eglCreatePbufferFromClientBuffer",
466    "eglCreatePbufferSurface",
467    "eglCreatePixmapSurface",
468    "eglCreateWindowSurface",
469    "eglDestroyContext",
470    "eglDestroySurface",
471    "eglGetConfigAttrib",
472    "eglGetConfigs",
473    "eglGetCurrentContext",
474    "eglGetCurrentDisplay",
475    "eglGetCurrentSurface",
476    "eglGetDisplay",
477    "eglGetError",
478    "eglGetProcAddress",
479    "eglInitialize",
480    "eglMakeCurrent",
481    "eglQueryAPI",
482    "eglQueryContext",
483    "eglQueryString",
484    "eglQuerySurface",
485    "eglReleaseTexImage",
486    "eglReleaseThread",
487    "eglSurfaceAttrib",
488    "eglSwapBuffers",
489    "eglSwapInterval",
490    "eglTerminate",
491    "eglWaitClient",
492    "eglWaitGL",
493    "eglWaitNative",
494 ])
495
496 class GlDispatcher(Dispatcher):
497
498     def header(self):
499         print '''
500 #if defined(_WIN32)
501 extern HMODULE _libGlHandle;
502 #else
503 extern void * _libGlHandle;
504 #endif
505
506 void * _getPublicProcAddress(const char *procName);
507 void * _getPrivateProcAddress(const char *procName);
508 '''
509         
510     def isFunctionPublic(self, module, function):
511         return function.name in public_symbols or function.name.startswith('CGL')
512
513
514 if __name__ == '__main__':
515     print
516     print '#ifndef _GLPROC_HPP_'
517     print '#define _GLPROC_HPP_'
518     print 
519     print '#include "glimports.hpp"'
520     print '#include "os.hpp"'
521     print
522     dispatcher = GlDispatcher()
523     print
524     dispatcher.header()
525     print
526     dispatcher.dispatchModule(eglapi)
527     print
528     print '#if defined(_WIN32)'
529     print
530     dispatcher.dispatchModule(wglapi)
531     print
532     print '#elif defined(__APPLE__)'
533     print
534     dispatcher.dispatchModule(cglapi)
535     print
536     print '#elif defined(HAVE_X11)'
537     print
538     dispatcher.dispatchModule(glxapi)
539     print
540     dispatcher.dispatchModule(xapi)
541     print
542     print '#endif'
543     print
544     dispatcher.dispatchModule(glapi)
545     print
546     dispatcher.dispatchModule(glesapi)
547     print
548
549     print '#endif /* !_GLPROC_HPP_ */'
550     print