# This .cfg file is used to generate the interface and implementing
# class for the GLX extensions.
JavaOutputDir gensrc/classes
NativeOutputDir gensrc/native/jogl/X11

Package jogamp.opengl.x11.glx
Style InterfaceAndImpl
JavaClass GLXExt
ImplPackage jogamp.opengl.x11.glx
ImplJavaClass GLXExtImpl

ExtendedInterfaceSymbolsIgnore ../build-temp/gensrc/classes/jogamp/opengl/x11/glx/GLX.java
Include gl-common.cfg
Include gl-desktop.cfg

GLHeader GL/glx.h
GLHeader GL/glxext.h

EmitProcAddressTable true
ProcAddressTableClassName GLXExtProcAddressTable
GetProcAddressTableExpr _context.getGLXExtProcAddressTable()

Import jogamp.nativewindow.x11.*

# Ignore everything that doesn't start with glX or GLX
IgnoreNot ^(glX|GLX).+

Include gl-headers.cfg
Include ../intptr.cfg

CustomCCode /* Provide Windows typedefs */
CustomCCode typedef void* LPVOID;
CustomCCode typedef unsigned int* PUINT;

CustomJavaCode GLXExt      public boolean isFunctionAvailable(String glFunctionName);
CustomJavaCode GLXExt      public boolean isExtensionAvailable(String glExtensionName);

CustomJavaCode GLXExtImpl  public GLXExtImpl(X11GLXContext context) {
CustomJavaCode GLXExtImpl    this._context = context; 
CustomJavaCode GLXExtImpl  }

CustomJavaCode GLXExtImpl  public boolean isFunctionAvailable(String glFunctionName)
CustomJavaCode GLXExtImpl  {
CustomJavaCode GLXExtImpl    return _context.isFunctionAvailable(glFunctionName);
CustomJavaCode GLXExtImpl  }

CustomJavaCode GLXExtImpl  public boolean isExtensionAvailable(String glExtensionName)
CustomJavaCode GLXExtImpl  {
CustomJavaCode GLXExtImpl    return _context.isExtensionAvailable(glExtensionName);
CustomJavaCode GLXExtImpl  }

CustomJavaCode GLXExtImpl  private X11GLXContext _context;


# These Ignores cause the core GLX routines to be ignored from the
# GLXExt interface and GLXExtImpl implementing class.
Ignore glXGetVisualFromFBConfig
Ignore glXGetVisualFromFBConfigSGIX
Ignore glXChooseFBConfig
Ignore glXChooseVisual
Ignore glXCreateContext
Ignore glXDestroyContext
Ignore glXMakeCurrent
Ignore glXCopyContext
Ignore glXSwapBuffers
Ignore glXCreateGLXPixmap
Ignore glXDestroyGLXPixmap
Ignore glXQueryExtension
Ignore glXQueryVersion
Ignore glXIsDirect
Ignore glXGetConfig
Ignore glXGetCurrentContext
Ignore glXGetCurrentDrawable
Ignore glXWaitGL
Ignore glXWaitX
Ignore glXUseXFont
Ignore glXQueryExtensionsString
Ignore glXQueryServerString
Ignore glXGetClientString
Ignore glXGetCurrentDisplay
Ignore glXChooseFBConfig
Ignore glXGetFBConfigAttrib
Ignore glXGetFBConfigs
Ignore glXGetVisualFromFBConfig
Ignore glXCreateWindow
Ignore glXDestroyWindow
Ignore glXCreatePixmap
Ignore glXDestroyPixmap
Ignore glXCreatePbuffer
Ignore glXDestroyPbuffer
Ignore glXQueryDrawable
Ignore glXCreateNewContext
Ignore glXMakeContextCurrent
Ignore glXGetCurrentReadDrawable
Ignore glXQueryContext
Ignore glXSelectEvent
Ignore glXGetSelectedEvent

# Ignore a few extensions that bring in data types we don't want to
# expose in the public API (and that are useless anyway without
# exposing more of the implementation)
Ignore glXGetFBConfigAttribSGIX
Ignore glXChooseFBConfigSGIX
Ignore glXCreateGLXPixmapWithConfigSGIX
Ignore glXCreateContextWithConfigSGIX
Ignore glXGetVisualFromFBConfigSGIX
Ignore glXGetFBConfigFromVisualSGIX
Ignore glXCreateGLXPbufferSGIX
Ignore glXDestroyGLXPbufferSGIX
Ignore glXQueryGLXPbufferSGIX
Ignore glXSelectEventSGIX
Ignore glXGetSelectedEventSGIX
Ignore glXCreateGLXPixmapMESA

Opaque long GLXFBConfig

# Now we can ignore the GLXFBConfig and XVisualInfo data types
# Ignore GLXFBConfig
Ignore XVisualInfo

# Ignore the SGI hyperpipe extension, which will require more GlueGen
# work to expose the pipeName fields in the various structs
Ignore glXQueryHyperpipeNetworkSGIX
Ignore glXHyperpipeConfigSGIX
Ignore glXQueryHyperpipeConfigSGIX
Ignore glXDestroyHyperpipeConfigSGIX
Ignore glXBindHyperpipeSGIX
Ignore glXQueryHyperpipeBestAttribSGIX
Ignore glXHyperpipeAttribSGIX
Ignore glXQueryHyperpipeAttribSGIX
Ignore GLXHyperpipeNetworkSGIX
Ignore GLXHyperpipeConfigSGIX
Ignore GLXPipeRect
Ignore GLXPipeRectLimits