In your message of 8 September 1999 you write:

> >   * Should GetProcAddressEXT allow querying of itself?
> >
> >   * There's a recursion problem with this feature.  The purpose of
> >     GetProcAddressEXT is to return pointers to extension functions
> >     and GetProcAddressEXT is itself such a function!  This presents
> >     a puzzle to the application developer.
> 
>     GetProcAddressEXT must be exported from the libGL described by the
> standard. The only extensions which *have* to be queried for in this
> fashion are those added to a loadable driver module after the base libGL
> it's loaded by is shipped. Exactly how we draw the line is unclear. In
> the Windows world, only a handful of extensions are supplied in
> OPENGL32.DLL, and everything else needs to be queried.

I would strongly opt for having the few entry points that the OpenGL
1.1 SI added there, as well as the texturing extensions to OpenGL
1.0. Our experiance with customers who are proting down from other
platforms has been that those are considered very core. 

Explicitely the entry points are:

        glAreTexturesResidentEXT
        glBindTextureEXT
        glCopyTexImage1DEXT
        glCopyTexImage2DEXT
        glCopyTexSubImage1DEXT
        glCopyTexSubImage2DEXT
        glDeleteTexturesEXT
        glGenTexturesEXT
        glIsTextureEXT
        glPrioritizeTexturesEXT
        glTexSubImage1DEXT
        glTexSubImage2DEXT

        glBlendColorEXT
        glBlendEquationEXT
        
Also I would love to see the ARB_multitexture API entry points see to
be available as directly callable functions, as those are VERY widely
used.

        glActiveTextureARB
        glClientActiveTextureARB
        glMultiTexCoord1dARB
        glMultiTexCoord1dvARB
        glMultiTexCoord1fARB
        glMultiTexCoord1fvARB
        glMultiTexCoord1iARB
        glMultiTexCoord1ivARB
        glMultiTexCoord1sARB
        glMultiTexCoord1svARB
        glMultiTexCoord2dARB
        glMultiTexCoord2dvARB
        glMultiTexCoord2fARB
        glMultiTexCoord2fvARB
        glMultiTexCoord2iARB
        glMultiTexCoord2ivARB
        glMultiTexCoord2sARB
        glMultiTexCoord2svARB
        glMultiTexCoord3dARB
        glMultiTexCoord3dvARB
        glMultiTexCoord3fARB
        glMultiTexCoord3fvARB
        glMultiTexCoord3iARB
        glMultiTexCoord3ivARB
        glMultiTexCoord3sARB
        glMultiTexCoord3svARB
        glMultiTexCoord4dARB
        glMultiTexCoord4dvARB
        glMultiTexCoord4fARB
        glMultiTexCoord4fvARB
        glMultiTexCoord4iARB
        glMultiTexCoord4ivARB
        glMultiTexCoord4sARB
        glMultiTexCoord4svARB

> > Additions to Chapter 6 of the OpenGL 1.2 Specification (State and State
> > Requests)
> >
> >     Add a new section numbered 6.1.13:
> >
> >     6.1.13 Obtaining Extension Function Pointers
> >
> >     The GL extensions which are available to a client application can
> >     only be determined at runtime.  Therefore, the address of extension
> >     functions should be queried at runtime.
> 
>     We need to be crystal clear on exactly which GL (and GLX) functions
> can be queried, or implementations will make bad choices. An easy way to
> lock in apps might be for an OpenGL implementation to expose a critical
> extension in libGL but *not* via the query; an app calling this
> extension directly would not run on another implementation exporting it
> only dynamically. Instead it would fail catastrophically when calling
> the unresolved entry point, which could then be blamed on the driver
> although the driver would be doing exactly what it should. Both ISVs and
> GL implementors will need to be sensitive to this.

All extension functions should be ALWAYS retrieveable by
GetProcAddressEXT(). It should be also clear that with the exception
of a base set of directly callable extension functions this is the
only portable way for access the functions.


I would also love to have a stetement added that if GetProcAccessEXT()
returns a non-NULL pointer to an extension function, that this does
not imply that the extension is usable. The presence of an extension
should be determinded by
glGetString()/glXQueryExtensionsString(). Rationale is that a GLX
based libGL.so has to have the encoding/decoding part for the
extension, while the X-Server side 3D pipeline might not support the
extension.

>     Also, an emerging use of wglGetProcAddress() is to return pointers
> to OpenGL 1.2 core functions. While this exact scenario is unlikely to
> arise on Linux, we should still be very clear up front about whether
> non-EXT functions can be queried.

Please let's avoid this. It would be intresting to know as to why
people are using this approach.

> >     The function
> >         void *GetProcAddressEXT(const ubyte *procName);
> >     returns the address of the extension function named by procName.
> >     NULL is returned if the named function is not available.
> >
> >     The pointer returned by GetProcAddressEXT should be cast to a
> >     function type which matches the extension function's definition.
> >
> >     Functions which are extensions to the GL window system interface
> >     (such as GLX and WGL) are also obtainable with GetProcAddressEXT.
> 
>     Also note that the returned pointer is only valid when the current
> context is the same as the context to which the GL was connected when
> the pointer was obtained.

What is the rationale for this constraint ? 

Would this imply what for every context that is created a seperate
pointer had to be queried ? 

- Thomas
-- 
             Thomas Roell   /\         An imperfect plan executed violently
             Xi Graphics   /  \/\ _     is far superior to a perfect plan. 
         [EMAIL PROTECTED]   /   /  \ \     
                         / Oelch! \ \             George Patton

Reply via email to