Home | History | Annotate | Download | only in xlib
      1 /*
      2  * Mesa 3-D graphics library
      3  *
      4  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
      5  * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
      6  *
      7  * Permission is hereby granted, free of charge, to any person obtaining a
      8  * copy of this software and associated documentation files (the "Software"),
      9  * to deal in the Software without restriction, including without limitation
     10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     11  * and/or sell copies of the Software, and to permit persons to whom the
     12  * Software is furnished to do so, subject to the following conditions:
     13  *
     14  * The above copyright notice and this permission notice shall be included
     15  * in all copies or substantial portions of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     21  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     23  * OTHER DEALINGS IN THE SOFTWARE.
     24  */
     25 
     26 
     27 /**
     28  * glXGetProcAddress()
     29  */
     30 
     31 
     32 #define GLX_GLXEXT_PROTOTYPES
     33 
     34 #include <string.h>
     35 #include "pipe/p_compiler.h"
     36 #include "GL/glx.h"
     37 #include "glapi/glapi.h"
     38 
     39 
     40 struct name_address_pair {
     41    const char *Name;
     42    __GLXextFuncPtr Address;
     43 };
     44 
     45 
     46 static struct name_address_pair GLX_functions[] = {
     47    /*** GLX_VERSION_1_0 ***/
     48    { "glXChooseVisual", (__GLXextFuncPtr) glXChooseVisual },
     49    { "glXCopyContext", (__GLXextFuncPtr) glXCopyContext },
     50    { "glXCreateContext", (__GLXextFuncPtr) glXCreateContext },
     51    { "glXCreateGLXPixmap", (__GLXextFuncPtr) glXCreateGLXPixmap },
     52    { "glXDestroyContext", (__GLXextFuncPtr) glXDestroyContext },
     53    { "glXDestroyGLXPixmap", (__GLXextFuncPtr) glXDestroyGLXPixmap },
     54    { "glXGetConfig", (__GLXextFuncPtr) glXGetConfig },
     55    { "glXGetCurrentContext", (__GLXextFuncPtr) glXGetCurrentContext },
     56    { "glXGetCurrentDrawable", (__GLXextFuncPtr) glXGetCurrentDrawable },
     57    { "glXIsDirect", (__GLXextFuncPtr) glXIsDirect },
     58    { "glXMakeCurrent", (__GLXextFuncPtr) glXMakeCurrent },
     59    { "glXQueryExtension", (__GLXextFuncPtr) glXQueryExtension },
     60    { "glXQueryVersion", (__GLXextFuncPtr) glXQueryVersion },
     61    { "glXSwapBuffers", (__GLXextFuncPtr) glXSwapBuffers },
     62    { "glXUseXFont", (__GLXextFuncPtr) glXUseXFont },
     63    { "glXWaitGL", (__GLXextFuncPtr) glXWaitGL },
     64    { "glXWaitX", (__GLXextFuncPtr) glXWaitX },
     65 
     66    /*** GLX_VERSION_1_1 ***/
     67    { "glXGetClientString", (__GLXextFuncPtr) glXGetClientString },
     68    { "glXQueryExtensionsString", (__GLXextFuncPtr) glXQueryExtensionsString },
     69    { "glXQueryServerString", (__GLXextFuncPtr) glXQueryServerString },
     70 
     71    /*** GLX_VERSION_1_2 ***/
     72    { "glXGetCurrentDisplay", (__GLXextFuncPtr) glXGetCurrentDisplay },
     73 
     74    /*** GLX_VERSION_1_3 ***/
     75    { "glXChooseFBConfig", (__GLXextFuncPtr) glXChooseFBConfig },
     76    { "glXCreateNewContext", (__GLXextFuncPtr) glXCreateNewContext },
     77    { "glXCreatePbuffer", (__GLXextFuncPtr) glXCreatePbuffer },
     78    { "glXCreatePixmap", (__GLXextFuncPtr) glXCreatePixmap },
     79    { "glXCreateWindow", (__GLXextFuncPtr) glXCreateWindow },
     80    { "glXDestroyPbuffer", (__GLXextFuncPtr) glXDestroyPbuffer },
     81    { "glXDestroyPixmap", (__GLXextFuncPtr) glXDestroyPixmap },
     82    { "glXDestroyWindow", (__GLXextFuncPtr) glXDestroyWindow },
     83    { "glXGetCurrentReadDrawable", (__GLXextFuncPtr) glXGetCurrentReadDrawable },
     84    { "glXGetFBConfigAttrib", (__GLXextFuncPtr) glXGetFBConfigAttrib },
     85    { "glXGetFBConfigs", (__GLXextFuncPtr) glXGetFBConfigs },
     86    { "glXGetSelectedEvent", (__GLXextFuncPtr) glXGetSelectedEvent },
     87    { "glXGetVisualFromFBConfig", (__GLXextFuncPtr) glXGetVisualFromFBConfig },
     88    { "glXMakeContextCurrent", (__GLXextFuncPtr) glXMakeContextCurrent },
     89    { "glXQueryContext", (__GLXextFuncPtr) glXQueryContext },
     90    { "glXQueryDrawable", (__GLXextFuncPtr) glXQueryDrawable },
     91    { "glXSelectEvent", (__GLXextFuncPtr) glXSelectEvent },
     92 
     93    /*** GLX_VERSION_1_4 ***/
     94    { "glXGetProcAddress", (__GLXextFuncPtr) glXGetProcAddress },
     95 
     96    /*** GLX_SGI_swap_control ***/
     97    { "glXSwapIntervalSGI", (__GLXextFuncPtr) glXSwapIntervalSGI },
     98 
     99    /*** GLX_SGI_video_sync ***/
    100    { "glXGetVideoSyncSGI", (__GLXextFuncPtr) glXGetVideoSyncSGI },
    101    { "glXWaitVideoSyncSGI", (__GLXextFuncPtr) glXWaitVideoSyncSGI },
    102 
    103    /*** GLX_SGI_make_current_read ***/
    104    { "glXMakeCurrentReadSGI", (__GLXextFuncPtr) glXMakeCurrentReadSGI },
    105    { "glXGetCurrentReadDrawableSGI", (__GLXextFuncPtr) glXGetCurrentReadDrawableSGI },
    106 
    107    /*** GLX_SGIX_video_source ***/
    108 #if defined(_VL_H)
    109    { "glXCreateGLXVideoSourceSGIX", (__GLXextFuncPtr) glXCreateGLXVideoSourceSGIX },
    110    { "glXDestroyGLXVideoSourceSGIX", (__GLXextFuncPtr) glXDestroyGLXVideoSourceSGIX },
    111 #endif
    112 
    113    /*** GLX_EXT_import_context ***/
    114    { "glXFreeContextEXT", (__GLXextFuncPtr) glXFreeContextEXT },
    115    { "glXGetContextIDEXT", (__GLXextFuncPtr) glXGetContextIDEXT },
    116    { "glXGetCurrentDisplayEXT", (__GLXextFuncPtr) glXGetCurrentDisplayEXT },
    117    { "glXImportContextEXT", (__GLXextFuncPtr) glXImportContextEXT },
    118    { "glXQueryContextInfoEXT", (__GLXextFuncPtr) glXQueryContextInfoEXT },
    119 
    120    /*** GLX_SGIX_fbconfig ***/
    121    { "glXGetFBConfigAttribSGIX", (__GLXextFuncPtr) glXGetFBConfigAttribSGIX },
    122    { "glXChooseFBConfigSGIX", (__GLXextFuncPtr) glXChooseFBConfigSGIX },
    123    { "glXCreateGLXPixmapWithConfigSGIX", (__GLXextFuncPtr) glXCreateGLXPixmapWithConfigSGIX },
    124    { "glXCreateContextWithConfigSGIX", (__GLXextFuncPtr) glXCreateContextWithConfigSGIX },
    125    { "glXGetVisualFromFBConfigSGIX", (__GLXextFuncPtr) glXGetVisualFromFBConfigSGIX },
    126    { "glXGetFBConfigFromVisualSGIX", (__GLXextFuncPtr) glXGetFBConfigFromVisualSGIX },
    127 
    128    /*** GLX_SGIX_pbuffer ***/
    129    { "glXCreateGLXPbufferSGIX", (__GLXextFuncPtr) glXCreateGLXPbufferSGIX },
    130    { "glXDestroyGLXPbufferSGIX", (__GLXextFuncPtr) glXDestroyGLXPbufferSGIX },
    131    { "glXQueryGLXPbufferSGIX", (__GLXextFuncPtr) glXQueryGLXPbufferSGIX },
    132    { "glXSelectEventSGIX", (__GLXextFuncPtr) glXSelectEventSGIX },
    133    { "glXGetSelectedEventSGIX", (__GLXextFuncPtr) glXGetSelectedEventSGIX },
    134 
    135    /*** GLX_SGI_cushion ***/
    136    { "glXCushionSGI", (__GLXextFuncPtr) glXCushionSGI },
    137 
    138    /*** GLX_SGIX_video_resize ***/
    139    { "glXBindChannelToWindowSGIX", (__GLXextFuncPtr) glXBindChannelToWindowSGIX },
    140    { "glXChannelRectSGIX", (__GLXextFuncPtr) glXChannelRectSGIX },
    141    { "glXQueryChannelRectSGIX", (__GLXextFuncPtr) glXQueryChannelRectSGIX },
    142    { "glXQueryChannelDeltasSGIX", (__GLXextFuncPtr) glXQueryChannelDeltasSGIX },
    143    { "glXChannelRectSyncSGIX", (__GLXextFuncPtr) glXChannelRectSyncSGIX },
    144 
    145    /*** GLX_SGIX_dmbuffer **/
    146 #if defined(_DM_BUFFER_H_)
    147    { "glXAssociateDMPbufferSGIX", (__GLXextFuncPtr) glXAssociateDMPbufferSGIX },
    148 #endif
    149 
    150    /*** GLX_SGIX_swap_group ***/
    151    { "glXJoinSwapGroupSGIX", (__GLXextFuncPtr) glXJoinSwapGroupSGIX },
    152 
    153    /*** GLX_SGIX_swap_barrier ***/
    154    { "glXBindSwapBarrierSGIX", (__GLXextFuncPtr) glXBindSwapBarrierSGIX },
    155    { "glXQueryMaxSwapBarriersSGIX", (__GLXextFuncPtr) glXQueryMaxSwapBarriersSGIX },
    156 
    157    /*** GLX_SUN_get_transparent_index ***/
    158    { "glXGetTransparentIndexSUN", (__GLXextFuncPtr) glXGetTransparentIndexSUN },
    159 
    160    /*** GLX_MESA_copy_sub_buffer ***/
    161    { "glXCopySubBufferMESA", (__GLXextFuncPtr) glXCopySubBufferMESA },
    162 
    163    /*** GLX_MESA_pixmap_colormap ***/
    164    { "glXCreateGLXPixmapMESA", (__GLXextFuncPtr) glXCreateGLXPixmapMESA },
    165 
    166    /*** GLX_MESA_release_buffers ***/
    167    { "glXReleaseBuffersMESA", (__GLXextFuncPtr) glXReleaseBuffersMESA },
    168 
    169    /*** GLX_ARB_get_proc_address ***/
    170    { "glXGetProcAddressARB", (__GLXextFuncPtr) glXGetProcAddressARB },
    171 
    172    /*** GLX_ARB_create_context ***/
    173    { "glXCreateContextAttribsARB", (__GLXextFuncPtr) glXCreateContextAttribsARB },
    174 
    175    /*** GLX_EXT_texture_from_pixmap ***/
    176    { "glXBindTexImageEXT", (__GLXextFuncPtr) glXBindTexImageEXT },
    177    { "glXReleaseTexImageEXT", (__GLXextFuncPtr) glXReleaseTexImageEXT },
    178 
    179    { NULL, NULL }   /* end of list */
    180 };
    181 
    182 
    183 
    184 /**
    185  * Return address of named glX function, or NULL if not found.
    186  */
    187 static __GLXextFuncPtr
    188 _glxapi_get_proc_address(const char *funcName)
    189 {
    190    GLuint i;
    191    for (i = 0; GLX_functions[i].Name; i++) {
    192       if (strcmp(GLX_functions[i].Name, funcName) == 0)
    193          return GLX_functions[i].Address;
    194    }
    195    return NULL;
    196 }
    197 
    198 
    199 PUBLIC __GLXextFuncPtr
    200 glXGetProcAddressARB(const GLubyte *procName)
    201 {
    202    __GLXextFuncPtr f;
    203 
    204    f = _glxapi_get_proc_address((const char *) procName);
    205    if (f) {
    206       return f;
    207    }
    208 
    209    f = (__GLXextFuncPtr) _glapi_get_proc_address((const char *) procName);
    210    return f;
    211 }
    212 
    213 
    214 /* GLX 1.4 */
    215 PUBLIC
    216 void (*glXGetProcAddress(const GLubyte *procName))()
    217 {
    218    return glXGetProcAddressARB(procName);
    219 }
    220