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