Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5564 | serge | 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 */ |