2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 #include "debugging/debugging.h"
32 #define WINGDIAPI __declspec( dllimport )
33 #define APIENTRY __stdcall
36 #if defined( __APPLE__ ) && !defined( XWINDOWS )
37 #include <OpenGL/gl.h>
56 PROC ( WINAPI * qwglGetProcAddress )( LPCSTR );
58 #elif defined ( XWINDOWS )
63 Bool ( *qglXQueryExtension )( Display *dpy, int *errorb, int *event );
64 void* ( *qglXGetProcAddressARB )( const GLubyte * procName );
65 typedef void* ( *glXGetProcAddressARBProc )( const GLubyte *procName );
67 #elif defined(__APPLE__)
68 #include <mach-o/dyld.h>
72 #error "unsupported platform"
76 void QGL_Shutdown( OpenGLBinding& table ){
77 globalOutputStream() << "Shutting down OpenGL module...";
80 qwglGetProcAddress = 0;
81 #elif defined( XWINDOWS )
82 qglXQueryExtension = glXQueryExtension;
83 qglXGetProcAddressARB = 0;
84 #elif defined(__APPLE__)
86 #error "unsupported platform"
89 globalOutputStream() << "Done.\n";
93 typedef struct glu_error_struct
99 GLU_ERROR_STRUCT glu_errlist[] = {
100 {GL_NO_ERROR, "GL_NO_ERROR - no error"},
101 {GL_INVALID_ENUM, "GL_INVALID_ENUM - An unacceptable value is specified for an enumerated argument."},
102 {GL_INVALID_VALUE, "GL_INVALID_VALUE - A numeric argument is out of range."},
103 {GL_INVALID_OPERATION, "GL_INVALID_OPERATION - The specified operation is not allowed in the current state."},
104 {GL_STACK_OVERFLOW, "GL_STACK_OVERFLOW - Function would cause a stack overflow."},
105 {GL_STACK_UNDERFLOW, "GL_STACK_UNDERFLOW - Function would cause a stack underflow."},
106 {GL_OUT_OF_MEMORY, "GL_OUT_OF_MEMORY - There is not enough memory left to execute the function."},
110 const GLubyte* qgluErrorString( GLenum errCode ){
112 for ( search = 0; glu_errlist[search].errstr; search++ )
114 if ( errCode == glu_errlist[search].errnum ) {
115 return (const GLubyte *)glu_errlist[search].errstr;
118 return (const GLubyte *)"Unknown error";
122 void glInvalidFunction(){
123 ERROR_MESSAGE( "calling an invalid OpenGL function" );
126 #define EXTENSIONS_ENABLED 1
128 bool QGL_ExtensionSupported( const char* extension ){
129 #if EXTENSIONS_ENABLED
130 const GLubyte *extensions = 0;
131 const GLubyte *start;
132 GLubyte *where, *terminator;
134 // Extension names should not have spaces.
135 where = (GLubyte *) strchr( extension, ' ' );
136 if ( where || *extension == '\0' ) {
140 extensions = GlobalOpenGL().m_glGetString( GL_EXTENSIONS );
147 // It takes a bit of care to be fool-proof about parsing the
148 // OpenGL extensions string. Don't be fooled by sub-strings, etc.
149 for ( start = extensions; ; )
151 where = (GLubyte *) strstr( (const char *) start, extension );
156 terminator = where + strlen( extension );
157 if ( where == start || *( where - 1 ) == ' ' ) {
158 if ( *terminator == ' ' || *terminator == '\0' ) {
170 typedef int ( QGL_DLLEXPORT * QGLFunctionPointer )();
172 QGLFunctionPointer QGL_getExtensionFunc( const char* symbol ){
173 #if defined( XWINDOWS )
174 //ASSERT_NOTNULL(qglXGetProcAddressARB);
175 if ( qglXGetProcAddressARB == 0 ) {
176 return reinterpret_cast<QGLFunctionPointer>( glInvalidFunction );
180 return (QGLFunctionPointer) qglXGetProcAddressARB( reinterpret_cast<const GLubyte*>( symbol ) );
182 #elif defined(__APPLE__)
183 // Prepend a '_' for the Unix C symbol mangling convention
184 char *symbolName = (char *) malloc(strlen(symbol) + 2);
185 strcpy(symbolName + 1, symbol);
187 NSSymbol nssymbol = NULL;
188 if (NSIsSymbolNameDefined(symbolName)) nssymbol = NSLookupAndBindSymbol(symbolName);
190 return nssymbol ? reinterpret_cast<QGLFunctionPointer>(NSAddressOfSymbol(nssymbol)) : reinterpret_cast<QGLFunctionPointer>(glInvalidFunction);
191 #elif defined( WIN32 )
192 ASSERT_NOTNULL( qwglGetProcAddress );
193 return (QGLFunctionPointer) qwglGetProcAddress( symbol );
195 #error "unsupported platform"
200 template<typename Func>
201 bool QGL_constructExtensionFunc( Func& func, const char* symbol ){
202 func = reinterpret_cast<Func>( QGL_getExtensionFunc( symbol ) );
206 template<typename Func>
207 void QGL_invalidateExtensionFunc( Func& func ){
208 func = reinterpret_cast<Func>( glInvalidFunction );
211 void QGL_clear( OpenGLBinding& table ){
212 QGL_invalidateExtensionFunc( table.m_glAccum );
213 QGL_invalidateExtensionFunc( table.m_glAlphaFunc );
214 QGL_invalidateExtensionFunc( table.m_glAreTexturesResident );
215 QGL_invalidateExtensionFunc( table.m_glArrayElement );
216 QGL_invalidateExtensionFunc( table.m_glBegin );
217 QGL_invalidateExtensionFunc( table.m_glBindTexture );
218 QGL_invalidateExtensionFunc( table.m_glBitmap );
219 QGL_invalidateExtensionFunc( table.m_glBlendFunc );
220 QGL_invalidateExtensionFunc( table.m_glCallList );
221 QGL_invalidateExtensionFunc( table.m_glCallLists );
222 QGL_invalidateExtensionFunc( table.m_glClear );
223 QGL_invalidateExtensionFunc( table.m_glClearAccum );
224 QGL_invalidateExtensionFunc( table.m_glClearColor );
225 QGL_invalidateExtensionFunc( table.m_glClearDepth );
226 QGL_invalidateExtensionFunc( table.m_glClearIndex );
227 QGL_invalidateExtensionFunc( table.m_glClearStencil );
228 QGL_invalidateExtensionFunc( table.m_glClipPlane );
229 QGL_invalidateExtensionFunc( table.m_glColor3b );
230 QGL_invalidateExtensionFunc( table.m_glColor3bv );
231 QGL_invalidateExtensionFunc( table.m_glColor3d );
232 QGL_invalidateExtensionFunc( table.m_glColor3dv );
233 QGL_invalidateExtensionFunc( table.m_glColor3f );
234 QGL_invalidateExtensionFunc( table.m_glColor3fv );
235 QGL_invalidateExtensionFunc( table.m_glColor3i );
236 QGL_invalidateExtensionFunc( table.m_glColor3iv );
237 QGL_invalidateExtensionFunc( table.m_glColor3s );
238 QGL_invalidateExtensionFunc( table.m_glColor3sv );
239 QGL_invalidateExtensionFunc( table.m_glColor3ub );
240 QGL_invalidateExtensionFunc( table.m_glColor3ubv );
241 QGL_invalidateExtensionFunc( table.m_glColor3ui );
242 QGL_invalidateExtensionFunc( table.m_glColor3uiv );
243 QGL_invalidateExtensionFunc( table.m_glColor3us );
244 QGL_invalidateExtensionFunc( table.m_glColor3usv );
245 QGL_invalidateExtensionFunc( table.m_glColor4b );
246 QGL_invalidateExtensionFunc( table.m_glColor4bv );
247 QGL_invalidateExtensionFunc( table.m_glColor4d );
248 QGL_invalidateExtensionFunc( table.m_glColor4dv );
249 QGL_invalidateExtensionFunc( table.m_glColor4f );
250 QGL_invalidateExtensionFunc( table.m_glColor4fv );
251 QGL_invalidateExtensionFunc( table.m_glColor4i );
252 QGL_invalidateExtensionFunc( table.m_glColor4iv );
253 QGL_invalidateExtensionFunc( table.m_glColor4s );
254 QGL_invalidateExtensionFunc( table.m_glColor4sv );
255 QGL_invalidateExtensionFunc( table.m_glColor4ub );
256 QGL_invalidateExtensionFunc( table.m_glColor4ubv );
257 QGL_invalidateExtensionFunc( table.m_glColor4ui );
258 QGL_invalidateExtensionFunc( table.m_glColor4uiv );
259 QGL_invalidateExtensionFunc( table.m_glColor4us );
260 QGL_invalidateExtensionFunc( table.m_glColor4usv );
261 QGL_invalidateExtensionFunc( table.m_glColorMask );
262 QGL_invalidateExtensionFunc( table.m_glColorMaterial );
263 QGL_invalidateExtensionFunc( table.m_glColorPointer );
264 QGL_invalidateExtensionFunc( table.m_glCopyPixels );
265 QGL_invalidateExtensionFunc( table.m_glCopyTexImage1D );
266 QGL_invalidateExtensionFunc( table.m_glCopyTexImage2D );
267 QGL_invalidateExtensionFunc( table.m_glCopyTexSubImage1D );
268 QGL_invalidateExtensionFunc( table.m_glCopyTexSubImage2D );
269 QGL_invalidateExtensionFunc( table.m_glCullFace );
270 QGL_invalidateExtensionFunc( table.m_glDeleteLists );
271 QGL_invalidateExtensionFunc( table.m_glDeleteTextures );
272 QGL_invalidateExtensionFunc( table.m_glDepthFunc );
273 QGL_invalidateExtensionFunc( table.m_glDepthMask );
274 QGL_invalidateExtensionFunc( table.m_glDepthRange );
275 QGL_invalidateExtensionFunc( table.m_glDisable );
276 QGL_invalidateExtensionFunc( table.m_glDisableClientState );
277 QGL_invalidateExtensionFunc( table.m_glDrawArrays );
278 QGL_invalidateExtensionFunc( table.m_glDrawBuffer );
279 QGL_invalidateExtensionFunc( table.m_glDrawElements );
280 QGL_invalidateExtensionFunc( table.m_glDrawPixels );
281 QGL_invalidateExtensionFunc( table.m_glEdgeFlag );
282 QGL_invalidateExtensionFunc( table.m_glEdgeFlagPointer );
283 QGL_invalidateExtensionFunc( table.m_glEdgeFlagv );
284 QGL_invalidateExtensionFunc( table.m_glEnable );
285 QGL_invalidateExtensionFunc( table.m_glEnableClientState );
286 QGL_invalidateExtensionFunc( table.m_glEnd );
287 QGL_invalidateExtensionFunc( table.m_glEndList );
288 QGL_invalidateExtensionFunc( table.m_glEvalCoord1d );
289 QGL_invalidateExtensionFunc( table.m_glEvalCoord1dv );
290 QGL_invalidateExtensionFunc( table.m_glEvalCoord1f );
291 QGL_invalidateExtensionFunc( table.m_glEvalCoord1fv );
292 QGL_invalidateExtensionFunc( table.m_glEvalCoord2d );
293 QGL_invalidateExtensionFunc( table.m_glEvalCoord2dv );
294 QGL_invalidateExtensionFunc( table.m_glEvalCoord2f );
295 QGL_invalidateExtensionFunc( table.m_glEvalCoord2fv );
296 QGL_invalidateExtensionFunc( table.m_glEvalMesh1 );
297 QGL_invalidateExtensionFunc( table.m_glEvalMesh2 );
298 QGL_invalidateExtensionFunc( table.m_glEvalPoint1 );
299 QGL_invalidateExtensionFunc( table.m_glEvalPoint2 );
300 QGL_invalidateExtensionFunc( table.m_glFeedbackBuffer );
301 QGL_invalidateExtensionFunc( table.m_glFinish );
302 QGL_invalidateExtensionFunc( table.m_glFlush );
303 QGL_invalidateExtensionFunc( table.m_glFogf );
304 QGL_invalidateExtensionFunc( table.m_glFogfv );
305 QGL_invalidateExtensionFunc( table.m_glFogi );
306 QGL_invalidateExtensionFunc( table.m_glFogiv );
307 QGL_invalidateExtensionFunc( table.m_glFrontFace );
308 QGL_invalidateExtensionFunc( table.m_glFrustum );
309 QGL_invalidateExtensionFunc( table.m_glGenLists );
310 QGL_invalidateExtensionFunc( table.m_glGenTextures );
311 QGL_invalidateExtensionFunc( table.m_glGetBooleanv );
312 QGL_invalidateExtensionFunc( table.m_glGetClipPlane );
313 QGL_invalidateExtensionFunc( table.m_glGetDoublev );
314 QGL_invalidateExtensionFunc( table.m_glGetError );
315 QGL_invalidateExtensionFunc( table.m_glGetFloatv );
316 QGL_invalidateExtensionFunc( table.m_glGetIntegerv );
317 QGL_invalidateExtensionFunc( table.m_glGetLightfv );
318 QGL_invalidateExtensionFunc( table.m_glGetLightiv );
319 QGL_invalidateExtensionFunc( table.m_glGetMapdv );
320 QGL_invalidateExtensionFunc( table.m_glGetMapfv );
321 QGL_invalidateExtensionFunc( table.m_glGetMapiv );
322 QGL_invalidateExtensionFunc( table.m_glGetMaterialfv );
323 QGL_invalidateExtensionFunc( table.m_glGetMaterialiv );
324 QGL_invalidateExtensionFunc( table.m_glGetPixelMapfv );
325 QGL_invalidateExtensionFunc( table.m_glGetPixelMapuiv );
326 QGL_invalidateExtensionFunc( table.m_glGetPixelMapusv );
327 QGL_invalidateExtensionFunc( table.m_glGetPointerv );
328 QGL_invalidateExtensionFunc( table.m_glGetPolygonStipple );
329 table.m_glGetString = glGetString;
330 QGL_invalidateExtensionFunc( table.m_glGetTexEnvfv );
331 QGL_invalidateExtensionFunc( table.m_glGetTexEnviv );
332 QGL_invalidateExtensionFunc( table.m_glGetTexGendv );
333 QGL_invalidateExtensionFunc( table.m_glGetTexGenfv );
334 QGL_invalidateExtensionFunc( table.m_glGetTexGeniv );
335 QGL_invalidateExtensionFunc( table.m_glGetTexImage );
336 QGL_invalidateExtensionFunc( table.m_glGetTexLevelParameterfv );
337 QGL_invalidateExtensionFunc( table.m_glGetTexLevelParameteriv );
338 QGL_invalidateExtensionFunc( table.m_glGetTexParameterfv );
339 QGL_invalidateExtensionFunc( table.m_glGetTexParameteriv );
340 QGL_invalidateExtensionFunc( table.m_glHint );
341 QGL_invalidateExtensionFunc( table.m_glIndexMask );
342 QGL_invalidateExtensionFunc( table.m_glIndexPointer );
343 QGL_invalidateExtensionFunc( table.m_glIndexd );
344 QGL_invalidateExtensionFunc( table.m_glIndexdv );
345 QGL_invalidateExtensionFunc( table.m_glIndexf );
346 QGL_invalidateExtensionFunc( table.m_glIndexfv );
347 QGL_invalidateExtensionFunc( table.m_glIndexi );
348 QGL_invalidateExtensionFunc( table.m_glIndexiv );
349 QGL_invalidateExtensionFunc( table.m_glIndexs );
350 QGL_invalidateExtensionFunc( table.m_glIndexsv );
351 QGL_invalidateExtensionFunc( table.m_glIndexub );
352 QGL_invalidateExtensionFunc( table.m_glIndexubv );
353 QGL_invalidateExtensionFunc( table.m_glInitNames );
354 QGL_invalidateExtensionFunc( table.m_glInterleavedArrays );
355 QGL_invalidateExtensionFunc( table.m_glIsEnabled );
356 QGL_invalidateExtensionFunc( table.m_glIsList );
357 QGL_invalidateExtensionFunc( table.m_glIsTexture );
358 QGL_invalidateExtensionFunc( table.m_glLightModelf );
359 QGL_invalidateExtensionFunc( table.m_glLightModelfv );
360 QGL_invalidateExtensionFunc( table.m_glLightModeli );
361 QGL_invalidateExtensionFunc( table.m_glLightModeliv );
362 QGL_invalidateExtensionFunc( table.m_glLightf );
363 QGL_invalidateExtensionFunc( table.m_glLightfv );
364 QGL_invalidateExtensionFunc( table.m_glLighti );
365 QGL_invalidateExtensionFunc( table.m_glLightiv );
366 QGL_invalidateExtensionFunc( table.m_glLineStipple );
367 QGL_invalidateExtensionFunc( table.m_glLineWidth );
368 QGL_invalidateExtensionFunc( table.m_glListBase );
369 QGL_invalidateExtensionFunc( table.m_glLoadIdentity );
370 QGL_invalidateExtensionFunc( table.m_glLoadMatrixd );
371 QGL_invalidateExtensionFunc( table.m_glLoadMatrixf );
372 QGL_invalidateExtensionFunc( table.m_glLoadName );
373 QGL_invalidateExtensionFunc( table.m_glLogicOp );
374 QGL_invalidateExtensionFunc( table.m_glMap1d );
375 QGL_invalidateExtensionFunc( table.m_glMap1f );
376 QGL_invalidateExtensionFunc( table.m_glMap2d );
377 QGL_invalidateExtensionFunc( table.m_glMap2f );
378 QGL_invalidateExtensionFunc( table.m_glMapGrid1d );
379 QGL_invalidateExtensionFunc( table.m_glMapGrid1f );
380 QGL_invalidateExtensionFunc( table.m_glMapGrid2d );
381 QGL_invalidateExtensionFunc( table.m_glMapGrid2f );
382 QGL_invalidateExtensionFunc( table.m_glMaterialf );
383 QGL_invalidateExtensionFunc( table.m_glMaterialfv );
384 QGL_invalidateExtensionFunc( table.m_glMateriali );
385 QGL_invalidateExtensionFunc( table.m_glMaterialiv );
386 QGL_invalidateExtensionFunc( table.m_glMatrixMode );
387 QGL_invalidateExtensionFunc( table.m_glMultMatrixd );
388 QGL_invalidateExtensionFunc( table.m_glMultMatrixf );
389 QGL_invalidateExtensionFunc( table.m_glNewList );
390 QGL_invalidateExtensionFunc( table.m_glNormal3b );
391 QGL_invalidateExtensionFunc( table.m_glNormal3bv );
392 QGL_invalidateExtensionFunc( table.m_glNormal3d );
393 QGL_invalidateExtensionFunc( table.m_glNormal3dv );
394 QGL_invalidateExtensionFunc( table.m_glNormal3f );
395 QGL_invalidateExtensionFunc( table.m_glNormal3fv );
396 QGL_invalidateExtensionFunc( table.m_glNormal3i );
397 QGL_invalidateExtensionFunc( table.m_glNormal3iv );
398 QGL_invalidateExtensionFunc( table.m_glNormal3s );
399 QGL_invalidateExtensionFunc( table.m_glNormal3sv );
400 QGL_invalidateExtensionFunc( table.m_glNormalPointer );
401 QGL_invalidateExtensionFunc( table.m_glOrtho );
402 QGL_invalidateExtensionFunc( table.m_glPassThrough );
403 QGL_invalidateExtensionFunc( table.m_glPixelMapfv );
404 QGL_invalidateExtensionFunc( table.m_glPixelMapuiv );
405 QGL_invalidateExtensionFunc( table.m_glPixelMapusv );
406 QGL_invalidateExtensionFunc( table.m_glPixelStoref );
407 QGL_invalidateExtensionFunc( table.m_glPixelStorei );
408 QGL_invalidateExtensionFunc( table.m_glPixelTransferf );
409 QGL_invalidateExtensionFunc( table.m_glPixelTransferi );
410 QGL_invalidateExtensionFunc( table.m_glPixelZoom );
411 QGL_invalidateExtensionFunc( table.m_glPointSize );
412 QGL_invalidateExtensionFunc( table.m_glPolygonMode );
413 QGL_invalidateExtensionFunc( table.m_glPolygonOffset );
414 QGL_invalidateExtensionFunc( table.m_glPolygonStipple );
415 QGL_invalidateExtensionFunc( table.m_glPopAttrib );
416 QGL_invalidateExtensionFunc( table.m_glPopClientAttrib );
417 QGL_invalidateExtensionFunc( table.m_glPopMatrix );
418 QGL_invalidateExtensionFunc( table.m_glPopName );
419 QGL_invalidateExtensionFunc( table.m_glPrioritizeTextures );
420 QGL_invalidateExtensionFunc( table.m_glPushAttrib );
421 QGL_invalidateExtensionFunc( table.m_glPushClientAttrib );
422 QGL_invalidateExtensionFunc( table.m_glPushMatrix );
423 QGL_invalidateExtensionFunc( table.m_glPushName );
424 QGL_invalidateExtensionFunc( table.m_glRasterPos2d );
425 QGL_invalidateExtensionFunc( table.m_glRasterPos2dv );
426 QGL_invalidateExtensionFunc( table.m_glRasterPos2f );
427 QGL_invalidateExtensionFunc( table.m_glRasterPos2fv );
428 QGL_invalidateExtensionFunc( table.m_glRasterPos2i );
429 QGL_invalidateExtensionFunc( table.m_glRasterPos2iv );
430 QGL_invalidateExtensionFunc( table.m_glRasterPos2s );
431 QGL_invalidateExtensionFunc( table.m_glRasterPos2sv );
432 QGL_invalidateExtensionFunc( table.m_glRasterPos3d );
433 QGL_invalidateExtensionFunc( table.m_glRasterPos3dv );
434 QGL_invalidateExtensionFunc( table.m_glRasterPos3f );
435 QGL_invalidateExtensionFunc( table.m_glRasterPos3fv );
436 QGL_invalidateExtensionFunc( table.m_glRasterPos3i );
437 QGL_invalidateExtensionFunc( table.m_glRasterPos3iv );
438 QGL_invalidateExtensionFunc( table.m_glRasterPos3s );
439 QGL_invalidateExtensionFunc( table.m_glRasterPos3sv );
440 QGL_invalidateExtensionFunc( table.m_glRasterPos4d );
441 QGL_invalidateExtensionFunc( table.m_glRasterPos4dv );
442 QGL_invalidateExtensionFunc( table.m_glRasterPos4f );
443 QGL_invalidateExtensionFunc( table.m_glRasterPos4fv );
444 QGL_invalidateExtensionFunc( table.m_glRasterPos4i );
445 QGL_invalidateExtensionFunc( table.m_glRasterPos4iv );
446 QGL_invalidateExtensionFunc( table.m_glRasterPos4s );
447 QGL_invalidateExtensionFunc( table.m_glRasterPos4sv );
448 QGL_invalidateExtensionFunc( table.m_glReadBuffer );
449 QGL_invalidateExtensionFunc( table.m_glReadPixels );
450 QGL_invalidateExtensionFunc( table.m_glRectd );
451 QGL_invalidateExtensionFunc( table.m_glRectdv );
452 QGL_invalidateExtensionFunc( table.m_glRectf );
453 QGL_invalidateExtensionFunc( table.m_glRectfv );
454 QGL_invalidateExtensionFunc( table.m_glRecti );
455 QGL_invalidateExtensionFunc( table.m_glRectiv );
456 QGL_invalidateExtensionFunc( table.m_glRects );
457 QGL_invalidateExtensionFunc( table.m_glRectsv );
458 QGL_invalidateExtensionFunc( table.m_glRenderMode );
459 QGL_invalidateExtensionFunc( table.m_glRotated );
460 QGL_invalidateExtensionFunc( table.m_glRotatef );
461 QGL_invalidateExtensionFunc( table.m_glScaled );
462 QGL_invalidateExtensionFunc( table.m_glScalef );
463 QGL_invalidateExtensionFunc( table.m_glScissor );
464 QGL_invalidateExtensionFunc( table.m_glSelectBuffer );
465 QGL_invalidateExtensionFunc( table.m_glShadeModel );
466 QGL_invalidateExtensionFunc( table.m_glStencilFunc );
467 QGL_invalidateExtensionFunc( table.m_glStencilMask );
468 QGL_invalidateExtensionFunc( table.m_glStencilOp );
469 QGL_invalidateExtensionFunc( table.m_glTexCoord1d );
470 QGL_invalidateExtensionFunc( table.m_glTexCoord1dv );
471 QGL_invalidateExtensionFunc( table.m_glTexCoord1f );
472 QGL_invalidateExtensionFunc( table.m_glTexCoord1fv );
473 QGL_invalidateExtensionFunc( table.m_glTexCoord1i );
474 QGL_invalidateExtensionFunc( table.m_glTexCoord1iv );
475 QGL_invalidateExtensionFunc( table.m_glTexCoord1s );
476 QGL_invalidateExtensionFunc( table.m_glTexCoord1sv );
477 QGL_invalidateExtensionFunc( table.m_glTexCoord2d );
478 QGL_invalidateExtensionFunc( table.m_glTexCoord2dv );
479 QGL_invalidateExtensionFunc( table.m_glTexCoord2f );
480 QGL_invalidateExtensionFunc( table.m_glTexCoord2fv );
481 QGL_invalidateExtensionFunc( table.m_glTexCoord2i );
482 QGL_invalidateExtensionFunc( table.m_glTexCoord2iv );
483 QGL_invalidateExtensionFunc( table.m_glTexCoord2s );
484 QGL_invalidateExtensionFunc( table.m_glTexCoord2sv );
485 QGL_invalidateExtensionFunc( table.m_glTexCoord3d );
486 QGL_invalidateExtensionFunc( table.m_glTexCoord3dv );
487 QGL_invalidateExtensionFunc( table.m_glTexCoord3f );
488 QGL_invalidateExtensionFunc( table.m_glTexCoord3fv );
489 QGL_invalidateExtensionFunc( table.m_glTexCoord3i );
490 QGL_invalidateExtensionFunc( table.m_glTexCoord3iv );
491 QGL_invalidateExtensionFunc( table.m_glTexCoord3s );
492 QGL_invalidateExtensionFunc( table.m_glTexCoord3sv );
493 QGL_invalidateExtensionFunc( table.m_glTexCoord4d );
494 QGL_invalidateExtensionFunc( table.m_glTexCoord4dv );
495 QGL_invalidateExtensionFunc( table.m_glTexCoord4f );
496 QGL_invalidateExtensionFunc( table.m_glTexCoord4fv );
497 QGL_invalidateExtensionFunc( table.m_glTexCoord4i );
498 QGL_invalidateExtensionFunc( table.m_glTexCoord4iv );
499 QGL_invalidateExtensionFunc( table.m_glTexCoord4s );
500 QGL_invalidateExtensionFunc( table.m_glTexCoord4sv );
501 QGL_invalidateExtensionFunc( table.m_glTexCoordPointer );
502 QGL_invalidateExtensionFunc( table.m_glTexEnvf );
503 QGL_invalidateExtensionFunc( table.m_glTexEnvfv );
504 QGL_invalidateExtensionFunc( table.m_glTexEnvi );
505 QGL_invalidateExtensionFunc( table.m_glTexEnviv );
506 QGL_invalidateExtensionFunc( table.m_glTexGend );
507 QGL_invalidateExtensionFunc( table.m_glTexGendv );
508 QGL_invalidateExtensionFunc( table.m_glTexGenf );
509 QGL_invalidateExtensionFunc( table.m_glTexGenfv );
510 QGL_invalidateExtensionFunc( table.m_glTexGeni );
511 QGL_invalidateExtensionFunc( table.m_glTexGeniv );
512 QGL_invalidateExtensionFunc( table.m_glTexImage1D );
513 QGL_invalidateExtensionFunc( table.m_glTexImage2D );
514 QGL_invalidateExtensionFunc( table.m_glTexParameterf );
515 QGL_invalidateExtensionFunc( table.m_glTexParameterfv );
516 QGL_invalidateExtensionFunc( table.m_glTexParameteri );
517 QGL_invalidateExtensionFunc( table.m_glTexParameteriv );
518 QGL_invalidateExtensionFunc( table.m_glTexSubImage1D );
519 QGL_invalidateExtensionFunc( table.m_glTexSubImage2D );
520 QGL_invalidateExtensionFunc( table.m_glTranslated );
521 QGL_invalidateExtensionFunc( table.m_glTranslatef );
522 QGL_invalidateExtensionFunc( table.m_glVertex2d );
523 QGL_invalidateExtensionFunc( table.m_glVertex2dv );
524 QGL_invalidateExtensionFunc( table.m_glVertex2f );
525 QGL_invalidateExtensionFunc( table.m_glVertex2fv );
526 QGL_invalidateExtensionFunc( table.m_glVertex2i );
527 QGL_invalidateExtensionFunc( table.m_glVertex2iv );
528 QGL_invalidateExtensionFunc( table.m_glVertex2s );
529 QGL_invalidateExtensionFunc( table.m_glVertex2sv );
530 QGL_invalidateExtensionFunc( table.m_glVertex3d );
531 QGL_invalidateExtensionFunc( table.m_glVertex3dv );
532 QGL_invalidateExtensionFunc( table.m_glVertex3f );
533 QGL_invalidateExtensionFunc( table.m_glVertex3fv );
534 QGL_invalidateExtensionFunc( table.m_glVertex3i );
535 QGL_invalidateExtensionFunc( table.m_glVertex3iv );
536 QGL_invalidateExtensionFunc( table.m_glVertex3s );
537 QGL_invalidateExtensionFunc( table.m_glVertex3sv );
538 QGL_invalidateExtensionFunc( table.m_glVertex4d );
539 QGL_invalidateExtensionFunc( table.m_glVertex4dv );
540 QGL_invalidateExtensionFunc( table.m_glVertex4f );
541 QGL_invalidateExtensionFunc( table.m_glVertex4fv );
542 QGL_invalidateExtensionFunc( table.m_glVertex4i );
543 QGL_invalidateExtensionFunc( table.m_glVertex4iv );
544 QGL_invalidateExtensionFunc( table.m_glVertex4s );
545 QGL_invalidateExtensionFunc( table.m_glVertex4sv );
546 QGL_invalidateExtensionFunc( table.m_glVertexPointer );
547 QGL_invalidateExtensionFunc( table.m_glViewport );
550 int QGL_Init( OpenGLBinding& table ){
554 qwglGetProcAddress = wglGetProcAddress;
555 #elif defined( XWINDOWS )
556 qglXGetProcAddressARB = (glXGetProcAddressARBProc)dlsym( RTLD_DEFAULT, "glXGetProcAddressARB" );
557 if ( ( qglXQueryExtension == 0 ) || ( qglXQueryExtension(XOpenDisplay(nullptr), 0, 0) != True ) ) {
560 #elif defined (__APPLE__)
562 #error "unsupported platform"
568 int g_qglMajorVersion = 0;
569 int g_qglMinorVersion = 0;
571 // requires a valid gl context
572 void QGL_InitVersion(){
573 #if EXTENSIONS_ENABLED
574 const std::size_t versionSize = 256;
575 char version[versionSize];
576 strncpy( version, reinterpret_cast<const char*>( GlobalOpenGL().m_glGetString( GL_VERSION ) ), versionSize - 1 );
577 version[versionSize - 1] = '\0';
578 char* firstDot = strchr( version, '.' );
579 ASSERT_NOTNULL( firstDot );
581 g_qglMajorVersion = atoi( version );
582 char* secondDot = strchr( firstDot + 1, '.' );
583 if ( secondDot != 0 ) {
586 g_qglMinorVersion = atoi( firstDot + 1 );
588 g_qglMajorVersion = 1;
589 g_qglMinorVersion = 1;
594 inline void extension_not_implemented( const char* extension ){
595 globalErrorStream() << "WARNING: OpenGL driver reports support for " << extension << " but does not implement it\n";
598 float g_maxTextureAnisotropy;
600 float QGL_maxTextureAnisotropy(){
601 return g_maxTextureAnisotropy;
604 void QGL_sharedContextCreated( OpenGLBinding& table ){
607 table.major_version = g_qglMajorVersion;
608 table.minor_version = g_qglMinorVersion;
610 table.m_glAccum = glAccum;
611 table.m_glAlphaFunc = glAlphaFunc;
612 table.m_glAreTexturesResident = glAreTexturesResident;
613 table.m_glArrayElement = glArrayElement;
614 table.m_glBegin = glBegin;
615 table.m_glBindTexture = glBindTexture;
616 table.m_glBitmap = glBitmap;
617 table.m_glBlendFunc = glBlendFunc;
618 table.m_glCallList = glCallList;
619 table.m_glCallLists = glCallLists;
620 table.m_glClear = glClear;
621 table.m_glClearAccum = glClearAccum;
622 table.m_glClearColor = glClearColor;
623 table.m_glClearDepth = glClearDepth;
624 table.m_glClearIndex = glClearIndex;
625 table.m_glClearStencil = glClearStencil;
626 table.m_glClipPlane = glClipPlane;
627 table.m_glColor3b = glColor3b;
628 table.m_glColor3bv = glColor3bv;
629 table.m_glColor3d = glColor3d;
630 table.m_glColor3dv = glColor3dv;
631 table.m_glColor3f = glColor3f;
632 table.m_glColor3fv = glColor3fv;
633 table.m_glColor3i = glColor3i;
634 table.m_glColor3iv = glColor3iv;
635 table.m_glColor3s = glColor3s;
636 table.m_glColor3sv = glColor3sv;
637 table.m_glColor3ub = glColor3ub;
638 table.m_glColor3ubv = glColor3ubv;
639 table.m_glColor3ui = glColor3ui;
640 table.m_glColor3uiv = glColor3uiv;
641 table.m_glColor3us = glColor3us;
642 table.m_glColor3usv = glColor3usv;
643 table.m_glColor4b = glColor4b;
644 table.m_glColor4bv = glColor4bv;
645 table.m_glColor4d = glColor4d;
646 table.m_glColor4dv = glColor4dv;
647 table.m_glColor4f = glColor4f;
648 table.m_glColor4fv = glColor4fv;
649 table.m_glColor4i = glColor4i;
650 table.m_glColor4iv = glColor4iv;
651 table.m_glColor4s = glColor4s;
652 table.m_glColor4sv = glColor4sv;
653 table.m_glColor4ub = glColor4ub;
654 table.m_glColor4ubv = glColor4ubv;
655 table.m_glColor4ui = glColor4ui;
656 table.m_glColor4uiv = glColor4uiv;
657 table.m_glColor4us = glColor4us;
658 table.m_glColor4usv = glColor4usv;
659 table.m_glColorMask = glColorMask;
660 table.m_glColorMaterial = glColorMaterial;
661 table.m_glColorPointer = glColorPointer;
662 table.m_glCopyPixels = glCopyPixels;
663 table.m_glCopyTexImage1D = glCopyTexImage1D;
664 table.m_glCopyTexImage2D = glCopyTexImage2D;
665 table.m_glCopyTexSubImage1D = glCopyTexSubImage1D;
666 table.m_glCopyTexSubImage2D = glCopyTexSubImage2D;
667 table.m_glCullFace = glCullFace;
668 table.m_glDeleteLists = glDeleteLists;
669 table.m_glDeleteTextures = glDeleteTextures;
670 table.m_glDepthFunc = glDepthFunc;
671 table.m_glDepthMask = glDepthMask;
672 table.m_glDepthRange = glDepthRange;
673 table.m_glDisable = glDisable;
674 table.m_glDisableClientState = glDisableClientState;
675 table.m_glDrawArrays = glDrawArrays;
676 table.m_glDrawBuffer = glDrawBuffer;
677 table.m_glDrawElements = glDrawElements;
678 table.m_glDrawPixels = glDrawPixels;
679 table.m_glEdgeFlag = glEdgeFlag;
680 table.m_glEdgeFlagPointer = glEdgeFlagPointer;
681 table.m_glEdgeFlagv = glEdgeFlagv;
682 table.m_glEnable = glEnable;
683 table.m_glEnableClientState = glEnableClientState;
684 table.m_glEnd = glEnd;
685 table.m_glEndList = glEndList;
686 table.m_glEvalCoord1d = glEvalCoord1d;
687 table.m_glEvalCoord1dv = glEvalCoord1dv;
688 table.m_glEvalCoord1f = glEvalCoord1f;
689 table.m_glEvalCoord1fv = glEvalCoord1fv;
690 table.m_glEvalCoord2d = glEvalCoord2d;
691 table.m_glEvalCoord2dv = glEvalCoord2dv;
692 table.m_glEvalCoord2f = glEvalCoord2f;
693 table.m_glEvalCoord2fv = glEvalCoord2fv;
694 table.m_glEvalMesh1 = glEvalMesh1;
695 table.m_glEvalMesh2 = glEvalMesh2;
696 table.m_glEvalPoint1 = glEvalPoint1;
697 table.m_glEvalPoint2 = glEvalPoint2;
698 table.m_glFeedbackBuffer = glFeedbackBuffer;
699 table.m_glFinish = glFinish;
700 table.m_glFlush = glFlush;
701 table.m_glFogf = glFogf;
702 table.m_glFogfv = glFogfv;
703 table.m_glFogi = glFogi;
704 table.m_glFogiv = glFogiv;
705 table.m_glFrontFace = glFrontFace;
706 table.m_glFrustum = glFrustum;
707 table.m_glGenLists = glGenLists;
708 table.m_glGenTextures = glGenTextures;
709 table.m_glGetBooleanv = glGetBooleanv;
710 table.m_glGetClipPlane = glGetClipPlane;
711 table.m_glGetDoublev = glGetDoublev;
712 table.m_glGetError = glGetError;
713 table.m_glGetFloatv = glGetFloatv;
714 table.m_glGetIntegerv = glGetIntegerv;
715 table.m_glGetLightfv = glGetLightfv;
716 table.m_glGetLightiv = glGetLightiv;
717 table.m_glGetMapdv = glGetMapdv;
718 table.m_glGetMapfv = glGetMapfv;
719 table.m_glGetMapiv = glGetMapiv;
720 table.m_glGetMaterialfv = glGetMaterialfv;
721 table.m_glGetMaterialiv = glGetMaterialiv;
722 table.m_glGetPixelMapfv = glGetPixelMapfv;
723 table.m_glGetPixelMapuiv = glGetPixelMapuiv;
724 table.m_glGetPixelMapusv = glGetPixelMapusv;
725 table.m_glGetPointerv = glGetPointerv;
726 table.m_glGetPolygonStipple = glGetPolygonStipple;
727 table.m_glGetString = glGetString;
728 table.m_glGetTexEnvfv = glGetTexEnvfv;
729 table.m_glGetTexEnviv = glGetTexEnviv;
730 table.m_glGetTexGendv = glGetTexGendv;
731 table.m_glGetTexGenfv = glGetTexGenfv;
732 table.m_glGetTexGeniv = glGetTexGeniv;
733 table.m_glGetTexImage = glGetTexImage;
734 table.m_glGetTexLevelParameterfv = glGetTexLevelParameterfv;
735 table.m_glGetTexLevelParameteriv = glGetTexLevelParameteriv;
736 table.m_glGetTexParameterfv = glGetTexParameterfv;
737 table.m_glGetTexParameteriv = glGetTexParameteriv;
738 table.m_glHint = glHint;
739 table.m_glIndexMask = glIndexMask;
740 table.m_glIndexPointer = glIndexPointer;
741 table.m_glIndexd = glIndexd;
742 table.m_glIndexdv = glIndexdv;
743 table.m_glIndexf = glIndexf;
744 table.m_glIndexfv = glIndexfv;
745 table.m_glIndexi = glIndexi;
746 table.m_glIndexiv = glIndexiv;
747 table.m_glIndexs = glIndexs;
748 table.m_glIndexsv = glIndexsv;
749 table.m_glIndexub = glIndexub;
750 table.m_glIndexubv = glIndexubv;
751 table.m_glInitNames = glInitNames;
752 table.m_glInterleavedArrays = glInterleavedArrays;
753 table.m_glIsEnabled = glIsEnabled;
754 table.m_glIsList = glIsList;
755 table.m_glIsTexture = glIsTexture;
756 table.m_glLightModelf = glLightModelf;
757 table.m_glLightModelfv = glLightModelfv;
758 table.m_glLightModeli = glLightModeli;
759 table.m_glLightModeliv = glLightModeliv;
760 table.m_glLightf = glLightf;
761 table.m_glLightfv = glLightfv;
762 table.m_glLighti = glLighti;
763 table.m_glLightiv = glLightiv;
764 table.m_glLineStipple = glLineStipple;
765 table.m_glLineWidth = glLineWidth;
766 table.m_glListBase = glListBase;
767 table.m_glLoadIdentity = glLoadIdentity;
768 table.m_glLoadMatrixd = glLoadMatrixd;
769 table.m_glLoadMatrixf = glLoadMatrixf;
770 table.m_glLoadName = glLoadName;
771 table.m_glLogicOp = glLogicOp;
772 table.m_glMap1d = glMap1d;
773 table.m_glMap1f = glMap1f;
774 table.m_glMap2d = glMap2d;
775 table.m_glMap2f = glMap2f;
776 table.m_glMapGrid1d = glMapGrid1d;
777 table.m_glMapGrid1f = glMapGrid1f;
778 table.m_glMapGrid2d = glMapGrid2d;
779 table.m_glMapGrid2f = glMapGrid2f;
780 table.m_glMaterialf = glMaterialf;
781 table.m_glMaterialfv = glMaterialfv;
782 table.m_glMateriali = glMateriali;
783 table.m_glMaterialiv = glMaterialiv;
784 table.m_glMatrixMode = glMatrixMode;
785 table.m_glMultMatrixd = glMultMatrixd;
786 table.m_glMultMatrixf = glMultMatrixf;
787 table.m_glNewList = glNewList;
788 table.m_glNormal3b = glNormal3b;
789 table.m_glNormal3bv = glNormal3bv;
790 table.m_glNormal3d = glNormal3d;
791 table.m_glNormal3dv = glNormal3dv;
792 table.m_glNormal3f = glNormal3f;
793 table.m_glNormal3fv = glNormal3fv;
794 table.m_glNormal3i = glNormal3i;
795 table.m_glNormal3iv = glNormal3iv;
796 table.m_glNormal3s = glNormal3s;
797 table.m_glNormal3sv = glNormal3sv;
798 table.m_glNormalPointer = glNormalPointer;
799 table.m_glOrtho = glOrtho;
800 table.m_glPassThrough = glPassThrough;
801 table.m_glPixelMapfv = glPixelMapfv;
802 table.m_glPixelMapuiv = glPixelMapuiv;
803 table.m_glPixelMapusv = glPixelMapusv;
804 table.m_glPixelStoref = glPixelStoref;
805 table.m_glPixelStorei = glPixelStorei;
806 table.m_glPixelTransferf = glPixelTransferf;
807 table.m_glPixelTransferi = glPixelTransferi;
808 table.m_glPixelZoom = glPixelZoom;
809 table.m_glPointSize = glPointSize;
810 table.m_glPolygonMode = glPolygonMode;
811 table.m_glPolygonOffset = glPolygonOffset;
812 table.m_glPolygonStipple = glPolygonStipple;
813 table.m_glPopAttrib = glPopAttrib;
814 table.m_glPopClientAttrib = glPopClientAttrib;
815 table.m_glPopMatrix = glPopMatrix;
816 table.m_glPopName = glPopName;
817 table.m_glPrioritizeTextures = glPrioritizeTextures;
818 table.m_glPushAttrib = glPushAttrib;
819 table.m_glPushClientAttrib = glPushClientAttrib;
820 table.m_glPushMatrix = glPushMatrix;
821 table.m_glPushName = glPushName;
822 table.m_glRasterPos2d = glRasterPos2d;
823 table.m_glRasterPos2dv = glRasterPos2dv;
824 table.m_glRasterPos2f = glRasterPos2f;
825 table.m_glRasterPos2fv = glRasterPos2fv;
826 table.m_glRasterPos2i = glRasterPos2i;
827 table.m_glRasterPos2iv = glRasterPos2iv;
828 table.m_glRasterPos2s = glRasterPos2s;
829 table.m_glRasterPos2sv = glRasterPos2sv;
830 table.m_glRasterPos3d = glRasterPos3d;
831 table.m_glRasterPos3dv = glRasterPos3dv;
832 table.m_glRasterPos3f = glRasterPos3f;
833 table.m_glRasterPos3fv = glRasterPos3fv;
834 table.m_glRasterPos3i = glRasterPos3i;
835 table.m_glRasterPos3iv = glRasterPos3iv;
836 table.m_glRasterPos3s = glRasterPos3s;
837 table.m_glRasterPos3sv = glRasterPos3sv;
838 table.m_glRasterPos4d = glRasterPos4d;
839 table.m_glRasterPos4dv = glRasterPos4dv;
840 table.m_glRasterPos4f = glRasterPos4f;
841 table.m_glRasterPos4fv = glRasterPos4fv;
842 table.m_glRasterPos4i = glRasterPos4i;
843 table.m_glRasterPos4iv = glRasterPos4iv;
844 table.m_glRasterPos4s = glRasterPos4s;
845 table.m_glRasterPos4sv = glRasterPos4sv;
846 table.m_glReadBuffer = glReadBuffer;
847 table.m_glReadPixels = glReadPixels;
848 table.m_glRectd = glRectd;
849 table.m_glRectdv = glRectdv;
850 table.m_glRectf = glRectf;
851 table.m_glRectfv = glRectfv;
852 table.m_glRecti = glRecti;
853 table.m_glRectiv = glRectiv;
854 table.m_glRects = glRects;
855 table.m_glRectsv = glRectsv;
856 table.m_glRenderMode = glRenderMode;
857 table.m_glRotated = glRotated;
858 table.m_glRotatef = glRotatef;
859 table.m_glScaled = glScaled;
860 table.m_glScalef = glScalef;
861 table.m_glScissor = glScissor;
862 table.m_glSelectBuffer = glSelectBuffer;
863 table.m_glShadeModel = glShadeModel;
864 table.m_glStencilFunc = glStencilFunc;
865 table.m_glStencilMask = glStencilMask;
866 table.m_glStencilOp = glStencilOp;
867 table.m_glTexCoord1d = glTexCoord1d;
868 table.m_glTexCoord1dv = glTexCoord1dv;
869 table.m_glTexCoord1f = glTexCoord1f;
870 table.m_glTexCoord1fv = glTexCoord1fv;
871 table.m_glTexCoord1i = glTexCoord1i;
872 table.m_glTexCoord1iv = glTexCoord1iv;
873 table.m_glTexCoord1s = glTexCoord1s;
874 table.m_glTexCoord1sv = glTexCoord1sv;
875 table.m_glTexCoord2d = glTexCoord2d;
876 table.m_glTexCoord2dv = glTexCoord2dv;
877 table.m_glTexCoord2f = glTexCoord2f;
878 table.m_glTexCoord2fv = glTexCoord2fv;
879 table.m_glTexCoord2i = glTexCoord2i;
880 table.m_glTexCoord2iv = glTexCoord2iv;
881 table.m_glTexCoord2s = glTexCoord2s;
882 table.m_glTexCoord2sv = glTexCoord2sv;
883 table.m_glTexCoord3d = glTexCoord3d;
884 table.m_glTexCoord3dv = glTexCoord3dv;
885 table.m_glTexCoord3f = glTexCoord3f;
886 table.m_glTexCoord3fv = glTexCoord3fv;
887 table.m_glTexCoord3i = glTexCoord3i;
888 table.m_glTexCoord3iv = glTexCoord3iv;
889 table.m_glTexCoord3s = glTexCoord3s;
890 table.m_glTexCoord3sv = glTexCoord3sv;
891 table.m_glTexCoord4d = glTexCoord4d;
892 table.m_glTexCoord4dv = glTexCoord4dv;
893 table.m_glTexCoord4f = glTexCoord4f;
894 table.m_glTexCoord4fv = glTexCoord4fv;
895 table.m_glTexCoord4i = glTexCoord4i;
896 table.m_glTexCoord4iv = glTexCoord4iv;
897 table.m_glTexCoord4s = glTexCoord4s;
898 table.m_glTexCoord4sv = glTexCoord4sv;
899 table.m_glTexCoordPointer = glTexCoordPointer;
900 table.m_glTexEnvf = glTexEnvf;
901 table.m_glTexEnvfv = glTexEnvfv;
902 table.m_glTexEnvi = glTexEnvi;
903 table.m_glTexEnviv = glTexEnviv;
904 table.m_glTexGend = glTexGend;
905 table.m_glTexGendv = glTexGendv;
906 table.m_glTexGenf = glTexGenf;
907 table.m_glTexGenfv = glTexGenfv;
908 table.m_glTexGeni = glTexGeni;
909 table.m_glTexGeniv = glTexGeniv;
910 table.m_glTexImage1D = glTexImage1D;
911 table.m_glTexImage2D = glTexImage2D;
912 table.m_glTexParameterf = glTexParameterf;
913 table.m_glTexParameterfv = glTexParameterfv;
914 table.m_glTexParameteri = glTexParameteri;
915 table.m_glTexParameteriv = glTexParameteriv;
916 table.m_glTexSubImage1D = glTexSubImage1D;
917 table.m_glTexSubImage2D = glTexSubImage2D;
918 table.m_glTranslated = glTranslated;
919 table.m_glTranslatef = glTranslatef;
920 table.m_glVertex2d = glVertex2d;
921 table.m_glVertex2dv = glVertex2dv;
922 table.m_glVertex2f = glVertex2f;
923 table.m_glVertex2fv = glVertex2fv;
924 table.m_glVertex2i = glVertex2i;
925 table.m_glVertex2iv = glVertex2iv;
926 table.m_glVertex2s = glVertex2s;
927 table.m_glVertex2sv = glVertex2sv;
928 table.m_glVertex3d = glVertex3d;
929 table.m_glVertex3dv = glVertex3dv;
930 table.m_glVertex3f = glVertex3f;
931 table.m_glVertex3fv = glVertex3fv;
932 table.m_glVertex3i = glVertex3i;
933 table.m_glVertex3iv = glVertex3iv;
934 table.m_glVertex3s = glVertex3s;
935 table.m_glVertex3sv = glVertex3sv;
936 table.m_glVertex4d = glVertex4d;
937 table.m_glVertex4dv = glVertex4dv;
938 table.m_glVertex4f = glVertex4f;
939 table.m_glVertex4fv = glVertex4fv;
940 table.m_glVertex4i = glVertex4i;
941 table.m_glVertex4iv = glVertex4iv;
942 table.m_glVertex4s = glVertex4s;
943 table.m_glVertex4sv = glVertex4sv;
944 table.m_glVertexPointer = glVertexPointer;
945 table.m_glViewport = glViewport;
947 if ( QGL_ExtensionSupported( "GL_ARB_multitexture" ) ) {
948 table.support_ARB_multitexture =
949 QGL_constructExtensionFunc( table.m_glActiveTextureARB, "glActiveTextureARB" )
950 && QGL_constructExtensionFunc( table.m_glClientActiveTextureARB, "glClientActiveTextureARB" )
951 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1dARB, "glMultiTexCoord1dARB" )
952 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1dvARB, "glMultiTexCoord1dvARB" )
953 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1fARB, "glMultiTexCoord1fARB" )
954 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1fvARB, "glMultiTexCoord1fvARB" )
955 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1iARB, "glMultiTexCoord1iARB" )
956 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1ivARB, "glMultiTexCoord1ivARB" )
957 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1sARB, "glMultiTexCoord1sARB" )
958 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1svARB, "glMultiTexCoord1svARB" )
959 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2dARB, "glMultiTexCoord2dARB" )
960 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2dvARB, "glMultiTexCoord2dvARB" )
961 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2fARB, "glMultiTexCoord2fARB" )
962 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2fvARB, "glMultiTexCoord2fvARB" )
963 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2iARB, "glMultiTexCoord2iARB" )
964 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2ivARB, "glMultiTexCoord2ivARB" )
965 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2sARB, "glMultiTexCoord2sARB" )
966 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2svARB, "glMultiTexCoord2svARB" )
967 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3dARB, "glMultiTexCoord3dARB" )
968 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3dvARB, "glMultiTexCoord3dvARB" )
969 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3fARB, "glMultiTexCoord3fARB" )
970 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3fvARB, "glMultiTexCoord3fvARB" )
971 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3iARB, "glMultiTexCoord3iARB" )
972 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3ivARB, "glMultiTexCoord3ivARB" )
973 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3sARB, "glMultiTexCoord3sARB" )
974 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3svARB, "glMultiTexCoord3svARB" )
975 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4dARB, "glMultiTexCoord4dARB" )
976 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4dvARB, "glMultiTexCoord4dvARB" )
977 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4fARB, "glMultiTexCoord4fARB" )
978 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4fvARB, "glMultiTexCoord4fvARB" )
979 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4iARB, "glMultiTexCoord4iARB" )
980 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4ivARB, "glMultiTexCoord4ivARB" )
981 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4sARB, "glMultiTexCoord4sARB" )
982 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4svARB, "glMultiTexCoord4svARB" );
984 if ( !table.support_ARB_multitexture ) {
985 extension_not_implemented( "GL_ARB_multitexture" );
990 table.support_ARB_multitexture = false;
993 if ( QGL_ExtensionSupported( "GL_ARB_texture_compression" ) ) {
994 table.support_ARB_texture_compression =
995 QGL_constructExtensionFunc( table.m_glCompressedTexImage3DARB, "glCompressedTexImage3DARB" )
996 && QGL_constructExtensionFunc( table.m_glCompressedTexImage2DARB, "glCompressedTexImage2DARB" )
997 && QGL_constructExtensionFunc( table.m_glCompressedTexImage1DARB, "glCompressedTexImage1DARB" )
998 && QGL_constructExtensionFunc( table.m_glCompressedTexSubImage3DARB, "glCompressedTexSubImage3DARB" )
999 && QGL_constructExtensionFunc( table.m_glCompressedTexSubImage2DARB, "glCompressedTexSubImage2DARB" )
1000 && QGL_constructExtensionFunc( table.m_glCompressedTexSubImage1DARB, "glCompressedTexSubImage1DARB" )
1001 && QGL_constructExtensionFunc( table.m_glGetCompressedTexImageARB, "glGetCompressedTexImageARB" );
1003 if ( !table.support_ARB_texture_compression ) {
1004 extension_not_implemented( "GL_ARB_texture_compression" );
1009 table.support_ARB_texture_compression = false;
1012 table.support_EXT_texture_compression_s3tc = QGL_ExtensionSupported( "GL_EXT_texture_compression_s3tc" );
1015 if ( table.major_version > 1 || table.minor_version >= 2 ) {
1016 table.support_GL_1_2 =
1017 QGL_constructExtensionFunc( table.m_glCopyTexSubImage3D, "glCopyTexSubImage3D" )
1018 && QGL_constructExtensionFunc( table.m_glDrawRangeElements, "glDrawRangeElements" )
1019 && QGL_constructExtensionFunc( table.m_glTexImage3D, "glTexImage3D" )
1020 && QGL_constructExtensionFunc( table.m_glTexSubImage3D, "glTexSubImage3D" );
1022 if ( !table.support_GL_1_2 ) {
1023 extension_not_implemented( "GL_VERSION_1_2" );
1028 table.support_GL_1_2 = false;
1032 if ( table.major_version > 1 || table.minor_version >= 3 ) {
1033 table.support_GL_1_3 =
1034 QGL_constructExtensionFunc( table.m_glActiveTexture, "glActiveTexture" )
1035 && QGL_constructExtensionFunc( table.m_glClientActiveTexture, "glClientActiveTexture" )
1036 && QGL_constructExtensionFunc( table.m_glCompressedTexImage1D, "glCompressedTexImage1D" )
1037 && QGL_constructExtensionFunc( table.m_glCompressedTexImage2D, "glCompressedTexImage2D" )
1038 && QGL_constructExtensionFunc( table.m_glCompressedTexImage3D, "glCompressedTexImage3D" )
1039 && QGL_constructExtensionFunc( table.m_glCompressedTexSubImage1D, "glCompressedTexSubImage1D" )
1040 && QGL_constructExtensionFunc( table.m_glCompressedTexSubImage2D, "glCompressedTexSubImage2D" )
1041 && QGL_constructExtensionFunc( table.m_glCompressedTexSubImage3D, "glCompressedTexSubImage3D" )
1042 && QGL_constructExtensionFunc( table.m_glGetCompressedTexImage, "glGetCompressedTexImage" )
1043 && QGL_constructExtensionFunc( table.m_glLoadTransposeMatrixd, "glLoadTransposeMatrixd" )
1044 && QGL_constructExtensionFunc( table.m_glLoadTransposeMatrixf, "glLoadTransposeMatrixf" )
1045 && QGL_constructExtensionFunc( table.m_glMultTransposeMatrixd, "glMultTransposeMatrixd" )
1046 && QGL_constructExtensionFunc( table.m_glMultTransposeMatrixf, "glMultTransposeMatrixf" )
1047 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1d, "glMultiTexCoord1d" )
1048 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1dv, "glMultiTexCoord1dv" )
1049 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1f, "glMultiTexCoord1f" )
1050 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1fv, "glMultiTexCoord1fv" )
1051 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1i, "glMultiTexCoord1i" )
1052 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1iv, "glMultiTexCoord1iv" )
1053 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1s, "glMultiTexCoord1s" )
1054 && QGL_constructExtensionFunc( table.m_glMultiTexCoord1sv, "glMultiTexCoord1sv" )
1055 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2d, "glMultiTexCoord2d" )
1056 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2dv, "glMultiTexCoord2dv" )
1057 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2f, "glMultiTexCoord2f" )
1058 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2fv, "glMultiTexCoord2fv" )
1059 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2i, "glMultiTexCoord2i" )
1060 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2iv, "glMultiTexCoord2iv" )
1061 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2s, "glMultiTexCoord2s" )
1062 && QGL_constructExtensionFunc( table.m_glMultiTexCoord2sv, "glMultiTexCoord2sv" )
1063 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3d, "glMultiTexCoord3d" )
1064 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3dv, "glMultiTexCoord3dv" )
1065 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3f, "glMultiTexCoord3f" )
1066 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3fv, "glMultiTexCoord3fv" )
1067 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3i, "glMultiTexCoord3i" )
1068 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3iv, "glMultiTexCoord3iv" )
1069 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3s, "glMultiTexCoord3s" )
1070 && QGL_constructExtensionFunc( table.m_glMultiTexCoord3sv, "glMultiTexCoord3sv" )
1071 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4d, "glMultiTexCoord4d" )
1072 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4dv, "glMultiTexCoord4dv" )
1073 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4f, "glMultiTexCoord4f" )
1074 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4fv, "glMultiTexCoord4fv" )
1075 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4i, "glMultiTexCoord4i" )
1076 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4iv, "glMultiTexCoord4iv" )
1077 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4s, "glMultiTexCoord4s" )
1078 && QGL_constructExtensionFunc( table.m_glMultiTexCoord4sv, "glMultiTexCoord4sv" )
1079 && QGL_constructExtensionFunc( table.m_glSampleCoverage, "glSampleCoverage" );
1081 if ( !table.support_GL_1_3 ) {
1082 extension_not_implemented( "GL_VERSION_1_3" );
1087 table.support_GL_1_3 = false;
1091 if ( table.major_version > 1 || table.minor_version >= 4 ) {
1092 table.support_GL_1_4 =
1093 QGL_constructExtensionFunc( table.m_glBlendColor, "glBlendColor" )
1094 && QGL_constructExtensionFunc( table.m_glBlendEquation, "glBlendEquation" )
1095 && QGL_constructExtensionFunc( table.m_glBlendFuncSeparate, "glBlendFuncSeparate" )
1096 && QGL_constructExtensionFunc( table.m_glFogCoordPointer, "glFogCoordPointer" )
1097 && QGL_constructExtensionFunc( table.m_glFogCoordd, "glFogCoordd" )
1098 && QGL_constructExtensionFunc( table.m_glFogCoorddv, "glFogCoorddv" )
1099 && QGL_constructExtensionFunc( table.m_glFogCoordf, "glFogCoordf" )
1100 && QGL_constructExtensionFunc( table.m_glFogCoordfv, "glFogCoordfv" )
1101 && QGL_constructExtensionFunc( table.m_glMultiDrawArrays, "glMultiDrawArrays" )
1102 && QGL_constructExtensionFunc( table.m_glMultiDrawElements, "glMultiDrawElements" )
1103 && QGL_constructExtensionFunc( table.m_glPointParameterf, "glPointParameterf" )
1104 && QGL_constructExtensionFunc( table.m_glPointParameterfv, "glPointParameterfv" )
1105 && QGL_constructExtensionFunc( table.m_glSecondaryColor3b, "glSecondaryColor3b" )
1106 && QGL_constructExtensionFunc( table.m_glSecondaryColor3bv, "glSecondaryColor3bv" )
1107 && QGL_constructExtensionFunc( table.m_glSecondaryColor3d, "glSecondaryColor3d" )
1108 && QGL_constructExtensionFunc( table.m_glSecondaryColor3dv, "glSecondaryColor3dv" )
1109 && QGL_constructExtensionFunc( table.m_glSecondaryColor3f, "glSecondaryColor3f" )
1110 && QGL_constructExtensionFunc( table.m_glSecondaryColor3fv, "glSecondaryColor3fv" )
1111 && QGL_constructExtensionFunc( table.m_glSecondaryColor3i, "glSecondaryColor3i" )
1112 && QGL_constructExtensionFunc( table.m_glSecondaryColor3iv, "glSecondaryColor3iv" )
1113 && QGL_constructExtensionFunc( table.m_glSecondaryColor3s, "glSecondaryColor3s" )
1114 && QGL_constructExtensionFunc( table.m_glSecondaryColor3sv, "glSecondaryColor3sv" )
1115 && QGL_constructExtensionFunc( table.m_glSecondaryColor3ub, "glSecondaryColor3ub" )
1116 && QGL_constructExtensionFunc( table.m_glSecondaryColor3ubv, "glSecondaryColor3ubv" )
1117 && QGL_constructExtensionFunc( table.m_glSecondaryColor3ui, "glSecondaryColor3ui" )
1118 && QGL_constructExtensionFunc( table.m_glSecondaryColor3uiv, "glSecondaryColor3uiv" )
1119 && QGL_constructExtensionFunc( table.m_glSecondaryColor3us, "glSecondaryColor3us" )
1120 && QGL_constructExtensionFunc( table.m_glSecondaryColor3usv, "glSecondaryColor3usv" )
1121 && QGL_constructExtensionFunc( table.m_glSecondaryColorPointer, "glSecondaryColorPointer" )
1122 && QGL_constructExtensionFunc( table.m_glWindowPos2d, "glWindowPos2d" )
1123 && QGL_constructExtensionFunc( table.m_glWindowPos2dv, "glWindowPos2dv" )
1124 && QGL_constructExtensionFunc( table.m_glWindowPos2f, "glWindowPos2f" )
1125 && QGL_constructExtensionFunc( table.m_glWindowPos2fv, "glWindowPos2fv" )
1126 && QGL_constructExtensionFunc( table.m_glWindowPos2i, "glWindowPos2i" )
1127 && QGL_constructExtensionFunc( table.m_glWindowPos2iv, "glWindowPos2iv" )
1128 && QGL_constructExtensionFunc( table.m_glWindowPos2s, "glWindowPos2s" )
1129 && QGL_constructExtensionFunc( table.m_glWindowPos2sv, "glWindowPos2sv" )
1130 && QGL_constructExtensionFunc( table.m_glWindowPos3d, "glWindowPos3d" )
1131 && QGL_constructExtensionFunc( table.m_glWindowPos3dv, "glWindowPos3dv" )
1132 && QGL_constructExtensionFunc( table.m_glWindowPos3f, "glWindowPos3f" )
1133 && QGL_constructExtensionFunc( table.m_glWindowPos3fv, "glWindowPos3fv" )
1134 && QGL_constructExtensionFunc( table.m_glWindowPos3i, "glWindowPos3i" )
1135 && QGL_constructExtensionFunc( table.m_glWindowPos3iv, "glWindowPos3iv" )
1136 && QGL_constructExtensionFunc( table.m_glWindowPos3s, "glWindowPos3s" )
1137 && QGL_constructExtensionFunc( table.m_glWindowPos3sv, "glWindowPos3sv" );
1139 if ( !table.support_GL_1_4 ) {
1140 extension_not_implemented( "GL_VERSION_1_4" );
1145 table.support_GL_1_4 = false;
1149 if ( table.major_version > 1 || table.minor_version >= 5 ) {
1150 table.support_GL_1_5 =
1151 QGL_constructExtensionFunc( table.m_glBeginQuery, "glBeginQuery" )
1152 && QGL_constructExtensionFunc( table.m_glBindBuffer, "glBindBuffer" )
1153 && QGL_constructExtensionFunc( table.m_glBufferData, "glBufferData" )
1154 && QGL_constructExtensionFunc( table.m_glBufferSubData, "glBufferSubData" )
1155 && QGL_constructExtensionFunc( table.m_glDeleteBuffers, "glDeleteBuffers" )
1156 && QGL_constructExtensionFunc( table.m_glDeleteQueries, "glDeleteQueries" )
1157 && QGL_constructExtensionFunc( table.m_glEndQuery, "glEndQuery" )
1158 && QGL_constructExtensionFunc( table.m_glGenBuffers, "glGenBuffers" )
1159 && QGL_constructExtensionFunc( table.m_glGenQueries, "glGenQueries" )
1160 && QGL_constructExtensionFunc( table.m_glGetBufferParameteriv, "glGetBufferParameteriv" )
1161 && QGL_constructExtensionFunc( table.m_glGetBufferPointerv, "glGetBufferPointerv" )
1162 && QGL_constructExtensionFunc( table.m_glGetBufferSubData, "glGetBufferSubData" )
1163 && QGL_constructExtensionFunc( table.m_glGetQueryObjectiv, "glGetQueryObjectiv" )
1164 && QGL_constructExtensionFunc( table.m_glGetQueryObjectuiv, "glGetQueryObjectuiv" )
1165 && QGL_constructExtensionFunc( table.m_glGetQueryiv, "glGetQueryiv" )
1166 && QGL_constructExtensionFunc( table.m_glIsBuffer, "glIsBuffer" )
1167 && QGL_constructExtensionFunc( table.m_glIsQuery, "glIsQuery" )
1168 && QGL_constructExtensionFunc( table.m_glMapBuffer, "glMapBuffer" )
1169 && QGL_constructExtensionFunc( table.m_glUnmapBuffer, "glUnmapBuffer" );
1171 if ( !table.support_GL_1_5 ) {
1172 extension_not_implemented( "GL_VERSION_1_5" );
1177 table.support_GL_1_5 = false;
1181 if ( QGL_ExtensionSupported( "GL_ARB_vertex_program" ) ) {
1182 table.support_ARB_vertex_program =
1183 QGL_constructExtensionFunc( table.m_glVertexAttrib1sARB, "glVertexAttrib1sARB" )
1184 && QGL_constructExtensionFunc( table.m_glVertexAttrib1fARB, "glVertexAttrib1fARB" )
1185 && QGL_constructExtensionFunc( table.m_glVertexAttrib1dARB, "glVertexAttrib1dARB" )
1186 && QGL_constructExtensionFunc( table.m_glVertexAttrib2sARB, "glVertexAttrib2sARB" )
1187 && QGL_constructExtensionFunc( table.m_glVertexAttrib2fARB, "glVertexAttrib2fARB" )
1188 && QGL_constructExtensionFunc( table.m_glVertexAttrib2dARB, "glVertexAttrib2dARB" )
1189 && QGL_constructExtensionFunc( table.m_glVertexAttrib3sARB, "glVertexAttrib3sARB" )
1190 && QGL_constructExtensionFunc( table.m_glVertexAttrib3fARB, "glVertexAttrib3fARB" )
1191 && QGL_constructExtensionFunc( table.m_glVertexAttrib3dARB, "glVertexAttrib3dARB" )
1192 && QGL_constructExtensionFunc( table.m_glVertexAttrib4sARB, "glVertexAttrib4sARB" )
1193 && QGL_constructExtensionFunc( table.m_glVertexAttrib4fARB, "glVertexAttrib4fARB" )
1194 && QGL_constructExtensionFunc( table.m_glVertexAttrib4dARB, "glVertexAttrib4dARB" )
1195 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NubARB, "glVertexAttrib4NubARB" )
1196 && QGL_constructExtensionFunc( table.m_glVertexAttrib1svARB, "glVertexAttrib1svARB" )
1197 && QGL_constructExtensionFunc( table.m_glVertexAttrib1fvARB, "glVertexAttrib1fvARB" )
1198 && QGL_constructExtensionFunc( table.m_glVertexAttrib1dvARB, "glVertexAttrib1dvARB" )
1199 && QGL_constructExtensionFunc( table.m_glVertexAttrib2svARB, "glVertexAttrib2svARB" )
1200 && QGL_constructExtensionFunc( table.m_glVertexAttrib2fvARB, "glVertexAttrib2fvARB" )
1201 && QGL_constructExtensionFunc( table.m_glVertexAttrib2dvARB, "glVertexAttrib2dvARB" )
1202 && QGL_constructExtensionFunc( table.m_glVertexAttrib3svARB, "glVertexAttrib3svARB" )
1203 && QGL_constructExtensionFunc( table.m_glVertexAttrib3fvARB, "glVertexAttrib3fvARB" )
1204 && QGL_constructExtensionFunc( table.m_glVertexAttrib3dvARB, "glVertexAttrib3dvARB" )
1205 && QGL_constructExtensionFunc( table.m_glVertexAttrib4bvARB, "glVertexAttrib4bvARB" )
1206 && QGL_constructExtensionFunc( table.m_glVertexAttrib4svARB, "glVertexAttrib4svARB" )
1207 && QGL_constructExtensionFunc( table.m_glVertexAttrib4ivARB, "glVertexAttrib4ivARB" )
1208 && QGL_constructExtensionFunc( table.m_glVertexAttrib4ubvARB, "glVertexAttrib4ubvARB" )
1209 && QGL_constructExtensionFunc( table.m_glVertexAttrib4usvARB, "glVertexAttrib4usvARB" )
1210 && QGL_constructExtensionFunc( table.m_glVertexAttrib4uivARB, "glVertexAttrib4uivARB" )
1211 && QGL_constructExtensionFunc( table.m_glVertexAttrib4fvARB, "glVertexAttrib4fvARB" )
1212 && QGL_constructExtensionFunc( table.m_glVertexAttrib4dvARB, "glVertexAttrib4dvARB" )
1213 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NbvARB, "glVertexAttrib4NbvARB" )
1214 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NsvARB, "glVertexAttrib4NsvARB" )
1215 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NivARB, "glVertexAttrib4NivARB" )
1216 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NubvARB, "glVertexAttrib4NubvARB" )
1217 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NusvARB, "glVertexAttrib4NusvARB" )
1218 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NuivARB, "glVertexAttrib4NuivARB" )
1219 && QGL_constructExtensionFunc( table.m_glVertexAttribPointerARB, "glVertexAttribPointerARB" )
1220 && QGL_constructExtensionFunc( table.m_glEnableVertexAttribArrayARB, "glEnableVertexAttribArrayARB" )
1221 && QGL_constructExtensionFunc( table.m_glDisableVertexAttribArrayARB, "glDisableVertexAttribArrayARB" )
1222 && QGL_constructExtensionFunc( table.m_glProgramStringARB, "glProgramStringARB" )
1223 && QGL_constructExtensionFunc( table.m_glBindProgramARB, "glBindProgramARB" )
1224 && QGL_constructExtensionFunc( table.m_glDeleteProgramsARB, "glDeleteProgramsARB" )
1225 && QGL_constructExtensionFunc( table.m_glGenProgramsARB, "glGenProgramsARB" )
1226 && QGL_constructExtensionFunc( table.m_glProgramEnvParameter4dARB, "glProgramEnvParameter4dARB" )
1227 && QGL_constructExtensionFunc( table.m_glProgramEnvParameter4dvARB, "glProgramEnvParameter4dvARB" )
1228 && QGL_constructExtensionFunc( table.m_glProgramEnvParameter4fARB, "glProgramEnvParameter4fARB" )
1229 && QGL_constructExtensionFunc( table.m_glProgramEnvParameter4fvARB, "glProgramEnvParameter4fvARB" )
1230 && QGL_constructExtensionFunc( table.m_glProgramLocalParameter4dARB, "glProgramLocalParameter4dARB" )
1231 && QGL_constructExtensionFunc( table.m_glProgramLocalParameter4dvARB, "glProgramLocalParameter4dvARB" )
1232 && QGL_constructExtensionFunc( table.m_glProgramLocalParameter4fARB, "glProgramLocalParameter4fARB" )
1233 && QGL_constructExtensionFunc( table.m_glProgramLocalParameter4fvARB, "glProgramLocalParameter4fvARB" )
1234 && QGL_constructExtensionFunc( table.m_glGetProgramEnvParameterdvARB, "glGetProgramEnvParameterdvARB" )
1235 && QGL_constructExtensionFunc( table.m_glGetProgramEnvParameterfvARB, "glGetProgramEnvParameterfvARB" )
1236 && QGL_constructExtensionFunc( table.m_glGetProgramLocalParameterdvARB, "glGetProgramLocalParameterdvARB" )
1237 && QGL_constructExtensionFunc( table.m_glGetProgramLocalParameterfvARB, "glGetProgramLocalParameterfvARB" )
1238 && QGL_constructExtensionFunc( table.m_glGetProgramivARB, "glGetProgramivARB" )
1239 && QGL_constructExtensionFunc( table.m_glGetProgramStringARB, "glGetProgramStringARB" )
1240 && QGL_constructExtensionFunc( table.m_glGetVertexAttribdvARB, "glGetVertexAttribdvARB" )
1241 && QGL_constructExtensionFunc( table.m_glGetVertexAttribfvARB, "glGetVertexAttribfvARB" )
1242 && QGL_constructExtensionFunc( table.m_glGetVertexAttribivARB, "glGetVertexAttribivARB" )
1243 && QGL_constructExtensionFunc( table.m_glGetVertexAttribPointervARB, "glGetVertexAttribPointervARB" )
1244 && QGL_constructExtensionFunc( table.m_glIsProgramARB, "glIsProgramARB" );
1246 if ( !table.support_ARB_vertex_program ) {
1247 extension_not_implemented( "GL_ARB_vertex_program" );
1252 table.support_ARB_vertex_program = false;
1256 table.support_ARB_fragment_program = QGL_ExtensionSupported( "GL_ARB_fragment_program" );
1258 if ( QGL_ExtensionSupported( "GL_ARB_shader_objects" ) ) {
1259 table.support_ARB_shader_objects =
1260 QGL_constructExtensionFunc( table.m_glDeleteObjectARB, "glDeleteObjectARB" )
1261 && QGL_constructExtensionFunc( table.m_glGetHandleARB, "glGetHandleARB" )
1262 && QGL_constructExtensionFunc( table.m_glDetachObjectARB, "glDetachObjectARB" )
1263 && QGL_constructExtensionFunc( table.m_glCreateShaderObjectARB, "glCreateShaderObjectARB" )
1264 && QGL_constructExtensionFunc( table.m_glShaderSourceARB, "glShaderSourceARB" )
1265 && QGL_constructExtensionFunc( table.m_glCompileShaderARB, "glCompileShaderARB" )
1266 && QGL_constructExtensionFunc( table.m_glCreateProgramObjectARB, "glCreateProgramObjectARB" )
1267 && QGL_constructExtensionFunc( table.m_glAttachObjectARB, "glAttachObjectARB" )
1268 && QGL_constructExtensionFunc( table.m_glLinkProgramARB, "glLinkProgramARB" )
1269 && QGL_constructExtensionFunc( table.m_glUseProgramObjectARB, "glUseProgramObjectARB" )
1270 && QGL_constructExtensionFunc( table.m_glValidateProgramARB, "glValidateProgramARB" )
1271 && QGL_constructExtensionFunc( table.m_glUniform1fARB, "glUniform1fARB" )
1272 && QGL_constructExtensionFunc( table.m_glUniform2fARB, "glUniform2fARB" )
1273 && QGL_constructExtensionFunc( table.m_glUniform3fARB, "glUniform3fARB" )
1274 && QGL_constructExtensionFunc( table.m_glUniform4fARB, "glUniform4fARB" )
1275 && QGL_constructExtensionFunc( table.m_glUniform1iARB, "glUniform1iARB" )
1276 && QGL_constructExtensionFunc( table.m_glUniform2iARB, "glUniform2iARB" )
1277 && QGL_constructExtensionFunc( table.m_glUniform3iARB, "glUniform3iARB" )
1278 && QGL_constructExtensionFunc( table.m_glUniform4iARB, "glUniform4iARB" )
1279 && QGL_constructExtensionFunc( table.m_glUniform1fvARB, "glUniform1fvARB" )
1280 && QGL_constructExtensionFunc( table.m_glUniform2fvARB, "glUniform2fvARB" )
1281 && QGL_constructExtensionFunc( table.m_glUniform3fvARB, "glUniform3fvARB" )
1282 && QGL_constructExtensionFunc( table.m_glUniform4fvARB, "glUniform4fvARB" )
1283 && QGL_constructExtensionFunc( table.m_glUniform1ivARB, "glUniform1ivARB" )
1284 && QGL_constructExtensionFunc( table.m_glUniform2ivARB, "glUniform2ivARB" )
1285 && QGL_constructExtensionFunc( table.m_glUniform3ivARB, "glUniform3ivARB" )
1286 && QGL_constructExtensionFunc( table.m_glUniform4ivARB, "glUniform4ivARB" )
1287 && QGL_constructExtensionFunc( table.m_glUniformMatrix2fvARB, "glUniformMatrix2fvARB" )
1288 && QGL_constructExtensionFunc( table.m_glUniformMatrix3fvARB, "glUniformMatrix3fvARB" )
1289 && QGL_constructExtensionFunc( table.m_glUniformMatrix4fvARB, "glUniformMatrix4fvARB" )
1290 && QGL_constructExtensionFunc( table.m_glGetObjectParameterfvARB, "glGetObjectParameterfvARB" )
1291 && QGL_constructExtensionFunc( table.m_glGetObjectParameterivARB, "glGetObjectParameterivARB" )
1292 && QGL_constructExtensionFunc( table.m_glGetInfoLogARB, "glGetInfoLogARB" )
1293 && QGL_constructExtensionFunc( table.m_glGetAttachedObjectsARB, "glGetAttachedObjectsARB" )
1294 && QGL_constructExtensionFunc( table.m_glGetUniformLocationARB, "glGetUniformLocationARB" )
1295 && QGL_constructExtensionFunc( table.m_glGetActiveUniformARB, "glGetActiveUniformARB" )
1296 && QGL_constructExtensionFunc( table.m_glGetUniformfvARB, "glGetUniformfvARB" )
1297 && QGL_constructExtensionFunc( table.m_glGetUniformivARB, "glGetUniformivARB" )
1298 && QGL_constructExtensionFunc( table.m_glGetShaderSourceARB, "glGetShaderSourceARB" );
1300 if ( !table.support_ARB_shader_objects ) {
1301 extension_not_implemented( "GL_ARB_shader_objects" );
1306 table.support_ARB_shader_objects = false;
1309 if ( QGL_ExtensionSupported( "GL_ARB_vertex_shader" ) ) {
1310 table.support_ARB_vertex_shader =
1311 QGL_constructExtensionFunc( table.m_glVertexAttrib1fARB, "glVertexAttrib1fARB" )
1312 && QGL_constructExtensionFunc( table.m_glVertexAttrib1sARB, "glVertexAttrib1sARB" )
1313 && QGL_constructExtensionFunc( table.m_glVertexAttrib1dARB, "glVertexAttrib1dARB" )
1314 && QGL_constructExtensionFunc( table.m_glVertexAttrib2fARB, "glVertexAttrib2fARB" )
1315 && QGL_constructExtensionFunc( table.m_glVertexAttrib2sARB, "glVertexAttrib2sARB" )
1316 && QGL_constructExtensionFunc( table.m_glVertexAttrib2dARB, "glVertexAttrib2dARB" )
1317 && QGL_constructExtensionFunc( table.m_glVertexAttrib3fARB, "glVertexAttrib3fARB" )
1318 && QGL_constructExtensionFunc( table.m_glVertexAttrib3sARB, "glVertexAttrib3sARB" )
1319 && QGL_constructExtensionFunc( table.m_glVertexAttrib3dARB, "glVertexAttrib3dARB" )
1320 && QGL_constructExtensionFunc( table.m_glVertexAttrib4fARB, "glVertexAttrib4fARB" )
1321 && QGL_constructExtensionFunc( table.m_glVertexAttrib4sARB, "glVertexAttrib4sARB" )
1322 && QGL_constructExtensionFunc( table.m_glVertexAttrib4dARB, "glVertexAttrib4dARB" )
1323 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NubARB, "glVertexAttrib4NubARB" )
1324 && QGL_constructExtensionFunc( table.m_glVertexAttrib1fvARB, "glVertexAttrib1fvARB" )
1325 && QGL_constructExtensionFunc( table.m_glVertexAttrib1svARB, "glVertexAttrib1svARB" )
1326 && QGL_constructExtensionFunc( table.m_glVertexAttrib1dvARB, "glVertexAttrib1dvARB" )
1327 && QGL_constructExtensionFunc( table.m_glVertexAttrib2fvARB, "glVertexAttrib2fvARB" )
1328 && QGL_constructExtensionFunc( table.m_glVertexAttrib2svARB, "glVertexAttrib2svARB" )
1329 && QGL_constructExtensionFunc( table.m_glVertexAttrib2dvARB, "glVertexAttrib2dvARB" )
1330 && QGL_constructExtensionFunc( table.m_glVertexAttrib3fvARB, "glVertexAttrib3fvARB" )
1331 && QGL_constructExtensionFunc( table.m_glVertexAttrib3svARB, "glVertexAttrib3svARB" )
1332 && QGL_constructExtensionFunc( table.m_glVertexAttrib3dvARB, "glVertexAttrib3dvARB" )
1333 && QGL_constructExtensionFunc( table.m_glVertexAttrib4fvARB, "glVertexAttrib4fvARB" )
1334 && QGL_constructExtensionFunc( table.m_glVertexAttrib4svARB, "glVertexAttrib4svARB" )
1335 && QGL_constructExtensionFunc( table.m_glVertexAttrib4dvARB, "glVertexAttrib4dvARB" )
1336 && QGL_constructExtensionFunc( table.m_glVertexAttrib4ivARB, "glVertexAttrib4ivARB" )
1337 && QGL_constructExtensionFunc( table.m_glVertexAttrib4bvARB, "glVertexAttrib4bvARB" )
1338 && QGL_constructExtensionFunc( table.m_glVertexAttrib4ubvARB, "glVertexAttrib4ubvARB" )
1339 && QGL_constructExtensionFunc( table.m_glVertexAttrib4usvARB, "glVertexAttrib4usvARB" )
1340 && QGL_constructExtensionFunc( table.m_glVertexAttrib4uivARB, "glVertexAttrib4uivARB" )
1341 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NbvARB, "glVertexAttrib4NbvARB" )
1342 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NsvARB, "glVertexAttrib4NsvARB" )
1343 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NivARB, "glVertexAttrib4NivARB" )
1344 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NubvARB, "glVertexAttrib4NubvARB" )
1345 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NusvARB, "glVertexAttrib4NusvARB" )
1346 && QGL_constructExtensionFunc( table.m_glVertexAttrib4NuivARB, "glVertexAttrib4NuivARB" )
1347 && QGL_constructExtensionFunc( table.m_glVertexAttribPointerARB, "glVertexAttribPointerARB" )
1348 && QGL_constructExtensionFunc( table.m_glEnableVertexAttribArrayARB, "glEnableVertexAttribArrayARB" )
1349 && QGL_constructExtensionFunc( table.m_glDisableVertexAttribArrayARB, "glDisableVertexAttribArrayARB" )
1350 && QGL_constructExtensionFunc( table.m_glGetVertexAttribdvARB, "glGetVertexAttribdvARB" )
1351 && QGL_constructExtensionFunc( table.m_glGetVertexAttribfvARB, "glGetVertexAttribfvARB" )
1352 && QGL_constructExtensionFunc( table.m_glGetVertexAttribivARB, "glGetVertexAttribivARB" )
1353 && QGL_constructExtensionFunc( table.m_glGetVertexAttribPointervARB, "glGetVertexAttribPointervARB" )
1354 && QGL_constructExtensionFunc( table.m_glBindAttribLocationARB, "glBindAttribLocationARB" )
1355 && QGL_constructExtensionFunc( table.m_glGetActiveAttribARB, "glGetActiveAttribARB" )
1356 && QGL_constructExtensionFunc( table.m_glGetAttribLocationARB, "glGetAttribLocationARB" );
1358 if ( !table.support_ARB_vertex_shader ) {
1359 extension_not_implemented( "GL_ARB_vertex_shader" );
1364 table.support_ARB_vertex_shader = false;
1367 if ( QGL_ExtensionSupported( "GL_NV_vertex_program2" ) ) {
1368 table.support_NV_vertex_program2 =
1369 QGL_constructExtensionFunc( table.m_glAreProgramsResidentNV, "glAreProgramsResidentNV" )
1370 && QGL_constructExtensionFunc( table.m_glBindProgramNV, "glBindProgramNV" )
1371 && QGL_constructExtensionFunc( table.m_glDeleteProgramsNV, "glDeleteProgramsNV" )
1372 && QGL_constructExtensionFunc( table.m_glExecuteProgramNV, "glExecuteProgramNV" )
1373 && QGL_constructExtensionFunc( table.m_glGenProgramsNV, "glGenProgramsNV" )
1374 && QGL_constructExtensionFunc( table.m_glGetProgramParameterdvNV, "glGetProgramParameterdvNV" )
1375 && QGL_constructExtensionFunc( table.m_glGetProgramParameterfvNV, "glGetProgramParameterfvNV" )
1376 && QGL_constructExtensionFunc( table.m_glGetProgramivNV, "glGetProgramivNV" )
1377 && QGL_constructExtensionFunc( table.m_glGetProgramStringNV, "glGetProgramStringNV" )
1378 && QGL_constructExtensionFunc( table.m_glGetTrackMatrixivNV, "glGetTrackMatrixivNV" )
1379 && QGL_constructExtensionFunc( table.m_glGetVertexAttribdvNV, "glGetVertexAttribdvNV" )
1380 && QGL_constructExtensionFunc( table.m_glGetVertexAttribfvNV, "glGetVertexAttribfvNV" )
1381 && QGL_constructExtensionFunc( table.m_glGetVertexAttribivNV, "glGetVertexAttribivNV" )
1382 && QGL_constructExtensionFunc( table.m_glGetVertexAttribPointervNV, "glGetVertexAttribPointervNV" )
1383 && QGL_constructExtensionFunc( table.m_glIsProgramNV, "glIsProgramNV" )
1384 && QGL_constructExtensionFunc( table.m_glLoadProgramNV, "glLoadProgramNV" )
1385 && QGL_constructExtensionFunc( table.m_glProgramParameter4fNV, "glProgramParameter4fNV" )
1386 && QGL_constructExtensionFunc( table.m_glProgramParameter4fvNV, "glProgramParameter4fvNV" )
1387 && QGL_constructExtensionFunc( table.m_glProgramParameters4fvNV, "glProgramParameters4fvNV" )
1388 && QGL_constructExtensionFunc( table.m_glRequestResidentProgramsNV, "glRequestResidentProgramsNV" )
1389 && QGL_constructExtensionFunc( table.m_glTrackMatrixNV, "glTrackMatrixNV" )
1390 && QGL_constructExtensionFunc( table.m_glVertexAttribPointerNV, "glVertexAttribPointerNV" )
1391 && QGL_constructExtensionFunc( table.m_glVertexAttrib1fNV, "glVertexAttrib1fNV" )
1392 && QGL_constructExtensionFunc( table.m_glVertexAttrib1fvNV, "glVertexAttrib1fvNV" )
1393 && QGL_constructExtensionFunc( table.m_glVertexAttrib2fNV, "glVertexAttrib2fNV" )
1394 && QGL_constructExtensionFunc( table.m_glVertexAttrib2fvNV, "glVertexAttrib2fvNV" )
1395 && QGL_constructExtensionFunc( table.m_glVertexAttrib3fNV, "glVertexAttrib3fNV" )
1396 && QGL_constructExtensionFunc( table.m_glVertexAttrib3fvNV, "glVertexAttrib3fvNV" )
1397 && QGL_constructExtensionFunc( table.m_glVertexAttrib4fNV, "glVertexAttrib4fNV" )
1398 && QGL_constructExtensionFunc( table.m_glVertexAttrib4fvNV, "glVertexAttrib4fvNV" )
1399 && QGL_constructExtensionFunc( table.m_glVertexAttribs1fvNV, "glVertexAttribs1fvNV" )
1400 && QGL_constructExtensionFunc( table.m_glVertexAttribs2fvNV, "glVertexAttribs2fvNV" )
1401 && QGL_constructExtensionFunc( table.m_glVertexAttribs3fvNV, "glVertexAttribs3fvNV" )
1402 && QGL_constructExtensionFunc( table.m_glVertexAttribs4fvNV, "glVertexAttribs4fvNV" );
1404 if ( !table.support_NV_vertex_program2 ) {
1405 extension_not_implemented( "GL_NV_vertex_program2" );
1410 table.support_NV_vertex_program2 = false;
1411 QGL_invalidateExtensionFunc( table.m_glAreProgramsResidentNV );
1412 QGL_invalidateExtensionFunc( table.m_glBindProgramNV );
1413 QGL_invalidateExtensionFunc( table.m_glDeleteProgramsNV );
1414 QGL_invalidateExtensionFunc( table.m_glExecuteProgramNV );
1415 QGL_invalidateExtensionFunc( table.m_glGenProgramsNV );
1416 QGL_invalidateExtensionFunc( table.m_glGetProgramParameterdvNV );
1417 QGL_invalidateExtensionFunc( table.m_glGetProgramParameterfvNV );
1418 QGL_invalidateExtensionFunc( table.m_glGetProgramivNV );
1419 QGL_invalidateExtensionFunc( table.m_glGetProgramStringNV );
1420 QGL_invalidateExtensionFunc( table.m_glGetTrackMatrixivNV );
1421 QGL_invalidateExtensionFunc( table.m_glGetVertexAttribdvNV );
1422 QGL_invalidateExtensionFunc( table.m_glGetVertexAttribfvNV );
1423 QGL_invalidateExtensionFunc( table.m_glGetVertexAttribivNV );
1424 QGL_invalidateExtensionFunc( table.m_glGetVertexAttribPointervNV );
1425 QGL_invalidateExtensionFunc( table.m_glIsProgramNV );
1426 QGL_invalidateExtensionFunc( table.m_glLoadProgramNV );
1427 QGL_invalidateExtensionFunc( table.m_glProgramParameter4fNV );
1428 QGL_invalidateExtensionFunc( table.m_glProgramParameter4fvNV );
1429 QGL_invalidateExtensionFunc( table.m_glProgramParameters4fvNV );
1430 QGL_invalidateExtensionFunc( table.m_glRequestResidentProgramsNV );
1431 QGL_invalidateExtensionFunc( table.m_glTrackMatrixNV );
1432 QGL_invalidateExtensionFunc( table.m_glVertexAttribPointerNV );
1433 QGL_invalidateExtensionFunc( table.m_glVertexAttrib1fNV );
1434 QGL_invalidateExtensionFunc( table.m_glVertexAttrib1fvNV );
1435 QGL_invalidateExtensionFunc( table.m_glVertexAttrib2fNV );
1436 QGL_invalidateExtensionFunc( table.m_glVertexAttrib2fvNV );
1437 QGL_invalidateExtensionFunc( table.m_glVertexAttrib3fNV );
1438 QGL_invalidateExtensionFunc( table.m_glVertexAttrib3fvNV );
1439 QGL_invalidateExtensionFunc( table.m_glVertexAttrib4fNV );
1440 QGL_invalidateExtensionFunc( table.m_glVertexAttrib4fvNV );
1441 QGL_invalidateExtensionFunc( table.m_glVertexAttribs1fvNV );
1442 QGL_invalidateExtensionFunc( table.m_glVertexAttribs2fvNV );
1443 QGL_invalidateExtensionFunc( table.m_glVertexAttribs3fvNV );
1444 QGL_invalidateExtensionFunc( table.m_glVertexAttribs4fvNV );
1447 if ( QGL_ExtensionSupported( "GL_NV_fragment_program" ) ) {
1448 table.support_NV_fragment_program =
1449 QGL_constructExtensionFunc( table.m_glProgramNamedParameter4fNV, "glProgramNamedParameter4fNV" )
1450 && QGL_constructExtensionFunc( table.m_glProgramNamedParameter4fvNV, "glProgramNamedParameter4fvNV" )
1451 && QGL_constructExtensionFunc( table.m_glGetProgramNamedParameterfvNV, "glGetProgramNamedParameterfvNV" );
1453 if ( !table.support_NV_fragment_program ) {
1454 extension_not_implemented( "GL_NV_fragment_program" );
1459 table.support_NV_fragment_program = false;
1462 table.support_ARB_fragment_shader = QGL_ExtensionSupported( "GL_ARB_fragment_shader" );
1463 table.support_ARB_shading_language_100 = QGL_ExtensionSupported( "GL_ARB_shading_language_100" );
1465 if ( QGL_ExtensionSupported( "GL_EXT_texture_filter_anisotropic" ) ) {
1466 glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &g_maxTextureAnisotropy );
1467 globalOutputStream() << "Anisotropic filtering possible (max " << g_maxTextureAnisotropy << "x)\n";
1471 globalOutputStream() << "No Anisotropic filtering available\n";
1472 g_maxTextureAnisotropy = 0;
1476 void QGL_sharedContextDestroyed( OpenGLBinding& table ){
1481 void QGL_assertNoErrors( const char *file, int line ){
1482 GLenum error = GlobalOpenGL().m_glGetError();
1483 while ( error != GL_NO_ERROR )
1485 const char* errorString = reinterpret_cast<const char*>( qgluErrorString( error ) );
1486 if ( error == GL_OUT_OF_MEMORY ) {
1487 ERROR_MESSAGE( "OpenGL out of memory error at " << file << ":" << line << ": " << errorString );
1491 ERROR_MESSAGE( "OpenGL error at " << file << ":" << line << ": " << errorString );
1493 error = GlobalOpenGL().m_glGetError();
1500 OpenGLBinding m_qgl;
1502 typedef OpenGLBinding Type;
1503 STRING_CONSTANT( Name, "*" );
1508 m_qgl.assertNoErrors = &QGL_assertNoErrors;
1511 QGL_Shutdown( m_qgl );
1513 OpenGLBinding* getTable(){
1518 #include "modulesystem/singletonmodule.h"
1519 #include "modulesystem/moduleregistry.h"
1521 typedef SingletonModule<QglAPI> QglModule;
1522 typedef Static<QglModule> StaticQglModule;
1523 StaticRegisterModule staticRegisterQgl( StaticQglModule::instance() );