# This .cfg file is used to generate the interface to the GLX routines
# used internally by the X11GLContext implementation.
JavaOutputDir gensrc/classes
NativeOutputDir gensrc/native/jogl/X11

#GLSemHeader GL/gl.h
#GLSemHeader GL/glext-supplement.h
#GLSemHeader GL/glext.h
GLSemHeader gl-types.h
GLSemHeader GL/glx.h
GLSemHeader GL/glxext.h

Package jogamp.opengl.x11.glx
JavaClass GLX
Style AllStatic
Include gl-common.cfg
Include gl-desktop.cfg

# Only NIO direct function, no arrays ..
NIOOnly __ALL__
NIODirectOnly __ALL__

ForceProcAddressGen __ALL__
LocalProcAddressCallingConvention __ALL__ APIENTRY

EmitProcAddressTable true
ProcAddressTableClassName GLXProcAddressTable
GetProcAddressTableExpr glxProcAddressTable

Import jogamp.nativewindow.x11.*
Import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver

CustomJavaCode GLX private static GLXProcAddressTable glxProcAddressTable = new GLXProcAddressTable(new GLProcAddressResolver());
CustomJavaCode GLX public  static GLXProcAddressTable getGLXProcAddressTable() { return glxProcAddressTable; }

IncludeAs CustomJavaCode GLX glx-CustomJavaCode.java

Include glx-headers.cfg
IncludeAs CustomCCode        glx-CustomCCode.c

ArgumentIsString XOpenDisplay 0

Opaque long GLXFBConfig

Ignore glXCreateContextAttribsARB

#
# We have manual code for the following (copying the return values)
Ignore glXGetVisualFromFBConfigSGIX
ManuallyImplement glXGetVisualFromFBConfig
ManuallyImplement glXChooseFBConfig
ManuallyImplement glXGetFBConfigs
ManuallyImplement glXChooseVisual
ForceProcAddressGen glXGetVisualFromFBConfig
ForceProcAddressGen glXChooseFBConfig
ForceProcAddressGen glXGetFBConfigs
ForceProcAddressGen glXChooseVisual

# Ignore everything not in the GLX core (up through GLX 1.4)
# FIXME: this needs to be kept in sync with the stub headers more than usual
Ignore glXFreeContextEXT
Ignore glXGetContextIDEXT
Ignore glXGetCurrentDisplayEXT
Ignore glXImportContextEXT
Ignore glXQueryContextInfoEXT

Ignore glXGetSyncValues
Ignore glXGetMscRate
Ignore glXSwapBuffersMsc
Ignore glXWaitForMsc
Ignore glXWaitForSbc

# Ignore non-GLX GL routines and constants
Ignore ^GL_.+
Ignore TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB
Ignore CLAMP_TO_EDGE_EXT
Ignore ^gl[^X].+
Ignore ^X.+
Ignore ^Visual.+

IgnoreExtension GLX_EXT_texture_from_pixmap
IgnoreExtension GLX_OML_sync_control
IgnoreExtension GLX_OML_swap_method

DropUniqVendorExtensions AMD
# We need GL_APPLE_float_pixels for our pbuffer implementation
# DropUniqVendorExtensions APPLE
DropUniqVendorExtensions ATI
DropUniqVendorExtensions HP
DropUniqVendorExtensions IBM
DropUniqVendorExtensions MESA
DropUniqVendorExtensions MESAX
DropUniqVendorExtensions NV
DropUniqVendorExtensions SGI
DropUniqVendorExtensions SGIS
DropUniqVendorExtensions SGIX
DropUniqVendorExtensions SUN
DropUniqVendorExtensions WIN

# Ignore the SGI hyperpipe extension, which will require more GlueGen
# work to expose the pipeName fields in the various structs
Ignore GLXHyperpipeNetworkSGIX
Ignore GLXHyperpipeConfigSGIX
Ignore GLXPipeRect
Ignore GLXPipeRectLimits

CustomJavaCode GLX  static long glXGetProcAddress(long glXGetProcAddressHandle, java.lang.String procname)
CustomJavaCode GLX  {
CustomJavaCode GLX    if (glXGetProcAddressHandle == 0) {
CustomJavaCode GLX      throw new GLException("Passed null pointer for method \"glXGetProcAddress\"");
CustomJavaCode GLX    }
CustomJavaCode GLX    return dispatch_glXGetProcAddress0(procname, glXGetProcAddressHandle);
CustomJavaCode GLX  }

