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.  *
  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 "util/macros.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.  
  73. typedef void (*_glapi_nop_handler_proc)(const char *name);
  74.  
  75. struct _glapi_table;
  76.  
  77.  
  78. #if defined (GLX_USE_TLS)
  79.  
  80. _GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch
  81.     __attribute__((tls_model("initial-exec")));
  82.  
  83. _GLAPI_EXPORT extern __thread void * _glapi_tls_Context
  84.     __attribute__((tls_model("initial-exec")));
  85.  
  86. _GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch;
  87. _GLAPI_EXPORT extern const void *_glapi_Context;
  88.  
  89. # define GET_DISPATCH() _glapi_tls_Dispatch
  90. # define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) _glapi_tls_Context
  91.  
  92. #else
  93.  
  94. _GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch;
  95. _GLAPI_EXPORT extern void *_glapi_Context;
  96.  
  97. #define GET_DISPATCH() \
  98.      (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch())
  99.  
  100. #define GET_CURRENT_CONTEXT(C)  struct gl_context *C = (struct gl_context *) \
  101.      (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context())
  102.  
  103. #endif /* defined (GLX_USE_TLS) */
  104.  
  105.  
  106. void
  107. _glapi_destroy_multithread(void);
  108.  
  109.  
  110. _GLAPI_EXPORT void
  111. _glapi_check_multithread(void);
  112.  
  113.  
  114. _GLAPI_EXPORT void
  115. _glapi_set_context(void *context);
  116.  
  117.  
  118. _GLAPI_EXPORT void *
  119. _glapi_get_context(void);
  120.  
  121.  
  122. _GLAPI_EXPORT void
  123. _glapi_set_dispatch(struct _glapi_table *dispatch);
  124.  
  125.  
  126. _GLAPI_EXPORT struct _glapi_table *
  127. _glapi_get_dispatch(void);
  128.  
  129.  
  130. _GLAPI_EXPORT unsigned int
  131. _glapi_get_dispatch_table_size(void);
  132.  
  133.  
  134. _GLAPI_EXPORT int
  135. _glapi_add_dispatch( const char * const * function_names,
  136.                      const char * parameter_signature );
  137.  
  138. _GLAPI_EXPORT int
  139. _glapi_get_proc_offset(const char *funcName);
  140.  
  141.  
  142. _GLAPI_EXPORT _glapi_proc
  143. _glapi_get_proc_address(const char *funcName);
  144.  
  145.  
  146. _GLAPI_EXPORT const char *
  147. _glapi_get_proc_name(unsigned int offset);
  148.  
  149.  
  150. _GLAPI_EXPORT struct _glapi_table *
  151. _glapi_create_table_from_handle(void *handle, const char *symbol_prefix);
  152.  
  153.  
  154. _GLAPI_EXPORT void
  155. _glapi_set_nop_handler(_glapi_nop_handler_proc func);
  156.  
  157. /** Return pointer to new dispatch table filled with no-op functions */
  158. _GLAPI_EXPORT struct _glapi_table *
  159. _glapi_new_nop_table(unsigned num_entries);
  160.  
  161.  
  162. /** Deprecated function */
  163. _GLAPI_EXPORT unsigned long
  164. _glthread_GetID(void);
  165.  
  166.  
  167. /*
  168.  * These stubs are kept so that the old DRI drivers still load.
  169.  */
  170. _GLAPI_EXPORT void
  171. _glapi_noop_enable_warnings(unsigned char enable);
  172.  
  173.  
  174. _GLAPI_EXPORT void
  175. _glapi_set_warning_func(_glapi_proc func);
  176.  
  177.  
  178. #ifdef __cplusplus
  179. }
  180. #endif
  181.  
  182. #endif /* _GLAPI_H */
  183.