Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the "Software"),
  8.  * to deal in the Software without restriction, including without limitation
  9.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  10.  * and/or sell copies of the Software, and to permit persons to whom the
  11.  * Software is furnished to do so, subject to the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice shall be included
  14.  * in all copies or substantial portions of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  19.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  20.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  21.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  22.  * OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25.  
  26. /**
  27.  * \mainpage Mesa GL API Module
  28.  *
  29.  * \section GLAPIIntroduction Introduction
  30.  *
  31.  * The Mesa GL API module is responsible for dispatching all the
  32.  * gl*() functions.  All GL functions are dispatched by jumping through
  33.  * the current dispatch table (basically a struct full of function
  34.  * pointers.)
  35.  *
  36.  * A per-thread current dispatch table and per-thread current context
  37.  * pointer are managed by this module too.
  38.  *
  39.  * This module is intended to be non-Mesa-specific so it can be used
  40.  * with the X/DRI libGL also.
  41.  */
  42.  
  43.  
  44. #ifndef _GLAPI_H
  45. #define _GLAPI_H
  46.  
  47. #include "glapi/glthread.h"
  48.  
  49.  
  50. #ifdef __cplusplus
  51. extern "C" {
  52. #endif
  53.  
  54.  
  55. #ifdef _GLAPI_NO_EXPORTS
  56. #  define _GLAPI_EXPORT
  57. #else /* _GLAPI_NO_EXPORTS */
  58. #  ifdef _WIN32
  59. #    ifdef _GLAPI_DLL_EXPORTS
  60. #      define _GLAPI_EXPORT __declspec(dllexport)
  61. #    else
  62. #      define _GLAPI_EXPORT __declspec(dllimport)
  63. #    endif
  64. #  elif defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
  65. #    define _GLAPI_EXPORT __attribute__((visibility("default")))
  66. #  else
  67. #    define _GLAPI_EXPORT
  68. #  endif
  69. #endif /* _GLAPI_NO_EXPORTS */
  70.  
  71.  
  72. /* Is this needed?  It is incomplete anyway. */
  73. #ifdef USE_MGL_NAMESPACE
  74. #define _glapi_set_dispatch _mglapi_set_dispatch
  75. #define _glapi_get_dispatch _mglapi_get_dispatch
  76. #define _glapi_set_context _mglapi_set_context
  77. #define _glapi_get_context _mglapi_get_context
  78. #define _glapi_Dispatch _mglapi_Dispatch
  79. #define _glapi_Context _mglapi_Context
  80. #endif
  81.  
  82. typedef void (*_glapi_proc)(void);
  83. struct _glapi_table;
  84.  
  85.  
  86. #if defined (GLX_USE_TLS)
  87.  
  88. _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
  89.     __attribute__((tls_model("initial-exec")));
  90.  
  91. _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
  92.     __attribute__((tls_model("initial-exec")));
  93.  
  94. _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
  95. _GLAPI_EXPORT extern const void *_glapi_Context;
  96.  
  97. # define GET_DISPATCH() _glapi_tls_Dispatch
  98. # define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_tls_Context
  99.  
  100. #else
  101.  
  102. _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch;
  103. _GLAPI_EXPORT extern void *_glapi_Context;
  104.  
  105. # ifdef THREADS
  106.  
  107. #  define GET_DISPATCH() \
  108.      (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
  109.  
  110. #  define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) \
  111.      (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
  112.  
  113. # else
  114.  
  115. #  define GET_DISPATCH() _glapi_Dispatch
  116. #  define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_Context
  117.  
  118. # endif
  119.  
  120. #endif /* defined (GLX_USE_TLS) */
  121.  
  122.  
  123. void
  124. _glapi_destroy_multithread(void);
  125.  
  126.  
  127. _GLAPI_EXPORT void
  128. _glapi_check_multithread(void);
  129.  
  130.  
  131. _GLAPI_EXPORT void
  132. _glapi_set_context(void *context);
  133.  
  134.  
  135. _GLAPI_EXPORT void *
  136. _glapi_get_context(void);
  137.  
  138.  
  139. _GLAPI_EXPORT void
  140. _glapi_set_dispatch(struct _glapi_table *dispatch);
  141.  
  142.  
  143. _GLAPI_EXPORT struct _glapi_table *
  144. _glapi_get_dispatch(void);
  145.  
  146.  
  147. _GLAPI_EXPORT unsigned int
  148. _glapi_get_dispatch_table_size(void);
  149.  
  150.  
  151. _GLAPI_EXPORT int
  152. _glapi_add_dispatch( const char * const * function_names,
  153.                      const char * parameter_signature );
  154.  
  155. _GLAPI_EXPORT int
  156. _glapi_get_proc_offset(const char *funcName);
  157.  
  158.  
  159. _GLAPI_EXPORT _glapi_proc
  160. _glapi_get_proc_address(const char *funcName);
  161.  
  162.  
  163. _GLAPI_EXPORT const char *
  164. _glapi_get_proc_name(unsigned int offset);
  165.  
  166.  
  167. _GLAPI_EXPORT struct _glapi_table *
  168. _glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
  169.  
  170.  
  171. _GLAPI_EXPORT unsigned long
  172. _glthread_GetID(void);
  173.  
  174.  
  175. /*
  176.  * These stubs are kept so that the old DRI drivers still load.
  177.  */
  178. _GLAPI_EXPORT void
  179. _glapi_noop_enable_warnings(unsigned char enable);
  180.  
  181.  
  182. _GLAPI_EXPORT void
  183. _glapi_set_warning_func(_glapi_proc func);
  184.  
  185.  
  186. #ifdef __cplusplus
  187. }
  188. #endif
  189.  
  190. #endif /* _GLAPI_H */
  191.