/* * Mesa 3-D graphics library * * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. * Copyright (C) 2009 VMware, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ /** * glXGetProcAddress() */ #define GLX_GLXEXT_PROTOTYPES #include <string.h> #include "pipe/p_compiler.h" #include "GL/glx.h" #include "glapi/glapi.h" struct name_address_pair { const char *Name; __GLXextFuncPtr Address; }; static struct name_address_pair GLX_functions[] = { /*** GLX_VERSION_1_0 ***/ { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual }, { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext }, { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext }, { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap }, { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext }, { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap }, { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig }, { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext }, { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable }, { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect }, { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent }, { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension }, { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion }, { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers }, { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont }, { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL }, { "glXWaitX", (__GLXextFuncPtr) glXWaitX }, /*** GLX_VERSION_1_1 ***/ { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString }, { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString }, { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString }, /*** GLX_VERSION_1_2 ***/ { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay }, /*** GLX_VERSION_1_3 ***/ { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig }, { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext }, { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer }, { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap }, { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow }, { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer }, { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap }, { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow }, { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable }, { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib }, { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs }, { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent }, { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig }, { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent }, { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext }, { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable }, { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent }, /*** GLX_VERSION_1_4 ***/ { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress }, /*** GLX_SGI_swap_control ***/ { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI }, /*** GLX_SGI_video_sync ***/ { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI }, { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI }, /*** GLX_SGI_make_current_read ***/ { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI }, { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI }, /*** GLX_SGIX_video_source ***/ #if defined(_VL_H) { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX }, { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX }, #endif /*** GLX_EXT_import_context ***/ { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT }, { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT }, { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT }, { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT }, { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT }, /*** GLX_SGIX_fbconfig ***/ { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX }, { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX }, { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX }, { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX }, { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX }, { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX }, /*** GLX_SGIX_pbuffer ***/ { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX }, { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX }, { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX }, { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX }, { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX }, /*** GLX_SGI_cushion ***/ { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI }, /*** GLX_SGIX_video_resize ***/ { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX }, { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX }, { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX }, { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX }, { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX }, /*** GLX_SGIX_dmbuffer **/ #if defined(_DM_BUFFER_H_) { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX }, #endif /*** GLX_SGIX_swap_group ***/ { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX }, /*** GLX_SGIX_swap_barrier ***/ { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX }, { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX }, /*** GLX_SUN_get_transparent_index ***/ { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN }, /*** GLX_MESA_copy_sub_buffer ***/ { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA }, /*** GLX_MESA_pixmap_colormap ***/ { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA }, /*** GLX_MESA_release_buffers ***/ { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA }, /*** GLX_ARB_get_proc_address ***/ { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB }, /*** GLX_ARB_create_context ***/ { "glXCreateContextAttribsARB", (__GLXextFuncPtr) glXCreateContextAttribsARB }, /*** GLX_EXT_texture_from_pixmap ***/ { "glXBindTexImageEXT", (__GLXextFuncPtr) glXBindTexImageEXT }, { "glXReleaseTexImageEXT", (__GLXextFuncPtr) glXReleaseTexImageEXT }, { NULL, NULL } /* end of list */ }; /** * Return address of named glX function, or NULL if not found. */ static __GLXextFuncPtr _glxapi_get_proc_address(const char *funcName) { GLuint i; for (i = 0; GLX_functions[i].Name; i++) { if (strcmp(GLX_functions[i].Name, funcName) == 0) return GLX_functions[i].Address; } return NULL; } PUBLIC __GLXextFuncPtr glXGetProcAddressARB(const GLubyte *procName) { __GLXextFuncPtr f; f = _glxapi_get_proc_address((const char *) procName); if (f) { return f; } f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName); return f; } /* GLX 1.4 */ PUBLIC void (*glXGetProcAddress(const GLubyte *procName))() { return glXGetProcAddressARB(procName); }