ADC Home > Reference Library > Technical Q&As > Legacy Documents > Graphics & Imaging >

Legacy Documentclose button

Important: This document is part of the Legacy section of the ADC Reference Library. This information should not be used for new development.

Current information on this Reference Library topic can be found here:

Finding Missing OpenGL CFM Entry Points


Q: I'm writing a CFM application that uses OpenGL. Everything works fine on Mac OS X 10.2, but when I run on 10.1 I get linker errors for certain functions. How can I fix this?

A: Some function entry points, which are enumerated in Listing 1, were omitted from the OpenGL CFM bridge library in Mac OS X v10.1.x. This omission will cause runtime failures for code using this routines. The OpenGL CFM bridge library normally allows CFM applications to automatically find linked OpenGL entry points at runtime. Since these linked entry points aren't exported by the bridge library they will not be found automatically. To remedy this problem, applications can find the symbols dynamically as shown in Listing 2. Note, this issue only affects CFM applications and does not affect Mach-O based applications and these functions are exported correctly in Mac OS X v10.2 and later. Developers may still want to dynamically look up entry points for compatibility with users on Mac OS 10.1.x. See Technical Q&A 1188 "GetProcAddress and OpenGL Entry Points" for a full discussion of dynamically finding OpenGL function entry points.

Listing 1 shows all the entry points which are not being exported at runtime for CFM applications and which must be found dynamically in Mac OS X v10.1.x


OpenGL 1.2:
  • glBlendColor
  • glBlendEquation
  • glDrawRangeElements
  • glTexImage3D
  • glTexSubImage3D
  • glCopyTexSubImage3D
OpenGL 1.3:
  • glLoadTransposeMatrixf
  • glLoadTransposeMatrixd
  • glMultTransposeMatrixf
  • glMultTransposeMatrixd
  • glActiveTexture
  • glClientActiveTexture
  • glMultiTexCoord1d
  • glMultiTexCoord1dv
  • glMultiTexCoord1f
  • glMultiTexCoord1fv
  • glMultiTexCoord1i
  • glMultiTexCoord1iv
  • glMultiTexCoord1s
  • glMultiTexCoord1sv
  • glMultiTexCoord2d
  • glMultiTexCoord2dv
  • glMultiTexCoord2f
  • glMultiTexCoord2fv
  • glMultiTexCoord2i
  • glMultiTexCoord2iv
  • glMultiTexCoord2s
  • glMultiTexCoord2sv
  • glMultiTexCoord3d
  • glMultiTexCoord3dv
  • glMultiTexCoord3f
  • glMultiTexCoord3fv
  • glMultiTexCoord3i
  • glMultiTexCoord3iv
  • glMultiTexCoord3s
  • glMultiTexCoord3sv
  • glMultiTexCoord4d
  • glMultiTexCoord4dv
  • glMultiTexCoord4f
  • glMultiTexCoord4fv
  • glMultiTexCoord4i
  • glMultiTexCoord4iv
  • glMultiTexCoord4s
  • glMultiTexCoord4sv
  • glCompressedTexImage3D
  • glCompressedTexImage2D
  • glCompressedTexImage1D
  • glCompressedTexSubImage3D
  • glCompressedTexSubImage2D
  • glCompressedTexSubImage1D
  • glGetCompressedTexImage
  • glSampleCoverage
  • glSamplePass
GLU:
  • gluNurbsCallbackDataEXT
GL_ARB_transpose_matrix:
  • glLoadTransposeMatrixfARB
  • glLoadTransposeMatrixdARB
  • glMultTransposeMatrixfARB
  • glMultTransposeMatrixdARB
GL_ARB_texture_compression:
  • glCompressedTexImage3DARB
  • glCompressedTexImage2DARB
  • glCompressedTexImage1DARB
  • glCompressedTexSubImage3DARB
  • glCompressedTexSubImage2DARB
  • glCompressedTexSubImage1DARB
  • glGetCompressedTexImageARB
GL_ARB_multisample:
  • glSampleCoverageARB
  • glSamplePassARB
GL_EXT_paletted_texture:
  • glColorTableEXT
  • glColorSubTableEXT
  • glGetColorTableEXT
  • glGetColorTableParameterivEXT
  • glGetColorTableParameterfvEXT
GL_EXT_secondary_color:
  • glSecondaryColor3bEXT
  • glSecondaryColor3bvEXT
  • glSecondaryColor3dEXT
  • glSecondaryColor3dvEXT
  • glSecondaryColor3fEXT
  • glSecondaryColor3fvEXT
  • glSecondaryColor3iEXT
  • glSecondaryColor3ivEXT
  • glSecondaryColor3sEXT
  • glSecondaryColor3svEXT
  • glSecondaryColor3ubEXT
  • glSecondaryColor3ubvEXT
  • glSecondaryColor3uiEXT
  • glSecondaryColor3uivEXT
  • glSecondaryColor3usEXT
  • glSecondaryColor3usvEXT
  • glSecondaryColorPointerEXT
GL_ATIX_pn_triangles:
  • glPNTrianglesiATIX
  • glPNTrianglesfATIX
GL_NV_register_combiners:
  • glCombinerParameterfvNV
  • glCombinerParameterfNV
  • glCombinerParameterivNV
  • glCombinerParameteriNV
  • glCombinerInputNV
  • glCombinerOutputNV
  • glFinalCombinerInputNV
  • glGetCombinerInputParameterfvNV
  • glGetCombinerInputParameterivNV
  • glGetCombinerOutputParameterfvNV
  • glGetCombinerOutputParameterivNV
  • glGetFinalCombinerInputParameterfvNV
  • glGetFinalCombinerInputParameterivNV

Listing 1. Mac OS X 10.1.x Missing CFM Entry Points


Using the techniques from Technical Q&A 1188 "GetProcAddress and OpenGL Entry Points", Listing 2 shows how to find and call all the missing CFM function entry points.


#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <OpenGL/glext.h>
#include <Carbon/Carbon.h>

 // Code for getting procedure pointers for agl

CFBundleRef gBundleRefOpenGL = NULL;

OSStatus aglInitEntryPoints (void);
void aglDellocEntryPoints (void);
void * aglGetProcAddress (char *  pszProc);

// -------------------------

OSStatus aglInitEntryPoints (void)
{

    OSStatus err = noErr;
    const Str255 frameworkName = "\pOpenGL.framework";
    FSRefParam fileRefParam;
    FSRef fileRef;
    CFURLRef bundleURLOpenGL;

    memset(&fileRefParam, 0, sizeof(fileRefParam));
    memset(&fileRef, 0, sizeof(fileRef));

    fileRefParam.ioNamePtr  = frameworkName;
    fileRefParam.newRef = &fileRef;

    // Frameworks directory/folder
    err = FindFolder (kSystemDomain, kFrameworksFolderType, false,
                      &fileRefParam.ioVRefNum, &fileRefParam.ioDirID);
    if (noErr != err) {
        DebugStr ("\pCould not find frameworks folder");
        return err;
    }
    err = PBMakeFSRefSync (&fileRefParam); // make FSRef for folder
    if (noErr != err) {
        DebugStr ("\pCould make FSRef to frameworks folder");
        return err;
    }
    // create URL to folder
    bundleURLOpenGL = CFURLCreateFromFSRef (kCFAllocatorDefault,
                                            &fileRef);
    if (!bundleURLOpenGL) {
        DebugStr ("\pCould create OpenGL Framework bundle URL");
        return paramErr;
    }
    // create ref to GL's bundle
    gBundleRefOpenGL = CFBundleCreate (kCFAllocatorDefault,
                                       bundleURLOpenGL);
    if (!gBundleRefOpenGL) {
        DebugStr ("\pCould not create OpenGL Framework bundle");
        return paramErr;
    }
    CFRelease (bundleURLOpenGL); // release created bundle
    // if the code was successfully loaded, look for our function.
    if (!CFBundleLoadExecutable (gBundleRefOpenGL)) {
        DebugStr ("\pCould not load MachO executable");
        return paramErr;
    }
    return err;
}

// -------------------------

void aglDellocEntryPoints (void)
{
    if (gBundleRefOpenGL != NULL) {
        // unload the bundle's code.
        CFBundleUnloadExecutable (gBundleRefOpenGL);
        CFRelease (gBundleRefOpenGL);
        gBundleRefOpenGL = NULL;
    }
}

// -------------------------

void * aglGetProcAddress (char * pszProc)
{
    return CFBundleGetFunctionPointerForName (gBundleRefOpenGL,
                CFStringCreateWithCStringNoCopy (NULL,
                     pszProc, CFStringGetSystemEncoding (), NULL));
}


// ==========================

// Specific missing entry point support code

static OSStatus InitMissingCFMEntryPoints (void);
static void DeallocMissingCFMEntryPoints (void);

// function pointer typedefs

  // OpenGL 1.2
typedef void
    (*glBlendColorProcPtr)(GLclampf red, GLclampf green,
                           GLclampf blue, GLclampf alpha);
typedef void
    (*glBlendEquationProcPtr)(GLenum mode);
typedef void
    (*glDrawRangeElementsProcPtr)(GLenum mode, GLuint start,
         GLuint end, GLsizei count, GLenum type,
         const GLvoid *indices);
typedef void
    (*glTexImage3DProcPtr)(GLenum target, GLint level,
        GLenum internalFormat, GLsizei width, GLsizei height,
        GLsizei depth, GLint border, GLenum format, GLenum type,
        const GLvoid *pixels);
typedef void
    (*glTexSubImage3DProcPtr)(GLenum target, GLint level,
        GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width,
        GLsizei height, GLsizei depth, GLenum format, GLenum type,
        const GLvoid *pixels);
typedef void
    (*glCopyTexSubImage3DProcPtr)(GLenum target, GLint level,
        GLint xoffset, GLint yoffset, GLint zoffset,
        GLint x, GLint y, GLsizei width, GLsizei height);

  // OpenGL 1.3
typedef void
    (*glLoadTransposeMatrixfProcPtr)(const GLfloat *);
typedef void
    (*glLoadTransposeMatrixdProcPtr)(const GLdouble *);
typedef void
    (*glMultTransposeMatrixfProcPtr)(const GLfloat *);
typedef void
    (*glMultTransposeMatrixdProcPtr)(const GLdouble *);
typedef void
    (*glActiveTextureProcPtr) (GLenum);
typedef void
    (*glClientActiveTextureProcPtr)(GLenum);
typedef void
    (*glMultiTexCoord1dProcPtr)(GLenum, GLdouble);
typedef void
    (*glMultiTexCoord1dvProcPtr)(GLenum, const GLdouble *);
typedef void
    (*glMultiTexCoord1fProcPtr)(GLenum, GLfloat);
typedef void
    (*glMultiTexCoord1fvProcPtr)(GLenum, const GLfloat *);
typedef void
    (*glMultiTexCoord1iProcPtr)(GLenum, GLint);
typedef void
    (*glMultiTexCoord1ivProcPtr)(GLenum, const GLint *);
typedef void
    (*glMultiTexCoord1sProcPtr)(GLenum, GLshort);
typedef void
    (*glMultiTexCoord1svProcPtr)(GLenum, const GLshort *);
typedef void
    (*glMultiTexCoord2dProcPtr)(GLenum, GLdouble, GLdouble);
typedef void
    (*glMultiTexCoord2dvProcPtr)(GLenum, const GLdouble *);
typedef void
    (*glMultiTexCoord2fProcPtr)(GLenum, GLfloat, GLfloat);
typedef void
    (*glMultiTexCoord2fvProcPtr)(GLenum, const GLfloat *);
typedef void
    (*glMultiTexCoord2iProcPtr)(GLenum, GLint, GLint);
typedef void
    (*glMultiTexCoord2ivProcPtr)(GLenum, const GLint *);
typedef void
    (*glMultiTexCoord2sProcPtr)(GLenum, GLshort, GLshort);
typedef void
    (*glMultiTexCoord2svProcPtr)(GLenum, const GLshort *);
typedef void
    (*glMultiTexCoord3dProcPtr)(GLenum, GLdouble, GLdouble,
        GLdouble);
typedef void
    (*glMultiTexCoord3dvProcPtr)(GLenum, const GLdouble *);
typedef void
    (*glMultiTexCoord3fProcPtr)(GLenum, GLfloat, GLfloat, GLfloat);
typedef void
    (*glMultiTexCoord3fvProcPtr)(GLenum, const GLfloat *);
typedef void
    (*glMultiTexCoord3iProcPtr)(GLenum, GLint, GLint, GLint);
typedef void
    (*glMultiTexCoord3ivProcPtr)(GLenum, const GLint *);
typedef void
    (*glMultiTexCoord3sProcPtr)(GLenum, GLshort, GLshort, GLshort);
typedef void
    (*glMultiTexCoord3svProcPtr)(GLenum, const GLshort *);
typedef void
    (*glMultiTexCoord4dProcPtr)(GLenum, GLdouble, GLdouble,
        GLdouble, GLdouble);
typedef void
    (*glMultiTexCoord4dvProcPtr)(GLenum, const GLdouble *);
typedef void
    (*glMultiTexCoord4fProcPtr)(GLenum, GLfloat, GLfloat, GLfloat,
        GLfloat);
typedef void
    (*glMultiTexCoord4fvProcPtr)(GLenum, const GLfloat *);
typedef void
    (*glMultiTexCoord4iProcPtr)(GLenum, GLint, GLint, GLint, GLint);
typedef void
    (*glMultiTexCoord4ivProcPtr)(GLenum, const GLint *);
typedef void
    (*glMultiTexCoord4sProcPtr)(GLenum, GLshort, GLshort, GLshort,
        GLshort);
typedef void
    (*glMultiTexCoord4svProcPtr)(GLenum, const GLshort *);
typedef void
    (*glCompressedTexImage3DProcPtr)(GLenum, GLint, GLenum, GLsizei,
        GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
typedef void
    (*glCompressedTexImage2DProcPtr)(GLenum, GLint, GLenum, GLsizei,
        GLsizei, GLint, GLsizei, const GLvoid *);
typedef void
    (*glCompressedTexImage1DProcPtr)(GLenum, GLint, GLenum, GLsizei,
        GLint, GLsizei, const GLvoid *);
typedef void
    (*glCompressedTexSubImage3DProcPtr)(GLenum, GLint, GLint, GLint,
        GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei,
        const GLvoid *);
typedef void
    (*glCompressedTexSubImage2DProcPtr)(GLenum, GLint, GLint, GLint,
        GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
typedef void
    (*glCompressedTexSubImage1DProcPtr)(GLenum, GLint, GLint,
        GLsizei, GLenum, GLsizei, const GLvoid *);
typedef void
    (*glGetCompressedTexImageProcPtr)(GLenum, GLint, void *);
typedef void
    (*glSampleCoverageProcPtr)(GLclampf, GLboolean);
typedef void
    (*glSamplePassProcPtr)(GLenum);


  // glu
typedef void
    (*gluNurbsCallbackDataEXTProcPtr)(GLUnurbs* nurb,
        GLvoid* userData);

  // GL_ARB_transpose_matrix
typedef void
    (*glLoadTransposeMatrixfARBProcPtr)(const GLfloat *m);
typedef void
    (*glLoadTransposeMatrixdARBProcPtr)(const GLdouble *m);
typedef void
    (*glMultTransposeMatrixfARBProcPtr)(const GLfloat *m);
typedef void
    (*glMultTransposeMatrixdARBProcPtr)(const GLdouble *m);

  // GL_ARB_texture_compression
typedef void
    (*glCompressedTexImage3DARBProcPtr)(GLenum target, GLint level,
        GLenum internalformat, GLsizei width, GLsizei height,
        GLsizei depth, GLint border, GLsizei imageSize,
        const GLvoid *data);
typedef void
    (*glCompressedTexImage2DARBProcPtr)(GLenum target, GLint level,
        GLenum internalformat, GLsizei width, GLsizei height,
        GLint border, GLsizei imageSize, const GLvoid *data);
typedef void
    (*glCompressedTexImage1DARBProcPtr)(GLenum target, GLint level,
        GLenum internalformat, GLsizei width, GLint border,
        GLsizei imageSize, const GLvoid *data);
typedef void
    (*glCompressedTexSubImage3DARBProcPtr)(GLenum target,
        GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
        GLsizei width, GLsizei height, GLsizei depth, GLenum format,
        GLsizei imageSize, const GLvoid *data);
typedef void
    (*glCompressedTexSubImage2DARBProcPtr)(GLenum target,
        GLint level, GLint xoffset, GLint yoffset, GLsizei width,
        GLsizei height, GLenum format, GLsizei imageSize,
        const GLvoid *data);
typedef void

    (*glCompressedTexSubImage1DARBProcPtr)(GLenum target,
        GLint level, GLint xoffset, GLsizei width, GLenum format,
        GLsizei imageSize, const GLvoid *data);
typedef void
    (*glGetCompressedTexImageARBProcPtr)(GLenum target, GLint level,
        void *img);

  // GL_ARB_multisample
typedef void
    (*glSampleCoverageARBProcPtr)(GLclampf value, GLboolean invert);
typedef void
    (*glSamplePassARBProcPtr)(GLenum mode);

  // GL_EXT_paletted_texture
typedef void
    (*glColorTableEXTProcPtr)(GLenum target, GLenum internalformat,
        GLsizei width, GLenum format,  GLenum type,
        const GLvoid *table);
typedef void
    (*glColorSubTableEXTProcPtr)(GLenum target, GLsizei start,
        GLsizei count, GLenum format, GLenum type,
        const GLvoid *data);
typedef void
    (*glGetColorTableEXTProcPtr)(GLenum target, GLenum format,
        GLenum type, GLvoid *table);
typedef void
    (*glGetColorTableParameterfvEXTProcPtr)(GLenum target,
        GLenum pname, GLfloat *params);
typedef void
    (*glGetColorTableParameterivEXTProcPtr)(GLenum target,
        GLenum pname, GLint *params);

  // GL_EXT_secondary_color
typedef void
    (*glSecondaryColor3bEXTProcPtr)(GLbyte red, GLbyte green,
        GLbyte blue);
typedef void
    (*glSecondaryColor3bvEXTProcPtr)(const GLbyte *v);
typedef void
    (*glSecondaryColor3dEXTProcPtr)(GLdouble red, GLdouble green,
        GLdouble blue);
typedef void
    (*glSecondaryColor3dvEXTProcPtr)(const GLdouble *v);
typedef void
    (*glSecondaryColor3fEXTProcPtr)(GLfloat red, GLfloat green,
        GLfloat blue);
typedef void
    (*glSecondaryColor3fvEXTProcPtr)(const GLfloat *v);
typedef void
    (*glSecondaryColor3iEXTProcPtr)(GLint red, GLint green,
        GLint blue);
typedef void
    (*glSecondaryColor3ivEXTProcPtr)(const GLint *v);
typedef void
    (*glSecondaryColor3sEXTProcPtr)(GLshort red, GLshort green,
        GLshort blue);
typedef void
    (*glSecondaryColor3svEXTProcPtr)(const GLshort *v);
typedef void
    (*glSecondaryColor3ubEXTProcPtr)(GLubyte red, GLubyte green,
        GLubyte blue);
typedef void
    (*glSecondaryColor3ubvEXTProcPtr)(const GLubyte *v);
typedef void
    (*glSecondaryColor3uiEXTProcPtr)(GLuint red, GLuint green,
        GLuint blue);
typedef void
    (*glSecondaryColor3uivEXTProcPtr)(const GLuint *v);
typedef void
    (*glSecondaryColor3usEXTProcPtr)(GLushort red, GLushort green,
        GLushort blue);
typedef void
    (*glSecondaryColor3usvEXTProcPtr)(const GLushort *v);
typedef void
    (*glSecondaryColorPointerEXTProcPtr)(GLint size, GLenum type,
        GLsizei stride, GLvoid *pointer);

  // GL_ATIX_pn_triangles
typedef void
    (*glPNTrianglesiATIXProcPtr)(GLenum pname, GLint param);
typedef void
    (*glPNTrianglesfATIXProcPtr)(GLenum pname, GLfloat param);

  //  GL_NV_register_combiners
typedef void
    (*glCombinerParameterfvNVProcPtr)(GLenum pname,
        const GLfloat *params);
typedef void
    (*glCombinerParameterfNVProcPtr)(GLenum pname, GLfloat param);
typedef void
    (*glCombinerParameterivNVProcPtr)(GLenum pname,
        const GLint *params);
typedef void
    (*glCombinerParameteriNVProcPtr)(GLenum pname, GLint param);
typedef void
    (*glCombinerInputNVProcPtr)(GLenum stage, GLenum portion,
        GLenum variable, GLenum input, GLenum mapping,
        GLenum componentUsage);
typedef void
    (*glCombinerOutputNVProcPtr)(GLenum stage, GLenum portion,
        GLenum abOutput, GLenum cdOutput, GLenum sumOutput,
        GLenum scale, GLenum bias, GLboolean abDotProduct,
        GLboolean cdDotProduct, GLboolean muxSum);
typedef void
    (*glFinalCombinerInputNVProcPtr)(GLenum variable, GLenum input,
        GLenum mapping, GLenum componentUsage);
typedef void
    (*glGetCombinerInputParameterfvNVProcPtr)(GLenum stage,
        GLenum portion, GLenum variable, GLenum pname,
        GLfloat *params);
typedef void
    (*glGetCombinerInputParameterivNVProcPtr)(GLenum stage,
        GLenum portion, GLenum variable, GLenum pname, GLint *params);
typedef void
    (*glGetCombinerOutputParameterfvNVProcPtr)(GLenum stage,
        GLenum portion, GLenum pname, GLfloat *params);
typedef void
    (*glGetCombinerOutputParameterivNVProcPtr)(GLenum stage,
        GLenum portion, GLenum pname, GLint *params);
typedef void
    (*glGetFinalCombinerInputParameterfvNVProcPtr)(GLenum variable,
        GLenum pname, GLfloat *params);
typedef void
    (*glGetFinalCombinerInputParameterivNVProcPtr)(GLenum variable,
        GLenum pname, GLint *params);
// function pointer declarations
// Note: One could use the exact entry point names but would have
//       multiply defined symbols in Mac OS X 10.2 and later
//       pfXXX is chosen to represent 'pointer to function'

  // OpenGL 1.2
glBlendColorProcPtr pfglBlendColor = NULL;
glBlendEquationProcPtr pfglBlendEquation = NULL;
glDrawRangeElementsProcPtr pfglDrawRangeElements  = NULL;
glTexImage3DProcPtr pfglTexImage3D = NULL;
glTexSubImage3DProcPtr pfglTexSubImage3D = NULL;
glCopyTexSubImage3DProcPtr pfglCopyTexSubImage3D = NULL;

  // OpenGL 1.3
glLoadTransposeMatrixfProcPtr pfglLoadTransposeMatrixf = NULL;
glLoadTransposeMatrixdProcPtr pfglLoadTransposeMatrixd = NULL;
glMultTransposeMatrixfProcPtr pfglMultTransposeMatrixf = NULL;
glMultTransposeMatrixdProcPtr pfglMultTransposeMatrixd = NULL;
glActiveTextureProcPtr pfglActiveTexture = NULL;
glClientActiveTextureProcPtr pfglClientActiveTexture = NULL;
glMultiTexCoord1dProcPtr pfglMultiTexCoord1d = NULL;
glMultiTexCoord1dvProcPtr pfglMultiTexCoord1dv = NULL;
glMultiTexCoord1fProcPtr pfglMultiTexCoord1f = NULL;
glMultiTexCoord1fvProcPtr pfglMultiTexCoord1fv = NULL;
glMultiTexCoord1iProcPtr pfglMultiTexCoord1i = NULL;
glMultiTexCoord1ivProcPtr pfglMultiTexCoord1iv = NULL;
glMultiTexCoord1sProcPtr pfglMultiTexCoord1s = NULL;
glMultiTexCoord1svProcPtr pfglMultiTexCoord1sv = NULL;
glMultiTexCoord2dProcPtr pfglMultiTexCoord2d = NULL;
glMultiTexCoord2dvProcPtr pfglMultiTexCoord2dv = NULL;
glMultiTexCoord2fProcPtr pfglMultiTexCoord2f = NULL;
glMultiTexCoord2fvProcPtr pfglMultiTexCoord2fv = NULL;
glMultiTexCoord2iProcPtr pfglMultiTexCoord2i = NULL;
glMultiTexCoord2ivProcPtr pfglMultiTexCoord2iv = NULL;
glMultiTexCoord2sProcPtr pfglMultiTexCoord2s = NULL;
glMultiTexCoord2svProcPtr pfglMultiTexCoord2sv = NULL;
glMultiTexCoord3dProcPtr pfglMultiTexCoord3d = NULL;
glMultiTexCoord3dvProcPtr pfglMultiTexCoord3dv = NULL;
glMultiTexCoord3fProcPtr pfglMultiTexCoord3f = NULL;
glMultiTexCoord3fvProcPtr pfglMultiTexCoord3fv = NULL;
glMultiTexCoord3iProcPtr pfglMultiTexCoord3i = NULL;
glMultiTexCoord3ivProcPtr pfglMultiTexCoord3iv = NULL;
glMultiTexCoord3sProcPtr pfglMultiTexCoord3s = NULL;
glMultiTexCoord3svProcPtr pfglMultiTexCoord3sv = NULL;
glMultiTexCoord4dProcPtr pfglMultiTexCoord4d = NULL;
glMultiTexCoord4dvProcPtr pfglMultiTexCoord4dv = NULL;
glMultiTexCoord4fProcPtr pfglMultiTexCoord4f = NULL;
glMultiTexCoord4fvProcPtr pfglMultiTexCoord4fv = NULL;
glMultiTexCoord4iProcPtr pfglMultiTexCoord4i = NULL;
glMultiTexCoord4ivProcPtr pfglMultiTexCoord4iv = NULL;
glMultiTexCoord4sProcPtr pfglMultiTexCoord4s = NULL;
glMultiTexCoord4svProcPtr pfglMultiTexCoord4sv = NULL;
glCompressedTexImage3DProcPtr pfglCompressedTexImage3D = NULL;
glCompressedTexImage2DProcPtr pfglCompressedTexImage2D = NULL;
glCompressedTexImage1DProcPtr pfglCompressedTexImage1D = NULL;
glCompressedTexSubImage3DProcPtr pfglCompressedTexSubImage3D = NULL;
glCompressedTexSubImage2DProcPtr pfglCompressedTexSubImage2D = NULL;
glCompressedTexSubImage1DProcPtr pfglCompressedTexSubImage1D = NULL;
glGetCompressedTexImageProcPtr pfglGetCompressedTexImage = NULL;
glSampleCoverageProcPtr pfglSampleCoverage = NULL;
glSamplePassProcPtr pfglSamplePass = NULL;

  // glu
gluNurbsCallbackDataEXTProcPtr pfgluNurbsCallbackDataEXT = NULL;

  // GL_ARB_transpose_matrix
glLoadTransposeMatrixfARBProcPtr pfglLoadTransposeMatrixfARB = NULL;
glLoadTransposeMatrixdARBProcPtr pfglLoadTransposeMatrixdARB = NULL;
glMultTransposeMatrixfARBProcPtr pfglMultTransposeMatrixfARB = NULL;
glMultTransposeMatrixdARBProcPtr pfglMultTransposeMatrixdARB = NULL;

  // GL_ARB_texture_compression
glCompressedTexImage3DARBProcPtr pfglCompressedTexImage3DARB = NULL;
glCompressedTexImage2DARBProcPtr pfglCompressedTexImage2DARB = NULL;
glCompressedTexImage1DARBProcPtr pfglCompressedTexImage1DARB = NULL;
glCompressedTexSubImage3DARBProcPtr
    pfglCompressedTexSubImage3DARB = NULL;
glCompressedTexSubImage2DARBProcPtr
    pfglCompressedTexSubImage2DARB = NULL;
glCompressedTexSubImage1DARBProcPtr
    pfglCompressedTexSubImage1DARB = NULL;
glGetCompressedTexImageARBProcPtr
    pfglGetCompressedTexImageARB = NULL;

  // GL_ARB_multisample
glSampleCoverageARBProcPtr pfglSampleCoverageARB = NULL;
glSamplePassARBProcPtr pfglSamplePassARB = NULL;

  // GL_EXT_paletted_texture
glColorTableEXTProcPtr pfglColorTableEXT = NULL;
glColorSubTableEXTProcPtr pfglColorSubTableEXT = NULL;
glGetColorTableEXTProcPtr pfglGetColorTableEXT = NULL;
glGetColorTableParameterivEXTProcPtr
    pfglGetColorTableParameterivEXT = NULL;
glGetColorTableParameterfvEXTProcPtr
    pfglGetColorTableParameterfvEXT = NULL;

  // GL_EXT_secondary_color
glSecondaryColor3bEXTProcPtr pfglSecondaryColor3bEXT = NULL;
glSecondaryColor3bvEXTProcPtr pfglSecondaryColor3bvEXT = NULL;
glSecondaryColor3dEXTProcPtr pfglSecondaryColor3dEXT = NULL;
glSecondaryColor3dvEXTProcPtr pfglSecondaryColor3dvEXT = NULL;
glSecondaryColor3fEXTProcPtr pfglSecondaryColor3fEXT = NULL;
glSecondaryColor3fvEXTProcPtr pfglSecondaryColor3fvEXT = NULL;
glSecondaryColor3iEXTProcPtr pfglSecondaryColor3iEXT = NULL;
glSecondaryColor3ivEXTProcPtr pfglSecondaryColor3ivEXT = NULL;
glSecondaryColor3sEXTProcPtr pfglSecondaryColor3sEXT = NULL;
glSecondaryColor3svEXTProcPtr pfglSecondaryColor3svEXT = NULL;
glSecondaryColor3ubEXTProcPtr pfglSecondaryColor3ubEXT = NULL;
glSecondaryColor3ubvEXTProcPtr pfglSecondaryColor3ubvEXT = NULL;
glSecondaryColor3uiEXTProcPtr pfglSecondaryColor3uiEXT = NULL;
glSecondaryColor3uivEXTProcPtr pfglSecondaryColor3uivEXT = NULL;
glSecondaryColor3usEXTProcPtr pfglSecondaryColor3usEXT = NULL;
glSecondaryColor3usvEXTProcPtr pfglSecondaryColor3usvEXT = NULL;
glSecondaryColorPointerEXTProcPtr
    pfglSecondaryColorPointerEXT = NULL;

  // GL_ATIX_pn_triangles
glPNTrianglesiATIXProcPtr pfglPNTrianglesiATIX = NULL;
glPNTrianglesfATIXProcPtr pfglPNTrianglesfATIX = NULL;

  //  GL_NV_register_combiners
glCombinerParameterfvNVProcPtr pfglCombinerParameterfvNV = NULL;
glCombinerParameterfNVProcPtr pfglCombinerParameterfNV = NULL;
glCombinerParameterivNVProcPtr pfglCombinerParameterivNV = NULL;
glCombinerParameteriNVProcPtr pfglCombinerParameteriNV = NULL;
glCombinerInputNVProcPtr pfglCombinerInputNV = NULL;
glCombinerOutputNVProcPtr pfglCombinerOutputNV = NULL;
glFinalCombinerInputNVProcPtr pfglFinalCombinerInputNV = NULL;
glGetCombinerInputParameterfvNVProcPtr
    pfglGetCombinerInputParameterfvNV = NULL;
glGetCombinerInputParameterivNVProcPtr
        pfglGetCombinerInputParameterivNV = NULL;
glGetCombinerOutputParameterfvNVProcPtr
    pfglGetCombinerOutputParameterfvNV = NULL;
glGetCombinerOutputParameterivNVProcPtr
    pfglGetCombinerOutputParameterivNV = NULL;
glGetFinalCombinerInputParameterfvNVProcPtr
    pfglGetFinalCombinerInputParameterfvNV = NULL;
glGetFinalCombinerInputParameterivNVProcPtr
    pfglGetFinalCombinerInputParameterivNV = NULL;

// -------------------------

static OSStatus InitMissingCFMEntryPoints (void)
{
    OSStatus err = aglInitEntryPoints (); //init bundle
    if (noErr == err) {
        pfglBlendColor = (glBlendColorProcPtr)
                aglGetProcAddress ("glBlendColor");
        pfglBlendEquation = (glBlendEquationProcPtr)
                aglGetProcAddress("glBlendEquation");
        pfglDrawRangeElements = (glDrawRangeElementsProcPtr)
                aglGetProcAddress("glDrawRangeElements");
        pfglTexImage3D = (glTexImage3DProcPtr)
                aglGetProcAddress ("glTexImage3D");
        pfglTexSubImage3D = (glTexSubImage3DProcPtr)
                aglGetProcAddress ("glTexSubImage3D");
        pfglCopyTexSubImage3D = (glCopyTexSubImage3DProcPtr)
                aglGetProcAddress ("glCopyTexSubImage3D");
        pfglLoadTransposeMatrixf = (glLoadTransposeMatrixfProcPtr)
                aglGetProcAddress ("glLoadTransposeMatrixf");
        pfglLoadTransposeMatrixd = (glLoadTransposeMatrixdProcPtr)
                aglGetProcAddress ("glLoadTransposeMatrixd");
        pfglMultTransposeMatrixf = (glMultTransposeMatrixfProcPtr)
                aglGetProcAddress ("glMultTransposeMatrixf");
        pfglMultTransposeMatrixd = (glMultTransposeMatrixdProcPtr)
                aglGetProcAddress ("glMultTransposeMatrixd");
        pfglActiveTexture = (glActiveTextureProcPtr)
                aglGetProcAddress ("glActiveTexture");
        pfglClientActiveTexture = (glClientActiveTextureProcPtr)
                aglGetProcAddress ("glClientActiveTexture");
        pfglMultiTexCoord1d = (glMultiTexCoord1dProcPtr)
                aglGetProcAddress ("glMultiTexCoord1d");
        pfglMultiTexCoord1dv = (glMultiTexCoord1dvProcPtr)
                aglGetProcAddress ("glMultiTexCoord1dv");
        pfglMultiTexCoord1f = (glMultiTexCoord1fProcPtr)
                aglGetProcAddress ("glMultiTexCoord1f");
        pfglMultiTexCoord1fv = (glMultiTexCoord1fvProcPtr)
                aglGetProcAddress ("glMultiTexCoord1fv");
        pfglMultiTexCoord1i = (glMultiTexCoord1iProcPtr)
                aglGetProcAddress ("glMultiTexCoord1i");
        pfglMultiTexCoord1iv = (glMultiTexCoord1ivProcPtr)
                aglGetProcAddress ("glMultiTexCoord1iv");
        pfglMultiTexCoord1s = (glMultiTexCoord1sProcPtr)
                aglGetProcAddress ("glMultiTexCoord1s");
        pfglMultiTexCoord1sv = (glMultiTexCoord1svProcPtr)
                aglGetProcAddress ("glMultiTexCoord1sv");
        pfglMultiTexCoord2d = (glMultiTexCoord2dProcPtr)
                aglGetProcAddress ("glMultiTexCoord2d");
        pfglMultiTexCoord2dv = (glMultiTexCoord2dvProcPtr)
                aglGetProcAddress ("glMultiTexCoord2dv");
        pfglMultiTexCoord2f = (glMultiTexCoord2fProcPtr)
                aglGetProcAddress ("glMultiTexCoord2f");
        pfglMultiTexCoord2fv = (glMultiTexCoord2fvProcPtr)
                aglGetProcAddress ("glMultiTexCoord2fv");
        pfglMultiTexCoord2i = (glMultiTexCoord2iProcPtr)
                aglGetProcAddress ("glMultiTexCoord2i");
        pfglMultiTexCoord2iv = (glMultiTexCoord2ivProcPtr)
                aglGetProcAddress ("glMultiTexCoord2iv");
        pfglMultiTexCoord2s = (glMultiTexCoord2sProcPtr)
                aglGetProcAddress ("glMultiTexCoord2s");
        pfglMultiTexCoord2sv = (glMultiTexCoord2svProcPtr)
                aglGetProcAddress ("glMultiTexCoord2sv");
        pfglMultiTexCoord3d = (glMultiTexCoord3dProcPtr)
                aglGetProcAddress ("glMultiTexCoord3d");
        pfglMultiTexCoord3dv = (glMultiTexCoord3dvProcPtr)
                aglGetProcAddress ("glMultiTexCoord3dv");
        pfglMultiTexCoord3f = (glMultiTexCoord3fProcPtr)
                aglGetProcAddress ("glMultiTexCoord3f");
        pfglMultiTexCoord3fv = (glMultiTexCoord3fvProcPtr)
                aglGetProcAddress ("glMultiTexCoord3fv");
        pfglMultiTexCoord3i = (glMultiTexCoord3iProcPtr)
                aglGetProcAddress ("glMultiTexCoord3i");
        pfglMultiTexCoord3iv = (glMultiTexCoord3ivProcPtr)
                aglGetProcAddress ("glMultiTexCoord3iv");
        pfglMultiTexCoord3s = (glMultiTexCoord3sProcPtr)
                aglGetProcAddress ("glMultiTexCoord3s");
        pfglMultiTexCoord3sv = (glMultiTexCoord3svProcPtr)
                aglGetProcAddress ("glMultiTexCoord3sv");
        pfglMultiTexCoord4d = (glMultiTexCoord4dProcPtr)
                aglGetProcAddress ("glMultiTexCoord4d");
        pfglMultiTexCoord4dv = (glMultiTexCoord4dvProcPtr)
                aglGetProcAddress ("glMultiTexCoord4dv");
        pfglMultiTexCoord4f = (glMultiTexCoord4fProcPtr)
                aglGetProcAddress ("glMultiTexCoord4f");
        pfglMultiTexCoord4fv = (glMultiTexCoord4fvProcPtr)
                aglGetProcAddress ("glMultiTexCoord4fv");
        pfglMultiTexCoord4i = (glMultiTexCoord4iProcPtr)
                aglGetProcAddress ("glMultiTexCoord4i");
        pfglMultiTexCoord4iv = (glMultiTexCoord4ivProcPtr)
                aglGetProcAddress ("glMultiTexCoord4iv");
        pfglMultiTexCoord4s = (glMultiTexCoord4sProcPtr)
                aglGetProcAddress ("glMultiTexCoord4s");
        pfglMultiTexCoord4sv = (glMultiTexCoord4svProcPtr)
                aglGetProcAddress ("glMultiTexCoord4sv");
        pfglCompressedTexImage3D = (glCompressedTexImage3DProcPtr)
                aglGetProcAddress ("glCompressedTexImage3D");
        pfglCompressedTexImage2D = (glCompressedTexImage2DProcPtr)
                aglGetProcAddress ("glCompressedTexImage2D");
        pfglCompressedTexImage1D = (glCompressedTexImage1DProcPtr)
                aglGetProcAddress ("glCompressedTexImage1D");
        pfglCompressedTexSubImage3D =
            (glCompressedTexSubImage3DProcPtr)
                aglGetProcAddress ("glCompressedTexSubImage3D");
        pfglCompressedTexSubImage2D =
            (glCompressedTexSubImage2DProcPtr)
                aglGetProcAddress ("glCompressedTexSubImage2D");
        pfglCompressedTexSubImage1D =
            (glCompressedTexSubImage1DProcPtr)
                aglGetProcAddress ("glCompressedTexSubImage1D");
        pfglGetCompressedTexImage = (glGetCompressedTexImageProcPtr)
                aglGetProcAddress ("glGetCompressedTexImage");
        pfglSampleCoverage = (glSampleCoverageProcPtr)
                aglGetProcAddress ("glSampleCoverage");
        pfglSamplePass = (glSamplePassProcPtr)
                aglGetProcAddress ("glSamplePass");
        pfgluNurbsCallbackDataEXT = (gluNurbsCallbackDataEXTProcPtr)
                aglGetProcAddress ("gluNurbsCallbackDataEXT");
        pfglLoadTransposeMatrixfARB =
            (glLoadTransposeMatrixfARBProcPtr)
                aglGetProcAddress ("glLoadTransposeMatrixfARB");
        pfglLoadTransposeMatrixdARB =
            (glLoadTransposeMatrixdARBProcPtr)
                aglGetProcAddress ("glLoadTransposeMatrixdARB");
        pfglMultTransposeMatrixfARB =
            (glMultTransposeMatrixfARBProcPtr)
                aglGetProcAddress ("glMultTransposeMatrixfARB");
        pfglMultTransposeMatrixdARB =
            (glMultTransposeMatrixdARBProcPtr)
                aglGetProcAddress ("glMultTransposeMatrixdARB");
        pfglCompressedTexImage3DARB =
            (glCompressedTexImage3DARBProcPtr)
                aglGetProcAddress ("glCompressedTexImage3DARB");
        pfglCompressedTexImage2DARB =
            (glCompressedTexImage2DARBProcPtr)
                aglGetProcAddress ("glCompressedTexImage2DARB");
        pfglCompressedTexImage1DARB =
            (glCompressedTexImage1DARBProcPtr)
                aglGetProcAddress ("glCompressedTexImage1DARB");
        pfglCompressedTexSubImage3DARB =
            (glCompressedTexSubImage3DARBProcPtr)
                aglGetProcAddress ("glCompressedTexSubImage3DARB");
        pfglCompressedTexSubImage2DARB =
            (glCompressedTexSubImage2DARBProcPtr)
                aglGetProcAddress ("glCompressedTexSubImage2DARB");
        pfglCompressedTexSubImage1DARB =
            (glCompressedTexSubImage1DARBProcPtr)
                aglGetProcAddress ("glCompressedTexSubImage1DARB");
        pfglGetCompressedTexImageARB =
            (glGetCompressedTexImageARBProcPtr)
                aglGetProcAddress ("glGetCompressedTexImageARB");
        pfglSampleCoverageARB = (glSampleCoverageARBProcPtr)
                aglGetProcAddress ("glSampleCoverageARB");
        pfglSamplePassARB = (glSamplePassARBProcPtr)
                aglGetProcAddress ("glSamplePassARB");
        pfglColorTableEXT = (glColorTableEXTProcPtr)
                aglGetProcAddress ("glColorTableEXT");
        pfglColorSubTableEXT = (glColorSubTableEXTProcPtr)
                aglGetProcAddress ("glColorSubTableEXT");
        pfglGetColorTableEXT = (glGetColorTableEXTProcPtr)
                aglGetProcAddress ("glGetColorTableEXT");
        pfglGetColorTableParameterivEXT =
            (glGetColorTableParameterivEXTProcPtr)
                aglGetProcAddress ("glGetColorTableParameterivEXT");
        pfglGetColorTableParameterfvEXT =
            (glGetColorTableParameterfvEXTProcPtr)
                aglGetProcAddress ("glGetColorTableParameterfvEXT");
        pfglSecondaryColor3bEXT = (glSecondaryColor3bEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3bEXT");
        pfglSecondaryColor3bvEXT = (glSecondaryColor3bvEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3bvEXT");
        pfglSecondaryColor3dEXT = (glSecondaryColor3dEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3dEXT");
        pfglSecondaryColor3dvEXT = (glSecondaryColor3dvEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3dvEXT");
        pfglSecondaryColor3fEXT = (glSecondaryColor3fEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3fEXT");
        pfglSecondaryColor3fvEXT = (glSecondaryColor3fvEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3fvEXT");
        pfglSecondaryColor3iEXT = (glSecondaryColor3iEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3iEXT");
        pfglSecondaryColor3ivEXT = (glSecondaryColor3ivEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3ivEXT");
        pfglSecondaryColor3sEXT = (glSecondaryColor3sEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3sEXT");
        pfglSecondaryColor3svEXT = (glSecondaryColor3svEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3svEXT");
        pfglSecondaryColor3ubEXT = (glSecondaryColor3ubEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3ubEXT");
        pfglSecondaryColor3ubvEXT = (glSecondaryColor3ubvEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3ubvEXT");
        pfglSecondaryColor3uiEXT = (glSecondaryColor3uiEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3uiEXT");
        pfglSecondaryColor3uivEXT = (glSecondaryColor3uivEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3uivEXT");
        pfglSecondaryColor3usEXT = (glSecondaryColor3usEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3usEXT");
        pfglSecondaryColor3usvEXT = (glSecondaryColor3usvEXTProcPtr)
                aglGetProcAddress ("glSecondaryColor3usvEXT");
        pfglSecondaryColorPointerEXT =
            (glSecondaryColorPointerEXTProcPtr)
                aglGetProcAddress ("glSecondaryColorPointerEXT");
        pfglPNTrianglesiATIX = (glPNTrianglesiATIXProcPtr)
                aglGetProcAddress ("glPNTrianglesiATIX");
        pfglPNTrianglesfATIX = (glPNTrianglesfATIXProcPtr)
                aglGetProcAddress ("glPNTrianglesfATIX");
        pfglCombinerParameterfvNV = (glCombinerParameterfvNVProcPtr)
                aglGetProcAddress ("glCombinerParameterfvNV");
        pfglCombinerParameterfNV = (glCombinerParameterfNVProcPtr)
                aglGetProcAddress ("glCombinerParameterfNV");
        pfglCombinerParameterivNV = (glCombinerParameterivNVProcPtr)
                aglGetProcAddress ("glCombinerParameterivNV");
        pfglCombinerParameteriNV = (glCombinerParameteriNVProcPtr)
                aglGetProcAddress ("glCombinerParameteriNV");
        pfglCombinerInputNV = (glCombinerInputNVProcPtr)
                aglGetProcAddress ("glCombinerInputNV");
        pfglCombinerOutputNV = (glCombinerOutputNVProcPtr)
                aglGetProcAddress ("glCombinerOutputNV");
        pfglFinalCombinerInputNV = (glFinalCombinerInputNVProcPtr)
                aglGetProcAddress ("glFinalCombinerInputNV");
        pfglGetCombinerInputParameterfvNV =
            (glGetCombinerInputParameterfvNVProcPtr)
                aglGetProcAddress ("glGetCombinerInputParameterfvNV");
        pfglGetCombinerInputParameterivNV =
            (glGetCombinerInputParameterivNVProcPtr)
                aglGetProcAddress ("glGetCombinerInputParameterivNV");
        pfglGetCombinerOutputParameterfvNV =
            (glGetCombinerOutputParameterfvNVProcPtr)
                aglGetProcAddress ("glGetCombinerOutputParameterfvNV");
        pfglGetCombinerOutputParameterivNV =
            (glGetCombinerOutputParameterivNVProcPtr)
                aglGetProcAddress ("glGetCombinerOutputParameterivNV");
        pfglGetFinalCombinerInputParameterfvNV =
            (glGetFinalCombinerInputParameterfvNVProcPtr)
                aglGetProcAddress
                    ("glGetFinalCombinerInputParameterfvNV");
        pfglGetFinalCombinerInputParameterivNV =
            (glGetFinalCombinerInputParameterivNVProcPtr)
                aglGetProcAddress
                    ("glGetFinalCombinerInputParameterivNV");
    }
    return err;
}

// -------------------------

static void DeallocMissingCFMEntryPoints (void)
{
    pfglBlendColor = NULL;
    pfglBlendEquation = NULL;
    pfglDrawRangeElements = NULL;;
    pfglTexImage3D = NULL;
    pfglTexSubImage3D = NULL;
    pfglCopyTexSubImage3D = NULL;
    pfglLoadTransposeMatrixf = NULL;
    pfglLoadTransposeMatrixd = NULL;
    pfglMultTransposeMatrixf = NULL;
    pfglMultTransposeMatrixd = NULL;
    pfglActiveTexture = NULL;
    pfglClientActiveTexture = NULL;
    pfglMultiTexCoord1d = NULL;
    pfglMultiTexCoord1dv = NULL;
    pfglMultiTexCoord1f = NULL;
    pfglMultiTexCoord1fv = NULL;
    pfglMultiTexCoord1i = NULL;
    pfglMultiTexCoord1iv = NULL;
    pfglMultiTexCoord1s = NULL;
    pfglMultiTexCoord1sv = NULL;
    pfglMultiTexCoord2d = NULL;
    pfglMultiTexCoord2dv = NULL;
    pfglMultiTexCoord2f = NULL;
    pfglMultiTexCoord2fv = NULL;
    pfglMultiTexCoord2i = NULL;
    pfglMultiTexCoord2iv = NULL;
    pfglMultiTexCoord2s = NULL;
    pfglMultiTexCoord2sv = NULL;
    pfglMultiTexCoord3d = NULL;
    pfglMultiTexCoord3dv = NULL;
    pfglMultiTexCoord3f = NULL;
    pfglMultiTexCoord3fv = NULL;
    pfglMultiTexCoord3i = NULL;
    pfglMultiTexCoord3iv = NULL;
    pfglMultiTexCoord3s = NULL;
    pfglMultiTexCoord3sv = NULL;
    pfglMultiTexCoord4d = NULL;
    pfglMultiTexCoord4dv = NULL;
    pfglMultiTexCoord4f = NULL;
    pfglMultiTexCoord4fv = NULL;
    pfglMultiTexCoord4i = NULL;
    pfglMultiTexCoord4iv = NULL;
    pfglMultiTexCoord4s = NULL;
    pfglMultiTexCoord4sv = NULL;
    pfglCompressedTexImage3D = NULL;
    pfglCompressedTexImage2D = NULL;
    pfglCompressedTexImage1D = NULL;
    pfglCompressedTexSubImage3D = NULL;
    pfglCompressedTexSubImage2D = NULL;
    pfglCompressedTexSubImage1D = NULL;
    pfglGetCompressedTexImage = NULL;
    pfglSampleCoverage = NULL;
    pfglSamplePass = NULL;
    pfgluNurbsCallbackDataEXT = NULL;
    pfglLoadTransposeMatrixfARB = NULL;
    pfglLoadTransposeMatrixdARB = NULL;
    pfglMultTransposeMatrixfARB = NULL;
    pfglMultTransposeMatrixdARB = NULL;
    pfglCompressedTexImage3DARB = NULL;
    pfglCompressedTexImage2DARB = NULL;
    pfglCompressedTexImage1DARB = NULL;
    pfglCompressedTexSubImage3DARB = NULL;
    pfglCompressedTexSubImage2DARB = NULL;
    pfglCompressedTexSubImage1DARB = NULL;
    pfglGetCompressedTexImageARB = NULL;
    pfglSampleCoverageARB = NULL;
    pfglSamplePassARB = NULL;
    pfglColorTableEXT = NULL;
    pfglColorSubTableEXT = NULL;
    pfglGetColorTableEXT = NULL;
    pfglGetColorTableParameterivEXT = NULL;
    pfglGetColorTableParameterfvEXT = NULL;
    pfglSecondaryColor3bEXT = NULL;
    pfglSecondaryColor3bvEXT = NULL;
    pfglSecondaryColor3dEXT = NULL;
    pfglSecondaryColor3dvEXT = NULL;
    pfglSecondaryColor3fEXT = NULL;
    pfglSecondaryColor3fvEXT = NULL;
    pfglSecondaryColor3iEXT = NULL;
    pfglSecondaryColor3ivEXT = NULL;
    pfglSecondaryColor3sEXT = NULL;
    pfglSecondaryColor3svEXT = NULL;
    pfglSecondaryColor3ubEXT = NULL;
    pfglSecondaryColor3ubvEXT = NULL;
    pfglSecondaryColor3uiEXT = NULL;
    pfglSecondaryColor3uivEXT = NULL;
    pfglSecondaryColor3usEXT = NULL;
    pfglSecondaryColor3usvEXT = NULL;
    pfglSecondaryColorPointerEXT = NULL;
    pfglPNTrianglesiATIX = NULL;
    pfglPNTrianglesfATIX = NULL;
    pfglCombinerParameterfvNV = NULL;
    pfglCombinerParameterfNV = NULL;
    pfglCombinerParameterivNV = NULL;
    pfglCombinerParameteriNV = NULL;
    pfglCombinerInputNV = NULL;
    pfglCombinerOutputNV = NULL;
    pfglFinalCombinerInputNV = NULL;
    pfglGetCombinerInputParameterfvNV = NULL;
    pfglGetCombinerInputParameterivNV = NULL;
    pfglGetCombinerOutputParameterfvNV = NULL;
    pfglGetCombinerOutputParameterivNV = NULL;
    pfglGetFinalCombinerInputParameterfvNV = NULL;
    pfglGetFinalCombinerInputParameterivNV = NULL;
    aglDellocEntryPoints (); // dump bundle
}


// ==========================

// example function calls...
// (initialization details removed)

    pfglLoadTransposeMatrixf (faddr);
    pfglLoadTransposeMatrixfARB (faddr);
    pfglCombinerParameterfvNV (enumparam, faddr);

Listing 2. Finding Missing CFM Entry Points


As always, before calling any entry point (whether dynamically loaded or not), your OpenGL application should check the current renderer version or extensions string to confirm that the extensions it needs are supported. The existence of the link time or runtime entry point is not an indication of specific extension support within a specific renderer.


[Dec 23 2002]


Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.