Subversion Repositories Kolibri OS

Rev

Rev 4358 | 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. #ifdef _GLAPI_DLL_EXPORTS
  55. #   define _GLAPI_EXPORT __declspec(dllexport)
  56. #else
  57. #   define _GLAPI_EXPORT __declspec(dllimport)
  58. #endif
  59.  
  60.  
  61. /* Is this needed?  It is incomplete anyway. */
  62. #ifdef USE_MGL_NAMESPACE
  63. #define _glapi_set_dispatch _mglapi_set_dispatch
  64. #define _glapi_get_dispatch _mglapi_get_dispatch
  65. #define _glapi_set_context _mglapi_set_context
  66. #define _glapi_get_context _mglapi_get_context
  67. #define _glapi_Dispatch _mglapi_Dispatch
  68. #define _glapi_Context _mglapi_Context
  69. #endif
  70.  
  71. typedef void (*_glapi_proc)(void);
  72. struct _glapi_table;
  73.  
  74.  
  75. #if defined (GLX_USE_TLS)
  76.  
  77. _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
  78.     __attribute__((tls_model("initial-exec")));
  79.  
  80. _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
  81.     __attribute__((tls_model("initial-exec")));
  82.  
  83. _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
  84. _GLAPI_EXPORT extern const void *_glapi_Context;
  85.  
  86. # define GET_DISPATCH() _glapi_tls_Dispatch
  87. # define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_tls_Context
  88.  
  89. #else
  90.  
  91. _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch;
  92. _GLAPI_EXPORT extern void *_glapi_Context;
  93.  
  94. # ifdef THREADS
  95.  
  96. #  define GET_DISPATCH() \
  97.      (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
  98.  
  99. #  define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) \
  100.      (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
  101.  
  102. # else
  103.  
  104. #  define GET_DISPATCH() _glapi_Dispatch
  105. #  define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_Context
  106.  
  107. # endif
  108.  
  109. #endif /* defined (GLX_USE_TLS) */
  110.  
  111.  
  112. void
  113. _glapi_destroy_multithread(void);
  114.  
  115.  
  116. _GLAPI_EXPORT void
  117. _glapi_check_multithread(void);
  118.  
  119.  
  120. _GLAPI_EXPORT void
  121. _glapi_set_context(void *context);
  122.  
  123.  
  124. _GLAPI_EXPORT void *
  125. _glapi_get_context(void);
  126.  
  127.  
  128. _GLAPI_EXPORT void
  129. _glapi_set_dispatch(struct _glapi_table *dispatch);
  130.  
  131.  
  132. _GLAPI_EXPORT struct _glapi_table *
  133. _glapi_get_dispatch(void);
  134.  
  135.  
  136. _GLAPI_EXPORT unsigned int
  137. _glapi_get_dispatch_table_size(void);
  138.  
  139.  
  140. _GLAPI_EXPORT int
  141. _glapi_add_dispatch( const char * const * function_names,
  142.                      const char * parameter_signature );
  143.  
  144. _GLAPI_EXPORT int
  145. _glapi_get_proc_offset(const char *funcName);
  146.  
  147.  
  148. _GLAPI_EXPORT _glapi_proc
  149. _glapi_get_proc_address(const char *funcName);
  150.  
  151.  
  152. _GLAPI_EXPORT const char *
  153. _glapi_get_proc_name(unsigned int offset);
  154.  
  155.  
  156. _GLAPI_EXPORT struct _glapi_table *
  157. _glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
  158.  
  159.  
  160. _GLAPI_EXPORT unsigned long
  161. _glthread_GetID(void);
  162.  
  163.  
  164. /*
  165.  * These stubs are kept so that the old DRI drivers still load.
  166.  */
  167. _GLAPI_EXPORT void
  168. _glapi_noop_enable_warnings(unsigned char enable);
  169.  
  170.  
  171. _GLAPI_EXPORT void
  172. _glapi_set_warning_func(_glapi_proc func);
  173.  
  174.  
  175. #ifdef __cplusplus
  176. }
  177. #endif
  178.  
  179. #endif /* _GLAPI_H */
  180.