- add sources.
[platform/framework/web/crosswalk.git] / src / ui / gl / gl_bindings.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_GL_GL_BINDINGS_H_
6 #define UI_GL_GL_BINDINGS_H_
7
8 // Includes the platform independent and platform dependent GL headers.
9 // Only include this in cc files. It pulls in system headers, including
10 // the X11 headers on linux, which define all kinds of macros that are
11 // liable to cause conflicts.
12
13 #include <GL/gl.h>
14 #include <GL/glext.h>
15 #include <EGL/egl.h>
16 #include <EGL/eglext.h>
17
18 #include "base/logging.h"
19 #include "base/threading/thread_local.h"
20 #include "build/build_config.h"
21 #include "ui/gl/gl_export.h"
22
23 // The standard OpenGL native extension headers are also included.
24 #if defined(OS_WIN)
25 #include <GL/wglext.h>
26 #elif defined(OS_MACOSX)
27 #include <OpenGL/OpenGL.h>
28 #elif defined(USE_X11)
29 #include <GL/glx.h>
30 #include <GL/glxext.h>
31
32 // Undefine some macros defined by X headers. This is why this file should only
33 // be included in .cc files.
34 #undef Bool
35 #undef None
36 #undef Status
37 #endif
38
39
40 // GLES2 defines not part of Desktop GL
41 // Shader Precision-Specified Types
42 #define GL_LOW_FLOAT                                     0x8DF0
43 #define GL_MEDIUM_FLOAT                                  0x8DF1
44 #define GL_HIGH_FLOAT                                    0x8DF2
45 #define GL_LOW_INT                                       0x8DF3
46 #define GL_MEDIUM_INT                                    0x8DF4
47 #define GL_HIGH_INT                                      0x8DF5
48 #define GL_IMPLEMENTATION_COLOR_READ_TYPE                0x8B9A
49 #define GL_IMPLEMENTATION_COLOR_READ_FORMAT              0x8B9B
50 #define GL_MAX_FRAGMENT_UNIFORM_VECTORS                  0x8DFD
51 #define GL_MAX_VERTEX_UNIFORM_VECTORS                    0x8DFB
52 #define GL_MAX_VARYING_VECTORS                           0x8DFC
53 #define GL_SHADER_BINARY_FORMATS                         0x8DF8
54 #define GL_NUM_SHADER_BINARY_FORMATS                     0x8DF9
55 #define GL_SHADER_COMPILER                               0x8DFA
56 #define GL_RGB565                                        0x8D62
57 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES           0x8B8B
58 #define GL_RGB8_OES                                      0x8051
59 #define GL_RGBA8_OES                                     0x8058
60 #define GL_HALF_FLOAT_OES                                0x8D61
61
62 // GL_OES_EGL_image_external
63 #define GL_TEXTURE_EXTERNAL_OES                          0x8D65
64 #define GL_SAMPLER_EXTERNAL_OES                          0x8D66
65 #define GL_TEXTURE_BINDING_EXTERNAL_OES                  0x8D67
66 #define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES              0x8D68
67
68 // GL_ANGLE_translated_shader_source
69 #define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE         0x93A0
70
71 // GL_CHROMIUM_flipy
72 #define GL_UNPACK_FLIP_Y_CHROMIUM                        0x9240
73
74 #define GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM             0x9241
75 #define GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM           0x9242
76 #define GL_UNPACK_COLORSPACE_CONVERSION_CHROMIUM         0x9243
77
78 // GL_CHROMIUM_gpu_memory_manager
79 #define GL_TEXTURE_POOL_CHROMIUM                         0x6000
80 #define GL_TEXTURE_POOL_MANAGED_CHROMIUM                 0x6001
81 #define GL_TEXTURE_POOL_UNMANAGED_CHROMIUM               0x6002
82
83 // GL_ANGLE_pack_reverse_row_order
84 #define GL_PACK_REVERSE_ROW_ORDER_ANGLE                  0x93A4
85
86 // GL_ANGLE_texture_usage
87 #define GL_TEXTURE_USAGE_ANGLE                           0x93A2
88 #define GL_FRAMEBUFFER_ATTACHMENT_ANGLE                  0x93A3
89
90 // GL_EXT_texture_storage
91 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT                  0x912F
92 #define GL_ALPHA8_EXT                                    0x803C
93 #define GL_LUMINANCE8_EXT                                0x8040
94 #define GL_LUMINANCE8_ALPHA8_EXT                         0x8045
95 #define GL_RGBA32F_EXT                                   0x8814
96 #define GL_RGB32F_EXT                                    0x8815
97 #define GL_ALPHA32F_EXT                                  0x8816
98 #define GL_LUMINANCE32F_EXT                              0x8818
99 #define GL_LUMINANCE_ALPHA32F_EXT                        0x8819
100 #define GL_RGBA16F_EXT                                   0x881A
101 #define GL_RGB16F_EXT                                    0x881B
102 #define GL_ALPHA16F_EXT                                  0x881C
103 #define GL_LUMINANCE16F_EXT                              0x881E
104 #define GL_LUMINANCE_ALPHA16F_EXT                        0x881F
105 #define GL_BGRA8_EXT                                     0x93A1
106
107 // GL_ANGLE_instanced_arrays
108 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE             0x88FE
109
110 // GL_EXT_occlusion_query_boolean
111 #define GL_ANY_SAMPLES_PASSED_EXT                        0x8C2F
112 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT           0x8D6A
113 #define GL_CURRENT_QUERY_EXT                             0x8865
114 #define GL_QUERY_RESULT_EXT                              0x8866
115 #define GL_QUERY_RESULT_AVAILABLE_EXT                    0x8867
116
117 // GL_CHROMIUM_command_buffer_query
118 #define GL_COMMANDS_ISSUED_CHROMIUM                      0x84F2
119
120 /* GL_CHROMIUM_get_error_query */
121 #define GL_GET_ERROR_QUERY_CHROMIUM                      0x84F3
122
123 /* GL_CHROMIUM_command_buffer_latency_query */
124 #define GL_LATENCY_QUERY_CHROMIUM                        0x84F4
125
126 /* GL_CHROMIUM_async_pixel_transfers */
127 #define GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM         0x84F5
128 #define GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM           0x84F6
129
130 // GL_OES_texure_3D
131 #define GL_SAMPLER_3D_OES                                0x8B5F
132
133 // GL_OES_depth24
134 #define GL_DEPTH_COMPONENT24_OES                         0x81A6
135
136 // GL_OES_depth32
137 #define GL_DEPTH_COMPONENT32_OES                         0x81A7
138
139 // GL_OES_packed_depth_stencil
140 #ifndef GL_DEPTH24_STENCIL8_OES
141 #define GL_DEPTH24_STENCIL8_OES                          0x88F0
142 #endif
143
144 #ifndef GL_DEPTH24_STENCIL8
145 #define GL_DEPTH24_STENCIL8                              0x88F0
146 #endif
147
148 // GL_OES_compressed_ETC1_RGB8_texture
149 #define GL_ETC1_RGB8_OES                                 0x8D64
150
151 // GL_OES_vertex_array_object
152 #define GL_VERTEX_ARRAY_BINDING_OES                      0x85B5
153
154 // GL_CHROMIUM_pixel_transfer_buffer_object
155 #define GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM         0x78EC
156 #define GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM           0x78ED
157 #define GL_PIXEL_PACK_TRANSFER_BUFFER_BINDING_CHROMIUM   0x78EE
158 #define GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM 0x78EF
159
160 /* GL_EXT_discard_framebuffer */
161 #ifndef GL_EXT_discard_framebuffer
162 #define GL_COLOR_EXT                                     0x1800
163 #define GL_DEPTH_EXT                                     0x1801
164 #define GL_STENCIL_EXT                                   0x1802
165 #endif
166
167 // GL_ARB_get_program_binary
168 #define PROGRAM_BINARY_RETRIEVABLE_HINT                  0x8257
169 // GL_OES_get_program_binary
170 #define GL_PROGRAM_BINARY_LENGTH_OES                     0x8741
171 #define GL_NUM_PROGRAM_BINARY_FORMATS_OES                0x87FE
172 #define GL_PROGRAM_BINARY_FORMATS_OES                    0x87FF
173
174 #ifndef GL_EXT_multisampled_render_to_texture
175 #define GL_RENDERBUFFER_SAMPLES_EXT                      0x8CAB
176 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT        0x8D56
177 #define GL_MAX_SAMPLES_EXT                               0x8D57
178 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT    0x8D6C
179 #endif
180
181 #ifndef GL_IMG_multisampled_render_to_texture
182 #define GL_RENDERBUFFER_SAMPLES_IMG                      0x9133
183 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG        0x9134
184 #define GL_MAX_SAMPLES_IMG                               0x9135
185 #define GL_TEXTURE_SAMPLES_IMG                           0x9136
186 #endif
187
188 #define GL_GLEXT_PROTOTYPES 1
189
190 #if defined(OS_WIN)
191 #define GL_BINDING_CALL WINAPI
192 #else
193 #define GL_BINDING_CALL
194 #endif
195
196 #define GL_SERVICE_LOG(args) DLOG(INFO) << args;
197 #if defined(NDEBUG)
198   #define GL_SERVICE_LOG_CODE_BLOCK(code)
199 #else
200   #define GL_SERVICE_LOG_CODE_BLOCK(code) code
201 #endif
202
203 // Forward declare OSMesa types.
204 typedef struct osmesa_context *OSMesaContext;
205 typedef void (*OSMESAproc)();
206
207 // Forward declare EGL types.
208 typedef uint64 EGLuint64CHROMIUM;
209
210 #include "gl_bindings_autogen_gl.h"
211 #include "gl_bindings_autogen_osmesa.h"
212
213 #if defined(OS_WIN)
214 #include "gl_bindings_autogen_egl.h"
215 #include "gl_bindings_autogen_wgl.h"
216 #elif defined(USE_X11)
217 #include "gl_bindings_autogen_egl.h"
218 #include "gl_bindings_autogen_glx.h"
219 #elif defined(USE_OZONE)
220 #include "gl_bindings_autogen_egl.h"
221 #elif defined(OS_ANDROID)
222 #include "gl_bindings_autogen_egl.h"
223 #endif
224
225 namespace gfx {
226
227 struct GL_EXPORT DriverGL {
228   void Initialize();
229   void InitializeExtensions(GLContext* context);
230   void InitializeDebugBindings();
231   void ClearBindings();
232   void UpdateDebugExtensionBindings();
233
234   ProcsGL fn;
235   ProcsGL orig_fn;
236   ProcsGL debug_fn;
237   ExtensionsGL ext;
238
239  private:
240   void InitializeBindings();
241   void InitializeExtensionBindings(GLContext* context);
242 };
243
244 struct GL_EXPORT DriverOSMESA {
245   void InitializeBindings();
246   void InitializeExtensionBindings(GLContext* context);
247   void InitializeDebugBindings();
248   void ClearBindings();
249   void UpdateDebugExtensionBindings();
250
251   ProcsOSMESA fn;
252   ProcsOSMESA debug_fn;
253   ExtensionsOSMESA ext;
254 };
255
256 #if defined(OS_WIN)
257 struct GL_EXPORT DriverWGL {
258   void InitializeBindings();
259   void InitializeExtensionBindings(GLContext* context);
260   void InitializeDebugBindings();
261   void ClearBindings();
262   void UpdateDebugExtensionBindings();
263
264   ProcsWGL fn;
265   ProcsWGL debug_fn;
266   ExtensionsWGL ext;
267 };
268 #endif
269
270 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || defined(USE_OZONE)
271 struct GL_EXPORT DriverEGL {
272   void InitializeBindings();
273   void InitializeExtensionBindings(GLContext* context);
274   void InitializeDebugBindings();
275   void ClearBindings();
276   void UpdateDebugExtensionBindings();
277
278   ProcsEGL fn;
279   ProcsEGL debug_fn;
280   ExtensionsEGL ext;
281 };
282 #endif
283
284 #if defined(USE_X11)
285 struct GL_EXPORT DriverGLX {
286   void InitializeBindings();
287   void InitializeExtensionBindings(GLContext* context);
288   void InitializeDebugBindings();
289   void ClearBindings();
290   void UpdateDebugExtensionBindings();
291
292   ProcsGLX fn;
293   ProcsGLX debug_fn;
294   ExtensionsGLX ext;
295 };
296 #endif
297
298 // This #define is here to support autogenerated code.
299 #define g_current_gl_context g_current_gl_context_tls->Get()
300 GL_EXPORT extern base::ThreadLocalPointer<GLApi>* g_current_gl_context_tls;
301
302 GL_EXPORT extern OSMESAApi* g_current_osmesa_context;
303 GL_EXPORT extern DriverGL g_driver_gl;
304 GL_EXPORT extern DriverOSMESA g_driver_osmesa;
305
306 #if defined(OS_WIN)
307
308 GL_EXPORT extern EGLApi* g_current_egl_context;
309 GL_EXPORT extern WGLApi* g_current_wgl_context;
310 GL_EXPORT extern DriverEGL g_driver_egl;
311 GL_EXPORT extern DriverWGL g_driver_wgl;
312
313 #elif defined(USE_X11)
314
315 GL_EXPORT extern EGLApi* g_current_egl_context;
316 GL_EXPORT extern GLXApi* g_current_glx_context;
317 GL_EXPORT extern DriverEGL g_driver_egl;
318 GL_EXPORT extern DriverGLX g_driver_glx;
319
320 #elif defined(USE_OZONE)
321
322 GL_EXPORT extern EGLApi* g_current_egl_context;
323 GL_EXPORT extern DriverEGL g_driver_egl;
324
325 #elif defined(OS_ANDROID)
326
327 GL_EXPORT extern EGLApi* g_current_egl_context;
328 GL_EXPORT extern DriverEGL g_driver_egl;
329
330 #endif
331
332 // Find an entry point to the mock GL implementation.
333 void* GL_BINDING_CALL GetMockGLProcAddress(const char* name);
334
335 }  // namespace gfx
336
337 #endif  // UI_GL_GL_BINDINGS_H_