Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.