# This .cfg file is used to generate the interface to the GLX routines
# used internally by the X11GLContext implementation.
Package com.sun.opengl.impl.x11
JavaClass GLX
Style allstatic
Include gl-common-x11.cfg

EmitProcAddressTable true
ProcAddressTableClassName GLXProcAddressTable
GetProcAddressTableExpr glxProcAddressTable
# This must be present for bootstrapping
SkipProcAddressGen glXGetProcAddressARB

CustomJavaCode GLX private static GLXProcAddressTable glxProcAddressTable = new GLXProcAddressTable();
CustomJavaCode GLX public  static GLXProcAddressTable getGLXProcAddressTable() { return glxProcAddressTable; }
CustomJavaCode GLX public static native long dlopen(String name);
CustomJavaCode GLX public static native long dlsym(String name);

IncludeAs CustomCCode glx-CustomCCode.c

ArgumentIsString XOpenDisplay 0

# Need to expose DefaultScreen and RootWindow macros to Java
CustomJavaCode GLX public static native int  DefaultScreen(long display);
CustomJavaCode GLX public static native long RootWindow(long display, int screen);

# Get returned array's capacity from XGetVisualInfo to be correct
TemporaryCVariableDeclaration XGetVisualInfo int count;
TemporaryCVariableAssignment  XGetVisualInfo count = _ptr3[0];
ReturnValueCapacity XGetVisualInfo               count * sizeof(XVisualInfo)

# Helper routine to make the ReturnedArrayLength expression below work correctly
CustomJavaCode GLX private static int getFirstElement(java.nio.IntBuffer buf){ return buf.get(buf.position()); }
CustomJavaCode GLX private static int getFirstElement(int[] arr, int offset) { return arr[offset]; }
ReturnedArrayLength XGetVisualInfo               getFirstElement({3})
ReturnValueCapacity glXChooseVisual              sizeof(XVisualInfo)
ReturnValueCapacity glXGetVisualFromFBConfig     sizeof(XVisualInfo)
ReturnValueCapacity glXGetVisualFromFBConfigSGIX sizeof(XVisualInfo)

# Ignore everything not in the GLX core (up through GLX 1.4) aside from glXGetProcAddress
# 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 glXCopySubBufferMESA
Ignore glXCreateGLXPixmapMESA
Ignore glXReleaseBuffersMESA
Ignore glXSet3DfxModeMESA

Ignore glXGetSyncValuesOML
Ignore glXGetMscRateOML
Ignore glXSwapBuffersMscOML
Ignore glXWaitForMscOML
Ignore glXWaitForSbcOML

Ignore glXAllocateMemoryNV
Ignore glXFreeMemoryNV

Ignore glXCushionSGI
Ignore glXGetVideoSyncSGI
Ignore glXWaitVideoSyncSGI
Ignore glXSwapIntervalSGI
Ignore glXMakeCurrentReadSGI
Ignore glXGetCurrentReadDrawableSGI

Ignore glXCreateGLXVideoSourceSGIX
Ignore glXDestroyGLXVideoSourceSGIX
Ignore glXGetFBConfigAttribSGIX
Ignore glXChooseFBConfigSGIX
Ignore glXCreateGLXPixmapWithConfigSGIX
Ignore glXCreateContextWithConfigSGIX
Ignore glXGetVisualFromFBConfigSGIX
Ignore glXGetFBConfigFromVisualSGIX
Ignore glXCreateGLXPbufferSGIX
Ignore glXDestroyGLXPbufferSGIX
Ignore glXQueryGLXPbufferSGIX
Ignore glXSelectEventSGIX
Ignore glXGetSelectedEventSGIX
Ignore glXBindChannelToWindowSGIX
Ignore glXChannelRectSGIX
Ignore glXQueryChannelRectSGIX
Ignore glXQueryChannelDeltasSGIX
Ignore glXChannelRectSyncSGIX
Ignore glXAssociateDMPbufferSGIX
Ignore glXJoinSwapGroupSGIX
Ignore glXBindSwapBarrierSGIX
Ignore glXQueryMaxSwapBarriersSGIX

Ignore glXGetTransparentIndexSUN

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