Update To 11.40.268.0
[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 #define GL_BIND_GENERATES_RESOURCE_CHROMIUM              0x9244
78
79 // GL_CHROMIUM_gpu_memory_manager
80 #define GL_TEXTURE_POOL_CHROMIUM                         0x6000
81 #define GL_TEXTURE_POOL_MANAGED_CHROMIUM                 0x6001
82 #define GL_TEXTURE_POOL_UNMANAGED_CHROMIUM               0x6002
83
84 // GL_ANGLE_pack_reverse_row_order
85 #define GL_PACK_REVERSE_ROW_ORDER_ANGLE                  0x93A4
86
87 // GL_ANGLE_texture_usage
88 #define GL_TEXTURE_USAGE_ANGLE                           0x93A2
89 #define GL_FRAMEBUFFER_ATTACHMENT_ANGLE                  0x93A3
90
91 // GL_EXT_texture_storage
92 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT                  0x912F
93 #define GL_ALPHA8_EXT                                    0x803C
94 #define GL_LUMINANCE8_EXT                                0x8040
95 #define GL_LUMINANCE8_ALPHA8_EXT                         0x8045
96 #define GL_RGBA32F_EXT                                   0x8814
97 #define GL_RGB32F_EXT                                    0x8815
98 #define GL_ALPHA32F_EXT                                  0x8816
99 #define GL_LUMINANCE32F_EXT                              0x8818
100 #define GL_LUMINANCE_ALPHA32F_EXT                        0x8819
101 #define GL_RGBA16F_EXT                                   0x881A
102 #define GL_RGB16F_EXT                                    0x881B
103 #define GL_ALPHA16F_EXT                                  0x881C
104 #define GL_LUMINANCE16F_EXT                              0x881E
105 #define GL_LUMINANCE_ALPHA16F_EXT                        0x881F
106 #define GL_BGRA8_EXT                                     0x93A1
107
108 // GL_ANGLE_instanced_arrays
109 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE             0x88FE
110
111 // GL_EXT_occlusion_query_boolean
112 #define GL_ANY_SAMPLES_PASSED_EXT                        0x8C2F
113 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT           0x8D6A
114 #define GL_CURRENT_QUERY_EXT                             0x8865
115 #define GL_QUERY_RESULT_EXT                              0x8866
116 #define GL_QUERY_RESULT_AVAILABLE_EXT                    0x8867
117
118 // GL_CHROMIUM_command_buffer_query
119 #define GL_COMMANDS_ISSUED_CHROMIUM                      0x84F2
120
121 /* GL_CHROMIUM_get_error_query */
122 #define GL_GET_ERROR_QUERY_CHROMIUM                      0x84F3
123
124 /* GL_CHROMIUM_command_buffer_latency_query */
125 #define GL_LATENCY_QUERY_CHROMIUM                        0x84F4
126
127 /* GL_CHROMIUM_async_pixel_transfers */
128 #define GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM         0x84F5
129 #define GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM           0x84F6
130
131 // GL_CHROMIUM_sync_query
132 #define GL_COMMANDS_COMPLETED_CHROMIUM                   0x84F7
133
134 // GL_CHROMIUM_gpu_memory_buffer_image
135 #define GL_MAP_CHROMIUM                                  0x78F1
136 #define GL_SCANOUT_CHROMIUM                              0x78F2
137
138 // GL_CHROMIUM_schedule_overlay_plane
139 #define GL_OVERLAY_TRANSFORM_NONE_CHROMIUM               0x9245
140 #define GL_OVERLAY_TRANSFORM_FLIP_HORIZONTAL_CHROMIUM    0x9246
141 #define GL_OVERLAY_TRANSFORM_FLIP_VERTICAL_CHROMIUM      0x9247
142 #define GL_OVERLAY_TRANSFORM_ROTATE_90_CHROMIUM          0x9248
143 #define GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM         0x9249
144 #define GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM         0x924A
145
146 // GL_CHROMIUM_subscribe_uniforms
147 #define GL_SUBSCRIBED_VALUES_BUFFER_CHROMIUM             0x924B
148 #define GL_MOUSE_POSITION_CHROMIUM                       0x924C
149
150 // GL_OES_texure_3D
151 #define GL_SAMPLER_3D_OES                                0x8B5F
152
153 // GL_OES_depth24
154 #define GL_DEPTH_COMPONENT24_OES                         0x81A6
155
156 // GL_OES_depth32
157 #define GL_DEPTH_COMPONENT32_OES                         0x81A7
158
159 // GL_OES_packed_depth_stencil
160 #ifndef GL_DEPTH24_STENCIL8_OES
161 #define GL_DEPTH24_STENCIL8_OES                          0x88F0
162 #endif
163
164 #ifndef GL_DEPTH24_STENCIL8
165 #define GL_DEPTH24_STENCIL8                              0x88F0
166 #endif
167
168 // GL_OES_compressed_ETC1_RGB8_texture
169 #define GL_ETC1_RGB8_OES                                 0x8D64
170
171 // GL_AMD_compressed_ATC_texture
172 #define GL_ATC_RGB_AMD                                   0x8C92
173 #define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                   0x8C93
174 #define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD               0x87EE
175
176 // GL_IMG_texture_compression_pvrtc
177 #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG               0x8C00
178 #define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG               0x8C01
179 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG              0x8C02
180 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG              0x8C03
181
182 // GL_OES_vertex_array_object
183 #define GL_VERTEX_ARRAY_BINDING_OES                      0x85B5
184
185 // GL_CHROMIUM_pixel_transfer_buffer_object
186 #define GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM         0x78EC
187 #define GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM           0x78ED
188 #define GL_PIXEL_PACK_TRANSFER_BUFFER_BINDING_CHROMIUM   0x78EE
189 #define GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM 0x78EF
190
191 /* GL_EXT_discard_framebuffer */
192 #ifndef GL_EXT_discard_framebuffer
193 #define GL_COLOR_EXT                                     0x1800
194 #define GL_DEPTH_EXT                                     0x1801
195 #define GL_STENCIL_EXT                                   0x1802
196 #endif
197
198 // GL_EXT_sRGB
199 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT     0x8210
200
201 // GL_ARB_get_program_binary
202 #define PROGRAM_BINARY_RETRIEVABLE_HINT                  0x8257
203 // GL_OES_get_program_binary
204 #define GL_PROGRAM_BINARY_LENGTH_OES                     0x8741
205 #define GL_NUM_PROGRAM_BINARY_FORMATS_OES                0x87FE
206 #define GL_PROGRAM_BINARY_FORMATS_OES                    0x87FF
207
208 #ifndef GL_EXT_multisampled_render_to_texture
209 #define GL_RENDERBUFFER_SAMPLES_EXT                      0x8CAB
210 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT        0x8D56
211 #define GL_MAX_SAMPLES_EXT                               0x8D57
212 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT    0x8D6C
213 #endif
214
215 #ifndef GL_IMG_multisampled_render_to_texture
216 #define GL_RENDERBUFFER_SAMPLES_IMG                      0x9133
217 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG        0x9134
218 #define GL_MAX_SAMPLES_IMG                               0x9135
219 #define GL_TEXTURE_SAMPLES_IMG                           0x9136
220 #endif
221
222 #ifndef GL_CHROMIUM_path_rendering
223 // These match the corresponding values in NV_path_rendering
224 // extension, eg tokens with CHROMIUM replaced with NV.
225 #define GL_PATH_MODELVIEW_MATRIX_CHROMIUM 0x0BA6
226 #define GL_PATH_PROJECTION_MATRIX_CHROMIUM 0x0BA7
227 #define GL_PATH_MODELVIEW_CHROMIUM 0x1700
228 #define GL_PATH_PROJECTION_CHROMIUM 0x1701
229 #endif
230
231 #ifndef GL_KHR_blend_equation_advanced
232 #define GL_KHR_blend_equation_advanced 1
233 #define GL_COLORBURN_KHR                  0x929A
234 #define GL_COLORDODGE_KHR                 0x9299
235 #define GL_DARKEN_KHR                     0x9297
236 #define GL_DIFFERENCE_KHR                 0x929E
237 #define GL_EXCLUSION_KHR                  0x92A0
238 #define GL_HARDLIGHT_KHR                  0x929B
239 #define GL_HSL_COLOR_KHR                  0x92AF
240 #define GL_HSL_HUE_KHR                    0x92AD
241 #define GL_HSL_LUMINOSITY_KHR             0x92B0
242 #define GL_HSL_SATURATION_KHR             0x92AE
243 #define GL_LIGHTEN_KHR                    0x9298
244 #define GL_MULTIPLY_KHR                   0x9294
245 #define GL_OVERLAY_KHR                    0x9296
246 #define GL_SCREEN_KHR                     0x9295
247 #define GL_SOFTLIGHT_KHR                  0x929C
248 #endif /* GL_KHR_blend_equation_advanced */
249
250 #ifndef GL_KHR_blend_equation_advanced_coherent
251 #define GL_KHR_blend_equation_advanced_coherent 1
252 #define GL_BLEND_ADVANCED_COHERENT_KHR    0x9285
253 #endif /* GL_KHR_blend_equation_advanced_coherent */
254
255 #ifndef GL_EXT_disjoint_timer_query
256 #define GL_EXT_disjoint_timer_query 1
257 #define GL_QUERY_COUNTER_BITS_EXT         0x8864
258 #define GL_TIME_ELAPSED_EXT               0x88BF
259 #define GL_TIMESTAMP_EXT                  0x8E28
260 #define GL_GPU_DISJOINT_EXT               0x8FBB
261 #endif
262
263 #ifndef GL_KHR_robustness
264 #define GL_KHR_robustness 1
265 #define GL_CONTEXT_ROBUST_ACCESS_KHR      0x90F3
266 #define GL_LOSE_CONTEXT_ON_RESET_KHR      0x8252
267 #define GL_GUILTY_CONTEXT_RESET_KHR       0x8253
268 #define GL_INNOCENT_CONTEXT_RESET_KHR     0x8254
269 #define GL_UNKNOWN_CONTEXT_RESET_KHR      0x8255
270 #define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256
271 #define GL_NO_RESET_NOTIFICATION_KHR      0x8261
272 #define GL_CONTEXT_LOST_KHR               0x0507
273 #endif /* GL_KHR_robustness */
274
275 #define GL_GLEXT_PROTOTYPES 1
276
277 #if defined(OS_WIN)
278 #define GL_BINDING_CALL WINAPI
279 #else
280 #define GL_BINDING_CALL
281 #endif
282
283 #define GL_SERVICE_LOG(args) DLOG(INFO) << args;
284 #if defined(NDEBUG)
285   #define GL_SERVICE_LOG_CODE_BLOCK(code)
286 #else
287   #define GL_SERVICE_LOG_CODE_BLOCK(code) code
288 #endif
289
290 // Forward declare OSMesa types.
291 typedef struct osmesa_context *OSMesaContext;
292 typedef void (*OSMESAproc)();
293
294 // Forward declare EGL types.
295 typedef uint64 EGLuint64CHROMIUM;
296
297 #include "gl_bindings_autogen_gl.h"
298 #include "gl_bindings_autogen_osmesa.h"
299
300 #if defined(OS_WIN)
301 #include "gl_bindings_autogen_egl.h"
302 #include "gl_bindings_autogen_wgl.h"
303 #elif defined(USE_X11)
304 #include "gl_bindings_autogen_egl.h"
305 #include "gl_bindings_autogen_glx.h"
306 #elif defined(USE_OZONE)
307 #include "gl_bindings_autogen_egl.h"
308 #elif defined(OS_ANDROID)
309 #include "gl_bindings_autogen_egl.h"
310 #endif
311
312 namespace gfx {
313
314 struct GL_EXPORT DriverGL {
315   void InitializeStaticBindings();
316   void InitializeCustomDynamicBindings(GLContext* context);
317   void InitializeDebugBindings();
318   void InitializeNullDrawBindings();
319   // TODO(danakj): Remove this when all test suites are using null-draw.
320   bool HasInitializedNullDrawBindings();
321   bool SetNullDrawBindingsEnabled(bool enabled);
322   void ClearBindings();
323
324   ProcsGL fn;
325   ProcsGL orig_fn;
326   ProcsGL debug_fn;
327   ExtensionsGL ext;
328   bool null_draw_bindings_enabled;
329
330  private:
331   void InitializeDynamicBindings(GLContext* context);
332 };
333
334 struct GL_EXPORT DriverOSMESA {
335   void InitializeStaticBindings();
336   void InitializeDynamicBindings(GLContext* context);
337   void InitializeDebugBindings();
338   void ClearBindings();
339
340   ProcsOSMESA fn;
341   ProcsOSMESA debug_fn;
342   ExtensionsOSMESA ext;
343 };
344
345 #if defined(OS_WIN)
346 struct GL_EXPORT DriverWGL {
347   void InitializeStaticBindings();
348   void InitializeDynamicBindings(GLContext* context);
349   void InitializeDebugBindings();
350   void ClearBindings();
351
352   ProcsWGL fn;
353   ProcsWGL debug_fn;
354   ExtensionsWGL ext;
355 };
356 #endif
357
358 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || defined(USE_OZONE)
359 struct GL_EXPORT DriverEGL {
360   void InitializeStaticBindings();
361   void InitializeDynamicBindings(GLContext* context);
362   void InitializeDebugBindings();
363   void ClearBindings();
364
365   ProcsEGL fn;
366   ProcsEGL debug_fn;
367   ExtensionsEGL ext;
368 };
369 #endif
370
371 #if defined(USE_X11)
372 struct GL_EXPORT DriverGLX {
373   void InitializeStaticBindings();
374   void InitializeDynamicBindings(GLContext* context);
375   void InitializeDebugBindings();
376   void ClearBindings();
377
378   ProcsGLX fn;
379   ProcsGLX debug_fn;
380   ExtensionsGLX ext;
381 };
382 #endif
383
384 // This #define is here to support autogenerated code.
385 #define g_current_gl_context g_current_gl_context_tls->Get()
386 GL_EXPORT extern base::ThreadLocalPointer<GLApi>* g_current_gl_context_tls;
387
388 GL_EXPORT extern OSMESAApi* g_current_osmesa_context;
389 GL_EXPORT extern DriverGL g_driver_gl;
390 GL_EXPORT extern DriverOSMESA g_driver_osmesa;
391
392 #if defined(OS_WIN)
393
394 GL_EXPORT extern EGLApi* g_current_egl_context;
395 GL_EXPORT extern WGLApi* g_current_wgl_context;
396 GL_EXPORT extern DriverEGL g_driver_egl;
397 GL_EXPORT extern DriverWGL g_driver_wgl;
398
399 #elif defined(USE_X11)
400
401 GL_EXPORT extern EGLApi* g_current_egl_context;
402 GL_EXPORT extern GLXApi* g_current_glx_context;
403 GL_EXPORT extern DriverEGL g_driver_egl;
404 GL_EXPORT extern DriverGLX g_driver_glx;
405
406 #elif defined(USE_OZONE)
407
408 GL_EXPORT extern EGLApi* g_current_egl_context;
409 GL_EXPORT extern DriverEGL g_driver_egl;
410
411 #elif defined(OS_ANDROID)
412
413 GL_EXPORT extern EGLApi* g_current_egl_context;
414 GL_EXPORT extern DriverEGL g_driver_egl;
415
416 #endif
417
418 }  // namespace gfx
419
420 #endif  // UI_GL_GL_BINDINGS_H_