1 #include "glx.h"
2
3 #define MAP(func_name, func) \
4 if (strcmp(name, func_name) == 0) return (void *)func;
5
6 #define MAP_EGL(func_name, egl_func) \
7 MAP(#func_name, eglGetProcAddress(#egl_func))
8
9 #define EX(func_name) MAP(#func_name, func_name)
10
11 #define ARB(func_name) MAP(#func_name "ARB", func_name)
12
13 #define STUB(func_name) \
14 if (strcmp(name, #func_name) == 0) { \
15 printf("glX stub: %s\n", #func_name); \
16 return (void *)glXStub; \
17 }
18
glXStub(void * x,...)19 void glXStub(void *x, ...) {
20 return;
21 }
22
glXGetProcAddressARB(const char * name)23 void *glXGetProcAddressARB(const char *name) {
24 // generated gles wrappers
25 #ifdef USE_ES2
26 #include "gles2funcs.inc"
27 #else
28 #include "glesfuncs.inc"
29 #endif
30
31 // glX calls
32 EX(glXChooseVisual);
33 EX(glXCopyContext);
34 EX(glXCreateContext);
35 EX(glXCreateContextAttribsARB);
36 EX(glXCreateGLXPixmap);
37 EX(glXDestroyContext);
38 EX(glXDestroyGLXPixmap);
39 EX(glXGetConfig);
40 EX(glXGetCurrentDisplay);
41 EX(glXGetCurrentDrawable);
42 EX(glXIsDirect);
43 EX(glXMakeCurrent);
44 EX(glXQueryExtensionsString);
45 EX(glXQueryServerString);
46 EX(glXSwapBuffers);
47 EX(glXSwapIntervalEXT);
48 EX(glXSwapIntervalMESA);
49 EX(glXSwapIntervalSGI);
50 EX(glXUseXFont);
51 EX(glXWaitGL);
52 EX(glXWaitX);
53
54 // GL_ARB_vertex_buffer_object
55 /*
56 ARB(glBindBuffer);
57 ARB(glBufferData);
58 ARB(glBufferSubData);
59 ARB(glDeleteBuffers);
60 ARB(glGenBuffers);
61 ARB(glIsBuffer);
62 MAP_EGL(glGetBufferParameteriARB, glGetBufferParameteriOES);
63 MAP_EGL(glGetBufferPointerARB, glGetBufferPointerOES);
64 MAP_EGL(glGetBufferPointervARB, glGetBufferPointervOES);
65 MAP_EGL(glMapBufferARB, glMapBufferOES);
66 MAP_EGL(glUnmapBufferARB, glMapBufferOES);
67 STUB(glGetBufferParameterivARB);
68 STUB(glGetBufferSubDataARB);
69 */
70
71 // OES wrapper
72 EX(glClearDepthfOES);
73 EX(glClipPlanefOES);
74 EX(glDepthRangefOES);
75 EX(glFrustumfOES);
76 EX(glGetClipPlanefOES);
77 EX(glOrthofOES);
78
79 // passthrough
80 // batch thunking!
81 #define THUNK(suffix, type) \
82 EX(glColor3##suffix##v); \
83 EX(glColor3##suffix); \
84 EX(glColor4##suffix##v); \
85 EX(glColor4##suffix); \
86 EX(glSecondaryColor3##suffix##v); \
87 EX(glSecondaryColor3##suffix); \
88 MAP("glSecondaryColor3" #suffix "vEXT", glSecondaryColor3##suffix##v); \
89 MAP("glSecondaryColor3" #suffix "EXT", glSecondaryColor3##suffix); \
90 EX(glIndex##suffix##v); \
91 EX(glIndex##suffix); \
92 EX(glNormal3##suffix##v); \
93 EX(glNormal3##suffix); \
94 EX(glRasterPos2##suffix##v); \
95 EX(glRasterPos2##suffix); \
96 EX(glRasterPos3##suffix##v); \
97 EX(glRasterPos3##suffix); \
98 EX(glRasterPos4##suffix##v); \
99 EX(glRasterPos4##suffix); \
100 EX(glVertex2##suffix##v); \
101 EX(glVertex2##suffix); \
102 EX(glVertex3##suffix##v); \
103 EX(glVertex3##suffix); \
104 EX(glVertex4##suffix##v); \
105 EX(glVertex4##suffix); \
106 EX(glTexCoord1##suffix##v); \
107 EX(glTexCoord1##suffix); \
108 EX(glTexCoord2##suffix##v); \
109 EX(glTexCoord2##suffix); \
110 EX(glTexCoord3##suffix##v); \
111 EX(glTexCoord3##suffix); \
112 EX(glTexCoord4##suffix##v); \
113 EX(glTexCoord4##suffix);
114
115 THUNK(b, GLbyte);
116 THUNK(d, GLdouble);
117 THUNK(i, GLint);
118 THUNK(s, GLshort);
119 THUNK(ub, GLubyte);
120 THUNK(ui, GLuint);
121 THUNK(us, GLushort);
122 THUNK(f, GLfloat);
123 #undef THUNK
124
125 #ifdef USE_ES2
126 EX(glCompileShaderARB);
127 EX(glCreateShaderObjectARB);
128 EX(glGetObjectParameterivARB);
129 EX(glShaderSourceARB);
130 #endif
131
132 // functions we actually define
133 EX(glActiveTextureARB);
134 EX(glArrayElement);
135 EX(glBegin);
136 EX(glBitmap);
137 EX(glBlendEquationSeparatei);
138 EX(glBlendFuncSeparate);
139 EX(glBlendFuncSeparatei);
140 EX(glCallList);
141 EX(glCallLists);
142 EX(glClearDepth);
143 EX(glClientActiveTextureARB);
144 EX(glClipPlane);
145 EX(glCopyPixels);
146 EX(glDeleteLists);
147 EX(glDepthRange);
148 EX(glDisable);
149 EX(glDrawBuffer);
150 EX(glDrawPixels);
151 EX(glEdgeFlag);
152 EX(glEnable);
153 EX(glEnd);
154 EX(glEndList);
155 EX(glEvalCoord1d);
156 EX(glEvalCoord1f);
157 EX(glEvalCoord2d);
158 EX(glEvalCoord2f);
159 EX(glEvalMesh1);
160 EX(glEvalMesh2);
161 EX(glEvalPoint1);
162 EX(glEvalPoint2);
163 EX(glFogCoordd);
164 EX(glFogCoorddv);
165 EX(glFogCoordf);
166 EX(glFogCoordfv);
167 EX(glFogi);
168 EX(glFogiv);
169 EX(glFrustum);
170 EX(glGenLists);
171 EX(glGetDoublev);
172 EX(glGetIntegerv);
173 EX(glGetMapdv);
174 EX(glGetMapfv);
175 EX(glGetMapiv);
176 EX(glGetTexImage);
177 EX(glGetTexLevelParameterfv);
178 EX(glGetTexLevelParameteriv);
179 EX(glInitNames);
180 EX(glInterleavedArrays);
181 EX(glIsList);
182 #ifndef USE_ES2
183 EX(glLighti);
184 EX(glLightiv);
185 EX(glLightModeli);
186 EX(glLightModeliv);
187 #endif
188 EX(glLineStipple);
189 EX(glListBase);
190 EX(glLoadMatrixd);
191 EX(glLoadName);
192 EX(glLockArraysEXT);
193 EX(glMap1d);
194 EX(glMap1f);
195 EX(glMap2d);
196 EX(glMap2f);
197 EX(glMapGrid1d);
198 EX(glMapGrid1f);
199 EX(glMapGrid2d);
200 EX(glMapGrid2f);
201 EX(glMateriali);
202 EX(glMultiTexCoord2f);
203 EX(glMultMatrixd);
204 EX(glNewList);
205 EX(glOrtho);
206 EX(glPixelTransferf);
207 EX(glPixelTransferi);
208 EX(glPixelZoom);
209 EX(glPolygonMode);
210 EX(glPolygonStipple);
211 EX(glPopAttrib);
212 EX(glPopClientAttrib);
213 EX(glPopName);
214 EX(glPushAttrib);
215 EX(glPushClientAttrib);
216 EX(glPushName);
217 EX(glRasterPos2i);
218 EX(glReadBuffer);
219 EX(glRectd);
220 EX(glRectf);
221 EX(glRecti);
222 EX(glRects);
223 EX(glRenderMode);
224 EX(glRotated);
225 EX(glScaled);
226 EX(glTexGend);
227 EX(glTexGendv);
228 EX(glTexGenf);
229 EX(glTexGenfv);
230 EX(glTexGeni);
231 EX(glTexGeniv);
232 EX(glTexImage1D);
233 EX(glTexImage3D);
234 EX(glTranslated);
235 EX(glUnlockArraysEXT);
236
237 // stubs for unimplemented functions
238 STUB(glAccum);
239 STUB(glAreTexturesResident);
240 STUB(glClearAccum);
241 STUB(glColorMaterial);
242 STUB(glCopyTexImage1D);
243 STUB(glCopyTexSubImage1D);
244 STUB(glEdgeFlagPointer);
245 STUB(glFeedbackBuffer);
246 STUB(glGetClipPlane);
247 STUB(glGetLightiv);
248 STUB(glGetMaterialiv);
249 STUB(glGetPixelMapfv);
250 STUB(glGetPixelMapuiv);
251 STUB(glGetPixelMapusv);
252 STUB(glGetPolygonStipple);
253 STUB(glGetStringi);
254 STUB(glGetTexGendv);
255 STUB(glGetTexGenfv);
256 STUB(glGetTexGeniv);
257 STUB(glMaterialiv);
258 STUB(glPassThrough);
259 STUB(glPixelMapfv);
260 STUB(glPixelMapuiv);
261 STUB(glPixelMapusv);
262 STUB(glPixelStoref);
263 STUB(glPrioritizeTextures);
264 STUB(glSelectBuffer);
265 STUB(glTexSubImage1D);
266
267 printf("glXGetProcAddress: %s not found.\n", name);
268 return NULL;
269 }
270
glXGetProcAddress(const char * name)271 void *glXGetProcAddress(const char *name) {
272 return glXGetProcAddressARB(name);
273 }
274