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