1 /*
   2  * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #ifndef OGLFuncs_h_Included
  27 #define OGLFuncs_h_Included
  28 
  29 #ifdef MACOSX
  30 #include <dlfcn.h>
  31 #endif
  32 #include "jni.h"
  33 #include "J2D_GL/gl.h"
  34 #include "J2D_GL/glext.h"
  35 #include "OGLFuncMacros.h"
  36 #include "OGLFuncs_md.h"
  37 #include "Trace.h"
  38 
  39 jboolean OGLFuncs_OpenLibrary();
  40 void     OGLFuncs_CloseLibrary();
  41 jboolean OGLFuncs_InitPlatformFuncs();
  42 jboolean OGLFuncs_InitBaseFuncs();
  43 jboolean OGLFuncs_InitExtFuncs();
  44 
  45 /**
  46  * Core OpenGL 1.1 function typedefs
  47  */
  48 typedef void (GLAPIENTRY *glAlphaFuncType)(GLenum func, GLclampf ref);
  49 typedef GLboolean (GLAPIENTRY *glAreTexturesResidentType)(GLsizei n, const GLuint *textures, GLboolean *residences);
  50 typedef void (GLAPIENTRY *glBeginType)(GLenum mode);
  51 typedef void (GLAPIENTRY *glBindTextureType)(GLenum target, GLuint texture);
  52 typedef void (GLAPIENTRY *glBitmapType)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
  53 typedef void (GLAPIENTRY *glBlendFuncType)(GLenum sfactor, GLenum dfactor);
  54 typedef void (GLAPIENTRY *glClearType)(GLbitfield mask);
  55 typedef void (GLAPIENTRY *glClearColorType)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
  56 typedef void (GLAPIENTRY *glClearDepthType)(GLclampd depth);
  57 typedef void (GLAPIENTRY *glColor3ubType)(GLubyte red, GLubyte green, GLubyte blue);
  58 typedef void (GLAPIENTRY *glColor4fType)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
  59 typedef void (GLAPIENTRY *glColor4ubType)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
  60 typedef void (GLAPIENTRY *glColorMaskType)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
  61 typedef void (GLAPIENTRY *glColorPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
  62 typedef void (GLAPIENTRY *glCopyPixelsType)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
  63 typedef void (GLAPIENTRY *glCopyTexSubImage2DType)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
  64 typedef void (GLAPIENTRY *glDeleteTexturesType)(GLsizei n, const GLuint *textures);
  65 typedef void (GLAPIENTRY *glDepthFuncType)(GLenum func);
  66 typedef void (GLAPIENTRY *glDisableType)(GLenum cap);
  67 typedef void (GLAPIENTRY *glDisableClientStateType)(GLenum array);
  68 typedef void (GLAPIENTRY *glDrawArraysType)(GLenum mode, GLint first, GLsizei count);
  69 typedef void (GLAPIENTRY *glDrawBufferType)(GLenum mode);
  70 typedef void (GLAPIENTRY *glDrawPixelsType)(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
  71 typedef void (GLAPIENTRY *glEnableType)(GLenum cap);
  72 typedef void (GLAPIENTRY *glEnableClientStateType)(GLenum array);
  73 typedef void (GLAPIENTRY *glEndType)(void);
  74 typedef void (GLAPIENTRY *glFinishType)(void);
  75 typedef void (GLAPIENTRY *glFlushType)(void);
  76 typedef void (GLAPIENTRY *glGenTexturesType)(GLsizei n, GLuint *textures);
  77 typedef void (GLAPIENTRY *glGetBooleanvType)(GLenum pname, GLboolean *params);
  78 typedef void (GLAPIENTRY *glGetDoublevType)(GLenum pname, GLdouble *params);
  79 typedef GLenum (GLAPIENTRY *glGetErrorType)(void);
  80 typedef void (GLAPIENTRY *glGetFloatvType)(GLenum pname, GLfloat *params);
  81 typedef void (GLAPIENTRY *glGetIntegervType)(GLenum pname, GLint *params);
  82 typedef const GLubyte * (GLAPIENTRY *glGetStringType)(GLenum name);
  83 typedef void (GLAPIENTRY *glGetTexLevelParameterivType)(GLenum target, GLint level, GLenum pname, GLint *params);
  84 typedef void (GLAPIENTRY *glHintType)(GLenum target, GLenum mode);
  85 typedef void (GLAPIENTRY *glInterleavedArraysType)(GLenum format, GLsizei stride, const GLvoid *pointer);
  86 typedef GLboolean (GLAPIENTRY *glIsEnabledType)(GLenum cap);
  87 typedef GLboolean (GLAPIENTRY *glIsTextureType)(GLuint texture);
  88 typedef void (GLAPIENTRY *glLoadIdentityType)(void);
  89 typedef void (GLAPIENTRY *glLoadMatrixdType)(const GLdouble *m);
  90 typedef void (GLAPIENTRY *glLogicOpType)(GLenum opcode);
  91 typedef void (GLAPIENTRY *glMatrixModeType)(GLenum mode);
  92 typedef void (GLAPIENTRY *glOrthoType)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
  93 typedef void (GLAPIENTRY *glPixelStoreiType)(GLenum pname, GLint param);
  94 typedef void (GLAPIENTRY *glPixelTransferfType)(GLenum pname, GLfloat param);
  95 typedef void (GLAPIENTRY *glPixelZoomType)(GLfloat xfactor, GLfloat yfactor);
  96 typedef void (GLAPIENTRY *glPolygonOffsetType)(GLfloat factor, GLfloat units);
  97 typedef void (GLAPIENTRY *glPopAttribType)(void);
  98 typedef void (GLAPIENTRY *glPopClientAttribType)(void);
  99 typedef void (GLAPIENTRY *glPopMatrixType)(void);
 100 typedef void (GLAPIENTRY *glPrioritizeTexturesType)(GLsizei n, const GLuint *textures, const GLclampf *priorities);
 101 typedef void (GLAPIENTRY *glPushAttribType)(GLbitfield);
 102 typedef void (GLAPIENTRY *glPushClientAttribType)(GLbitfield);
 103 typedef void (GLAPIENTRY *glPushMatrixType)(void);
 104 typedef void (GLAPIENTRY *glRasterPos2iType)(GLint x, GLint y);
 105 typedef void (GLAPIENTRY *glReadBufferType)(GLenum mode);
 106 typedef void (GLAPIENTRY *glReadPixelsType)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
 107 typedef void (GLAPIENTRY *glRectiType)(GLint x1, GLint y1, GLint x2, GLint y2);
 108 typedef void (GLAPIENTRY *glScalefType)(GLfloat x, GLfloat y, GLfloat z);
 109 typedef void (GLAPIENTRY *glScissorType)(GLint x, GLint y, GLsizei width, GLsizei height);
 110 typedef void (GLAPIENTRY *glTexCoord2dType)(GLdouble s, GLdouble t);
 111 typedef void (GLAPIENTRY *glTexCoord2fType)(GLfloat s, GLfloat t);
 112 typedef void (GLAPIENTRY *glTexCoordPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
 113 typedef void (GLAPIENTRY *glTexEnviType)(GLenum target, GLenum pname, GLint param);
 114 typedef void (GLAPIENTRY *glTexGeniType)(GLenum coord, GLenum pname, GLint param);
 115 typedef void (GLAPIENTRY *glTexGendvType)(GLenum coord, GLenum pname, const GLdouble *params);
 116 typedef void (GLAPIENTRY *glTexImage1DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
 117 typedef void (GLAPIENTRY *glTexImage2DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
 118 typedef void (GLAPIENTRY *glTexParameteriType)(GLenum target, GLenum pname, GLint param);
 119 typedef void (GLAPIENTRY *glTexSubImage1DType)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
 120 typedef void (GLAPIENTRY *glTexSubImage2DType)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
 121 typedef void (GLAPIENTRY *glTranslatefType)(GLfloat x, GLfloat y, GLfloat z);
 122 typedef void (GLAPIENTRY *glVertex2dType)(GLdouble x, GLdouble y);
 123 typedef void (GLAPIENTRY *glVertex2fType)(GLfloat x, GLfloat y);
 124 typedef void (GLAPIENTRY *glVertex2iType)(GLint x, GLint y);
 125 typedef void (GLAPIENTRY *glVertexPointerType)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
 126 typedef void (GLAPIENTRY *glViewportType)(GLint x, GLint y, GLsizei width, GLsizei height);
 127 
 128 /**
 129  * OpenGL 1.2 and extension function typedefs (functions that were added in
 130  * the 1.2 spec and later need to be loaded on Windows as if they were
 131  * extensions, which is why they are called out separately here)
 132  */
 133 typedef void (GLAPIENTRY *glActiveTextureARBType)(GLenum texture);
 134 typedef void (GLAPIENTRY *glMultiTexCoord2fARBType)(GLenum texture, GLfloat s, GLfloat t);
 135 typedef void (GLAPIENTRY *glTexImage3DType)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
 136 
 137 /**
 138  * GL_EXT_framebuffer_object function typedefs
 139  */
 140 typedef void (GLAPIENTRY *glBindRenderbufferEXTType)(GLenum, GLuint);
 141 typedef void (GLAPIENTRY *glDeleteRenderbuffersEXTType)(GLsizei, const GLuint *);
 142 typedef void (GLAPIENTRY *glGenRenderbuffersEXTType)(GLsizei, GLuint *);
 143 typedef void (GLAPIENTRY *glRenderbufferStorageEXTType)(GLenum, GLenum, GLsizei, GLsizei);
 144 typedef void (GLAPIENTRY *glBindFramebufferEXTType)(GLenum, GLuint);
 145 typedef void (GLAPIENTRY *glDeleteFramebuffersEXTType)(GLsizei, const GLuint *);
 146 typedef void (GLAPIENTRY *glGenFramebuffersEXTType)(GLsizei, GLuint *);
 147 typedef GLenum (GLAPIENTRY *glCheckFramebufferStatusEXTType)(GLenum);
 148 typedef void (GLAPIENTRY *glFramebufferTexture2DEXTType)(GLenum, GLenum, GLenum, GLuint, GLint);
 149 typedef void (GLAPIENTRY *glFramebufferRenderbufferEXTType)(GLenum, GLenum, GLenum, GLuint);
 150 
 151 /**
 152  * GL_ARB_fragment_shader extension function typedefs
 153  */
 154 typedef GLhandleARB (GLAPIENTRY *glCreateShaderObjectARBType)(GLenum);
 155 typedef void (GLAPIENTRY *glShaderSourceARBType)(GLhandleARB, GLsizei, const GLcharARB* *, const GLint *);
 156 typedef void (GLAPIENTRY *glCompileShaderARBType)(GLhandleARB);
 157 typedef void (GLAPIENTRY *glUseProgramObjectARBType)(GLhandleARB);
 158 typedef void (GLAPIENTRY *glUniform1iARBType)(GLint, GLint);
 159 typedef void (GLAPIENTRY *glUniform1fARBType)(GLint, GLfloat);
 160 typedef void (GLAPIENTRY *glUniform1fvARBType)(GLint, GLsizei, const GLfloat *);
 161 typedef void (GLAPIENTRY *glUniform2fARBType)(GLint, GLfloat, GLfloat);
 162 typedef void (GLAPIENTRY *glUniform3fARBType)(GLint, GLfloat, GLfloat, GLfloat);
 163 typedef void (GLAPIENTRY *glUniform3fvARBType)(GLint, GLsizei, const GLfloat *);
 164 typedef void (GLAPIENTRY *glUniform4fARBType)(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
 165 typedef void (GLAPIENTRY *glUniform4fvARBType)(GLint, GLsizei, const GLfloat *);
 166 typedef GLint (GLAPIENTRY *glGetUniformLocationARBType)(GLhandleARB, const GLcharARB *);
 167 typedef void (GLAPIENTRY *glGetInfoLogARBType)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
 168 typedef void (GLAPIENTRY *glGetProgramivARBType)(GLenum, GLenum, GLint *);
 169 typedef void (GLAPIENTRY *glGetObjectParameterivARBType)(GLhandleARB, GLenum, GLint *);
 170 typedef GLhandleARB (GLAPIENTRY *glCreateProgramObjectARBType)(void);
 171 typedef void (GLAPIENTRY *glAttachObjectARBType)(GLhandleARB, GLhandleARB);
 172 typedef void (GLAPIENTRY *glLinkProgramARBType)(GLhandleARB);
 173 typedef void (GLAPIENTRY *glDeleteObjectARBType)(GLhandleARB);
 174 
 175 /**





 176  * REMIND: this caused an internal error in the MS compiler!?!?
 177  *
 178  *#define OGL_CHECK_FUNC_ERR(f) \
 179  *    J2dTrace1(J2D_TRACE_ERROR, "could not load function: %s", #f)
 180  */
 181 
 182 #define OGL_CHECK_FUNC_ERR(f) \
 183     J2dRlsTraceLn(J2D_TRACE_ERROR, #f)
 184 
 185 #define OGL_INIT_FUNC(f) \
 186     OGL_J2D_MANGLE(f) = (OGL_FUNC_TYPE(f)) OGL_GET_PROC_ADDRESS(f)
 187 
 188 #define OGL_INIT_AND_CHECK_FUNC(f) \
 189     OGL_INIT_FUNC(f); \
 190     if (OGL_J2D_MANGLE(f) == NULL) { \
 191         OGL_CHECK_FUNC_ERR(f); \
 192         return JNI_FALSE; \
 193     }
 194 
 195 #define OGL_INIT_EXT_FUNC(f) \
 196     OGL_J2D_MANGLE(f) = (OGL_FUNC_TYPE(f)) OGL_GET_EXT_PROC_ADDRESS(f)
 197 
 198 #define OGL_INIT_AND_CHECK_EXT_FUNC(f) \
 199     OGL_INIT_EXT_FUNC(f); \
 200     if (OGL_J2D_MANGLE(f) == NULL) { \
 201         OGL_CHECK_FUNC_ERR(f); \
 202         return JNI_FALSE; \
 203     }
 204 
 205 #define OGL_EXPRESS_BASE_FUNCS(action) \
 206     OGL_##action##_FUNC(glAlphaFunc); \
 207     OGL_##action##_FUNC(glAreTexturesResident); \
 208     OGL_##action##_FUNC(glBegin); \
 209     OGL_##action##_FUNC(glBindTexture); \
 210     OGL_##action##_FUNC(glBitmap); \
 211     OGL_##action##_FUNC(glBlendFunc); \
 212     OGL_##action##_FUNC(glClear); \
 213     OGL_##action##_FUNC(glClearColor); \
 214     OGL_##action##_FUNC(glClearDepth); \
 215     OGL_##action##_FUNC(glColor3ub); \
 216     OGL_##action##_FUNC(glColor4f); \
 217     OGL_##action##_FUNC(glColor4ub); \
 218     OGL_##action##_FUNC(glColorMask); \
 219     OGL_##action##_FUNC(glColorPointer); \
 220     OGL_##action##_FUNC(glCopyPixels); \
 221     OGL_##action##_FUNC(glCopyTexSubImage2D); \
 222     OGL_##action##_FUNC(glDeleteTextures); \
 223     OGL_##action##_FUNC(glDepthFunc); \
 224     OGL_##action##_FUNC(glDisable); \
 225     OGL_##action##_FUNC(glDisableClientState); \
 226     OGL_##action##_FUNC(glDrawArrays); \
 227     OGL_##action##_FUNC(glDrawBuffer); \
 228     OGL_##action##_FUNC(glDrawPixels); \
 229     OGL_##action##_FUNC(glEnable); \
 230     OGL_##action##_FUNC(glEnableClientState); \
 231     OGL_##action##_FUNC(glEnd); \
 232     OGL_##action##_FUNC(glFinish); \
 233     OGL_##action##_FUNC(glFlush); \
 234     OGL_##action##_FUNC(glGenTextures); \
 235     OGL_##action##_FUNC(glGetBooleanv); \
 236     OGL_##action##_FUNC(glGetDoublev); \
 237     OGL_##action##_FUNC(glGetError); \
 238     OGL_##action##_FUNC(glGetFloatv); \
 239     OGL_##action##_FUNC(glGetIntegerv); \
 240     OGL_##action##_FUNC(glGetString); \
 241     OGL_##action##_FUNC(glGetTexLevelParameteriv); \
 242     OGL_##action##_FUNC(glHint); \
 243     OGL_##action##_FUNC(glInterleavedArrays); \
 244     OGL_##action##_FUNC(glIsEnabled); \
 245     OGL_##action##_FUNC(glIsTexture); \
 246     OGL_##action##_FUNC(glLoadIdentity); \
 247     OGL_##action##_FUNC(glLoadMatrixd); \
 248     OGL_##action##_FUNC(glLogicOp); \
 249     OGL_##action##_FUNC(glMatrixMode); \
 250     OGL_##action##_FUNC(glOrtho); \
 251     OGL_##action##_FUNC(glPixelStorei); \
 252     OGL_##action##_FUNC(glPixelTransferf); \
 253     OGL_##action##_FUNC(glPixelZoom); \
 254     OGL_##action##_FUNC(glPolygonOffset); \
 255     OGL_##action##_FUNC(glPopAttrib); \
 256     OGL_##action##_FUNC(glPopClientAttrib); \
 257     OGL_##action##_FUNC(glPopMatrix); \
 258     OGL_##action##_FUNC(glPrioritizeTextures); \
 259     OGL_##action##_FUNC(glPushAttrib); \
 260     OGL_##action##_FUNC(glPushClientAttrib); \
 261     OGL_##action##_FUNC(glPushMatrix); \
 262     OGL_##action##_FUNC(glRasterPos2i); \
 263     OGL_##action##_FUNC(glReadBuffer); \
 264     OGL_##action##_FUNC(glReadPixels); \
 265     OGL_##action##_FUNC(glRecti); \
 266     OGL_##action##_FUNC(glScalef); \
 267     OGL_##action##_FUNC(glScissor); \
 268     OGL_##action##_FUNC(glTexCoord2d); \
 269     OGL_##action##_FUNC(glTexCoord2f); \
 270     OGL_##action##_FUNC(glTexCoordPointer); \
 271     OGL_##action##_FUNC(glTexEnvi); \
 272     OGL_##action##_FUNC(glTexGeni); \
 273     OGL_##action##_FUNC(glTexGendv); \
 274     OGL_##action##_FUNC(glTexImage1D); \
 275     OGL_##action##_FUNC(glTexImage2D); \
 276     OGL_##action##_FUNC(glTexParameteri); \
 277     OGL_##action##_FUNC(glTexSubImage1D); \
 278     OGL_##action##_FUNC(glTexSubImage2D); \
 279     OGL_##action##_FUNC(glTranslatef); \
 280     OGL_##action##_FUNC(glVertex2d); \
 281     OGL_##action##_FUNC(glVertex2f); \
 282     OGL_##action##_FUNC(glVertex2i); \
 283     OGL_##action##_FUNC(glVertexPointer); \
 284     OGL_##action##_FUNC(glViewport);
 285 
 286 #define OGL_EXPRESS_EXT_FUNCS(action) \
 287     OGL_##action##_EXT_FUNC(glActiveTextureARB); \
 288     OGL_##action##_EXT_FUNC(glMultiTexCoord2fARB); \
 289     OGL_##action##_EXT_FUNC(glTexImage3D); \
 290     OGL_##action##_EXT_FUNC(glBindRenderbufferEXT); \
 291     OGL_##action##_EXT_FUNC(glDeleteRenderbuffersEXT); \
 292     OGL_##action##_EXT_FUNC(glGenRenderbuffersEXT); \
 293     OGL_##action##_EXT_FUNC(glRenderbufferStorageEXT); \
 294     OGL_##action##_EXT_FUNC(glBindFramebufferEXT); \
 295     OGL_##action##_EXT_FUNC(glDeleteFramebuffersEXT); \
 296     OGL_##action##_EXT_FUNC(glGenFramebuffersEXT); \
 297     OGL_##action##_EXT_FUNC(glCheckFramebufferStatusEXT); \
 298     OGL_##action##_EXT_FUNC(glFramebufferTexture2DEXT); \
 299     OGL_##action##_EXT_FUNC(glFramebufferRenderbufferEXT); \
 300     OGL_##action##_EXT_FUNC(glCreateProgramObjectARB); \
 301     OGL_##action##_EXT_FUNC(glAttachObjectARB); \
 302     OGL_##action##_EXT_FUNC(glLinkProgramARB); \
 303     OGL_##action##_EXT_FUNC(glCreateShaderObjectARB); \
 304     OGL_##action##_EXT_FUNC(glShaderSourceARB); \
 305     OGL_##action##_EXT_FUNC(glCompileShaderARB); \
 306     OGL_##action##_EXT_FUNC(glUseProgramObjectARB); \
 307     OGL_##action##_EXT_FUNC(glUniform1iARB); \
 308     OGL_##action##_EXT_FUNC(glUniform1fARB); \
 309     OGL_##action##_EXT_FUNC(glUniform1fvARB); \
 310     OGL_##action##_EXT_FUNC(glUniform2fARB); \
 311     OGL_##action##_EXT_FUNC(glUniform3fARB); \
 312     OGL_##action##_EXT_FUNC(glUniform3fvARB); \
 313     OGL_##action##_EXT_FUNC(glUniform4fARB); \
 314     OGL_##action##_EXT_FUNC(glUniform4fvARB); \
 315     OGL_##action##_EXT_FUNC(glGetUniformLocationARB); \
 316     OGL_##action##_EXT_FUNC(glGetProgramivARB); \
 317     OGL_##action##_EXT_FUNC(glGetInfoLogARB); \
 318     OGL_##action##_EXT_FUNC(glGetObjectParameterivARB); \
 319     OGL_##action##_EXT_FUNC(glDeleteObjectARB);

 320 
 321 #define OGL_EXPRESS_ALL_FUNCS(action) \
 322     OGL_EXPRESS_BASE_FUNCS(action) \
 323     OGL_EXPRESS_EXT_FUNCS(action) \
 324     OGL_EXPRESS_PLATFORM_FUNCS(action) \
 325     OGL_EXPRESS_PLATFORM_EXT_FUNCS(action)
 326 
 327 OGL_EXPRESS_ALL_FUNCS(EXTERN)
 328 
 329 #endif /* OGLFuncs_h_Included */
--- EOF ---