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 #include "build/build_config.h" 9 10 // Includes the platform independent and platform dependent GL headers. 11 12 // GL headers may include inttypes.h and so we need to ensure that 13 // __STDC_FORMAT_MACROS is defined in order for //base/format_macros.h to 14 // function correctly. See comment and #error message in //base/format_macros.h 15 // for details. 16 #if defined(OS_POSIX) && !defined(__STDC_FORMAT_MACROS) 17 #define __STDC_FORMAT_MACROS 18 #endif 19 #if defined(USE_GLX) 20 // Must be included before GL headers or they might pollute the global 21 // namespace with X11 macros indirectly. 22 #include "ui/gfx/x/x11.h" 23 24 // GL headers expect Bool and Status this to be defined but we avoid 25 // defining them since they clash with too much code. Instead we have 26 // to add them temporarily here and undef them again below. 27 #define Bool int 28 #define Status int 29 #endif // USE_GLX 30 31 #include <GL/gl.h> 32 #include <GL/glext.h> 33 #include <EGL/egl.h> 34 #include <EGL/eglext.h> 35 #include <stdint.h> 36 37 #include <string> 38 39 #include "base/logging.h" 40 #include "base/threading/thread_local.h" 41 #include "build/build_config.h" 42 #include "ui/gfx/extension_set.h" 43 #include "ui/gl/gl_export.h" 44 45 // The standard OpenGL native extension headers are also included. 46 #if defined(OS_WIN) 47 #include <GL/wglext.h> 48 #elif defined(OS_MACOSX) 49 #include <OpenGL/OpenGL.h> 50 #elif defined(USE_GLX) 51 #include <GL/glx.h> 52 #include <GL/glxext.h> 53 54 // Done with these temporary macros now 55 #undef Bool 56 #undef Status 57 #endif 58 59 // GLES2 defines not part of Desktop GL 60 // Shader Precision-Specified Types 61 #define GL_LOW_FLOAT 0x8DF0 62 #define GL_MEDIUM_FLOAT 0x8DF1 63 #define GL_HIGH_FLOAT 0x8DF2 64 #define GL_LOW_INT 0x8DF3 65 #define GL_MEDIUM_INT 0x8DF4 66 #define GL_HIGH_INT 0x8DF5 67 #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A 68 #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B 69 #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD 70 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB 71 #define GL_MAX_VARYING_VECTORS 0x8DFC 72 #define GL_SHADER_BINARY_FORMATS 0x8DF8 73 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 74 #define GL_SHADER_COMPILER 0x8DFA 75 #define GL_RGB565 0x8D62 76 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B 77 #define GL_RGB8_OES 0x8051 78 #define GL_RGBA8_OES 0x8058 79 #define GL_HALF_FLOAT_OES 0x8D61 80 81 // GL_OES_EGL_image_external 82 #define GL_TEXTURE_EXTERNAL_OES 0x8D65 83 #define GL_SAMPLER_EXTERNAL_OES 0x8D66 84 #define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 85 #define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 86 87 // GL_ANGLE_texture_rectangle 88 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE 0x84F8 89 #define GL_TEXTURE_RECTANGLE_ANGLE 0x84F5 90 #define GL_TEXTURE_BINDING_RECTANGLE_ANGLE 0x84F6 91 #define GL_SAMPLER_2D_RECT_ANGLE 0x8B63 92 93 // GL_ANGLE_translated_shader_source 94 #define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 95 96 #define GL_UNPACK_COLORSPACE_CONVERSION_CHROMIUM 0x9243 97 #define GL_BIND_GENERATES_RESOURCE_CHROMIUM 0x9244 98 99 // GL_ANGLE_texture_usage 100 #define GL_TEXTURE_USAGE_ANGLE 0x93A2 101 #define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 102 103 // GL_EXT_texture_storage 104 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F 105 #define GL_ALPHA8_EXT 0x803C 106 #define GL_LUMINANCE8_EXT 0x8040 107 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 108 #define GL_RGB10_A2_EXT 0x8059 109 #define GL_RGBA32F_EXT 0x8814 110 #define GL_RGB32F_EXT 0x8815 111 #define GL_ALPHA32F_EXT 0x8816 112 #define GL_LUMINANCE32F_EXT 0x8818 113 #define GL_LUMINANCE_ALPHA32F_EXT 0x8819 114 #define GL_RGBA16F_EXT 0x881A 115 #define GL_RGB16F_EXT 0x881B 116 #define GL_RG16F_EXT 0x822F 117 #define GL_R16F_EXT 0x822D 118 #define GL_ALPHA16F_EXT 0x881C 119 #define GL_LUMINANCE16F_EXT 0x881E 120 #define GL_LUMINANCE_ALPHA16F_EXT 0x881F 121 #define GL_R32F_EXT 0x822E 122 #define GL_RG32F_EXT 0x8230 123 #define GL_BGRA8_EXT 0x93A1 124 125 // GL_ANGLE_instanced_arrays 126 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE 127 128 // GL_ANGLE_client_arrays 129 #define GL_CLIENT_ARRAYS_ANGLE 0x93AA 130 131 // GL_ANGLE_robust_resource_initialization 132 #define GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE 0x93AB 133 134 // GL_ANGLE_request_extension 135 #define GL_REQUESTABLE_EXTENSIONS_ANGLE 0x93A8 136 #define GL_NUM_REQUESTABLE_EXTENSIONS_ANGLE 0x93A9 137 138 // GL_ANGLE_memory_size 139 #define GL_MEMORY_SIZE_ANGLE 0x93AD 140 141 // GL_EXT_occlusion_query_boolean 142 #define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F 143 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A 144 #define GL_CURRENT_QUERY_EXT 0x8865 145 #define GL_QUERY_RESULT_EXT 0x8866 146 #define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 147 148 // GL_ARB_occlusion_query 149 #define GL_SAMPLES_PASSED_ARB 0x8914 150 151 // GL_CHROMIUM_command_buffer_query 152 #define GL_COMMANDS_ISSUED_CHROMIUM 0x6004 153 #define GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM 0x6005 154 155 /* GL_CHROMIUM_get_error_query */ 156 #define GL_GET_ERROR_QUERY_CHROMIUM 0x6003 157 158 /* GL_CHROMIUM_command_buffer_latency_query */ 159 #define GL_LATENCY_QUERY_CHROMIUM 0x6007 160 161 /* GL_CHROMIUM_program_completion_query */ 162 #define GL_PROGRAM_COMPLETION_QUERY_CHROMIUM 0x6009 163 164 /* GL_CHROMIUM_async_pixel_transfers */ 165 #define GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM 0x6006 166 167 // GL_CHROMIUM_sync_query 168 #define GL_COMMANDS_COMPLETED_CHROMIUM 0x84F7 169 170 // GL_CHROMIUM_ycrcb_420_image 171 #define GL_RGB_YCRCB_420_CHROMIUM 0x78FA 172 173 // GL_CHROMIUM_ycbcr_422_image 174 #define GL_RGB_YCBCR_422_CHROMIUM 0x78FB 175 176 // GL_CHROMIUM_ycbcr_420v_image 177 #define GL_RGB_YCBCR_420V_CHROMIUM 0x78FC 178 179 // GL_CHROMIUM_ycbcr_p010_image 180 #define GL_RGB_YCBCR_P010_CHROMIUM 0x78FD 181 182 // GL_CHROMIUM_schedule_overlay_plane 183 #define GL_OVERLAY_TRANSFORM_NONE_CHROMIUM 0x9245 184 #define GL_OVERLAY_TRANSFORM_FLIP_HORIZONTAL_CHROMIUM 0x9246 185 #define GL_OVERLAY_TRANSFORM_FLIP_VERTICAL_CHROMIUM 0x9247 186 #define GL_OVERLAY_TRANSFORM_ROTATE_90_CHROMIUM 0x9248 187 #define GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM 0x9249 188 #define GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM 0x924A 189 190 // GL_CHROMIUM_subscribe_uniforms 191 #define GL_SUBSCRIBED_VALUES_BUFFER_CHROMIUM 0x924B 192 #define GL_MOUSE_POSITION_CHROMIUM 0x924C 193 194 // GL_CHROMIUM_texture_filtering_hint 195 #define GL_TEXTURE_FILTERING_HINT_CHROMIUM 0x8AF0 196 197 // GL_CHROMIUM_texture_storage_image 198 #define GL_SCANOUT_CHROMIUM 0x6000 199 200 // GL_OES_texure_3D 201 #define GL_SAMPLER_3D_OES 0x8B5F 202 203 // GL_OES_depth24 204 #define GL_DEPTH_COMPONENT24_OES 0x81A6 205 206 // GL_OES_depth32 207 #define GL_DEPTH_COMPONENT32_OES 0x81A7 208 209 // GL_OES_packed_depth_stencil 210 #ifndef GL_DEPTH24_STENCIL8_OES 211 #define GL_DEPTH24_STENCIL8_OES 0x88F0 212 #endif 213 214 #ifndef GL_DEPTH24_STENCIL8 215 #define GL_DEPTH24_STENCIL8 0x88F0 216 #endif 217 218 // GL_OES_compressed_ETC1_RGB8_texture 219 #define GL_ETC1_RGB8_OES 0x8D64 220 221 // GL_AMD_compressed_ATC_texture 222 #define GL_ATC_RGB_AMD 0x8C92 223 #define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 224 #define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE 225 226 // GL_IMG_texture_compression_pvrtc 227 #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 228 #define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 229 #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 230 #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 231 232 // GL_EXT_texture_compression_bptc 233 #define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C 234 #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D 235 #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E 236 #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F 237 238 // GL_EXT_texture_compression_rgtc 239 #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB 240 #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC 241 #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD 242 #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE 243 244 // GL_OES_vertex_array_object 245 #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 246 247 // GL_CHROMIUM_pixel_transfer_buffer_object 248 #define GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM 0x78EC 249 #define GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM 0x78ED 250 #define GL_PIXEL_PACK_TRANSFER_BUFFER_BINDING_CHROMIUM 0x78EE 251 #define GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM 0x78EF 252 253 /* GL_EXT_discard_framebuffer */ 254 #ifndef GL_EXT_discard_framebuffer 255 #define GL_COLOR_EXT 0x1800 256 #define GL_DEPTH_EXT 0x1801 257 #define GL_STENCIL_EXT 0x1802 258 #endif 259 260 // GL_EXT_sRGB 261 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 262 263 // GL_ARB_get_program_binary 264 #define PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 265 // GL_OES_get_program_binary 266 #define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 267 #define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE 268 #define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF 269 270 #ifndef GL_EXT_multisampled_render_to_texture 271 #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB 272 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 273 #define GL_MAX_SAMPLES_EXT 0x8D57 274 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C 275 #endif 276 277 #ifndef GL_IMG_multisampled_render_to_texture 278 #define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 279 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 280 #define GL_MAX_SAMPLES_IMG 0x9135 281 #define GL_TEXTURE_SAMPLES_IMG 0x9136 282 #endif 283 284 #ifndef GL_CHROMIUM_path_rendering 285 #define GL_CHROMIUM_path_rendering 1 286 // These match the corresponding values in NV_path_rendering 287 // extension, eg tokens with CHROMIUM replaced with NV. 288 #define GL_PATH_MODELVIEW_MATRIX_CHROMIUM 0x0BA6 289 #define GL_PATH_PROJECTION_MATRIX_CHROMIUM 0x0BA7 290 #define GL_PATH_MODELVIEW_CHROMIUM 0x1700 291 #define GL_PATH_PROJECTION_CHROMIUM 0x1701 292 #define GL_FLAT_CHROMIUM 0x1D00 293 #define GL_CLOSE_PATH_CHROMIUM 0x00 294 #define GL_MOVE_TO_CHROMIUM 0x02 295 #define GL_LINE_TO_CHROMIUM 0x04 296 #define GL_QUADRATIC_CURVE_TO_CHROMIUM 0x0A 297 #define GL_CUBIC_CURVE_TO_CHROMIUM 0x0C 298 #define GL_CONIC_CURVE_TO_CHROMIUM 0x1A 299 #define GL_EYE_LINEAR_CHROMIUM 0x2400 300 #define GL_OBJECT_LINEAR_CHROMIUM 0x2401 301 #define GL_CONSTANT_CHROMIUM 0x8576 302 #define GL_PATH_STROKE_WIDTH_CHROMIUM 0x9075 303 #define GL_PATH_END_CAPS_CHROMIUM 0x9076 304 #define GL_PATH_JOIN_STYLE_CHROMIUM 0x9079 305 #define GL_PATH_MITER_LIMIT_CHROMIUM 0x907a 306 #define GL_PATH_STROKE_BOUND_CHROMIUM 0x9086 307 #define GL_COUNT_UP_CHROMIUM 0x9088 308 #define GL_COUNT_DOWN_CHROMIUM 0x9089 309 #define GL_CONVEX_HULL_CHROMIUM 0x908B 310 #define GL_BOUNDING_BOX_CHROMIUM 0x908D 311 #define GL_TRANSLATE_X_CHROMIUM 0x908E 312 #define GL_TRANSLATE_Y_CHROMIUM 0x908F 313 #define GL_TRANSLATE_2D_CHROMIUM 0x9090 314 #define GL_TRANSLATE_3D_CHROMIUM 0x9091 315 #define GL_AFFINE_2D_CHROMIUM 0x9092 316 #define GL_AFFINE_3D_CHROMIUM 0x9094 317 #define GL_TRANSPOSE_AFFINE_2D_CHROMIUM 0x9096 318 #define GL_TRANSPOSE_AFFINE_3D_CHROMIUM 0x9098 319 #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM 0x909C 320 #define GL_SQUARE_CHROMIUM 0x90a3 321 #define GL_ROUND_CHROMIUM 0x90a4 322 #define GL_BEVEL_CHROMIUM 0x90a6 323 #define GL_MITER_REVERT_CHROMIUM 0x90a7 324 #define GL_PATH_STENCIL_FUNC_CHROMIUM 0x90B7 325 #define GL_PATH_STENCIL_REF_CHROMIUM 0x90B8 326 #define GL_PATH_STENCIL_VALUE_MASK_CHROMIUM 0x90B9 327 #endif 328 329 #ifndef GL_EXT_multisample_compatibility 330 #define GL_EXT_multisample_compatibility 1 331 #define GL_MULTISAMPLE_EXT 0x809D 332 #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F 333 #endif /* GL_EXT_multisample_compatibility */ 334 335 #ifndef GL_CHROMIUM_framebuffer_mixed_samples 336 #define GL_CHROMIUM_framebuffer_mixed_samples 1 337 #define GL_COVERAGE_MODULATION_CHROMIUM 0x9332 338 #endif /* GL_CHROMIUM_framebuffer_mixed_samples */ 339 340 #ifndef GL_KHR_blend_equation_advanced 341 #define GL_KHR_blend_equation_advanced 1 342 #define GL_COLORBURN_KHR 0x929A 343 #define GL_COLORDODGE_KHR 0x9299 344 #define GL_DARKEN_KHR 0x9297 345 #define GL_DIFFERENCE_KHR 0x929E 346 #define GL_EXCLUSION_KHR 0x92A0 347 #define GL_HARDLIGHT_KHR 0x929B 348 #define GL_HSL_COLOR_KHR 0x92AF 349 #define GL_HSL_HUE_KHR 0x92AD 350 #define GL_HSL_LUMINOSITY_KHR 0x92B0 351 #define GL_HSL_SATURATION_KHR 0x92AE 352 #define GL_LIGHTEN_KHR 0x9298 353 #define GL_MULTIPLY_KHR 0x9294 354 #define GL_OVERLAY_KHR 0x9296 355 #define GL_SCREEN_KHR 0x9295 356 #define GL_SOFTLIGHT_KHR 0x929C 357 #endif /* GL_KHR_blend_equation_advanced */ 358 359 #ifndef GL_KHR_blend_equation_advanced_coherent 360 #define GL_KHR_blend_equation_advanced_coherent 1 361 #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 362 #endif /* GL_KHR_blend_equation_advanced_coherent */ 363 364 #ifndef GL_EXT_disjoint_timer_query 365 #define GL_EXT_disjoint_timer_query 1 366 #define GL_QUERY_COUNTER_BITS_EXT 0x8864 367 #define GL_TIME_ELAPSED_EXT 0x88BF 368 #define GL_TIMESTAMP_EXT 0x8E28 369 #define GL_GPU_DISJOINT_EXT 0x8FBB 370 #endif 371 372 #ifndef GL_KHR_robustness 373 #define GL_KHR_robustness 1 374 #define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 375 #define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 376 #define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 377 #define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 378 #define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 379 #define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 380 #define GL_NO_RESET_NOTIFICATION_KHR 0x8261 381 #define GL_CONTEXT_LOST_KHR 0x0507 382 #endif /* GL_KHR_robustness */ 383 384 #ifndef GL_EXT_texture_norm16 385 #define GL_EXT_texture_norm16 1 386 #define GL_R16_EXT 0x822A 387 #define GL_RG16_EXT 0x822C 388 #define GL_RGBA16_EXT 0x805B 389 #define GL_RGB16_EXT 0x8054 390 #define GL_R16_SNORM_EXT 0x8F98 391 #define GL_RG16_SNORM_EXT 0x8F99 392 #define GL_RGBA16_SNORM_EXT 0x8F9B 393 #define GL_RGB16_SNORM_EXT 0x8F9A 394 #endif /* GL_EXT_texture_norm16 */ 395 396 #ifndef GL_EXT_texture_rg 397 #define GL_EXT_texture_rg 1 398 #define GL_RED_EXT 0x1903 399 #define GL_RG_EXT 0x8227 400 #define GL_R8_EXT 0x8229 401 #define GL_RG8_EXT 0x822B 402 #endif /* GL_EXT_texture_rg */ 403 404 // This is from NV_path_rendering, but the GL header is not up to date with the 405 // most recent version of the extension. This definition could be removed once 406 // glext.h r27498 or later is imported. 407 #ifndef GL_FRAGMENT_INPUT_NV 408 #define GL_FRAGMENT_INPUT_NV 0x936D 409 #endif 410 411 #ifndef GL_EXT_blend_func_extended 412 #define GL_EXT_blend_func_extended 1 413 #define GL_SRC_ALPHA_SATURATE_EXT 0x0308 414 #define GL_SRC1_ALPHA_EXT 0x8589 // OpenGL 1.5 token value 415 #define GL_SRC1_COLOR_EXT 0x88F9 416 #define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA 417 #define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB 418 #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC 419 #endif /* GL_EXT_blend_func_extended */ 420 421 #ifndef GL_EXT_window_rectangles 422 #define GL_EXT_window_rectangles 1 423 #define GL_INCLUSIVE_EXT 0x8F10 424 #define GL_EXCLUSIVE_EXT 0x8F11 425 #define GL_WINDOW_RECTANGLE_EXT 0x8F12 426 #define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 427 #define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 428 #define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 429 #endif /* GL_EXT_window_rectangles */ 430 431 #ifndef GL_CHROMIUM_nonblocking_readback 432 #define GL_CHROMIUM_nonblocking_readback 1 433 #define GL_READBACK_SHADOW_COPIES_UPDATED_CHROMIUM 0x84F8 434 #endif /* GL_CHROMIUM_nonblocking_readback */ 435 436 #ifndef GL_MESA_framebuffer_flip_y 437 #define GL_MESA_framebuffer_flip_y 1 438 #define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB 439 #endif /* GL_MESA_framebuffer_flip_y */ 440 441 #ifndef GL_KHR_parallel_shader_compile 442 #define GL_KHR_parallel_shader_compile 1 443 #define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 444 #define GL_COMPLETION_STATUS_KHR 0x91B1 445 #endif /* GL_KHR_parallel_shader_compile */ 446 447 #ifndef GL_CHROMIUM_shared_image 448 #define GL_CHROMIUM_shared_image 1 449 #define GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM 0x8AF6 450 #define GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM 0x8AF7 451 #endif /* GL_CHROMIUM_shared_image */ 452 453 #ifndef GL_NV_internalformat_sample_query 454 #define GL_MULTISAMPLES_NV 0x9371 455 #define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 456 #define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 457 #define GL_CONFORMANT_NV 0x9374 458 #endif /* GL_NV_internalformat_sample_query */ 459 460 #define GL_GLEXT_PROTOTYPES 1 461 462 #if defined(OS_WIN) 463 #define GL_BINDING_CALL WINAPI 464 #else 465 #define GL_BINDING_CALL 466 #endif 467 468 #if defined(NDEBUG) && !defined(GPU_ENABLE_SERVICE_LOGGING) 469 #define GL_SERVICE_LOG(args) DLOG(INFO) << args; 470 #define GL_SERVICE_LOG_CODE_BLOCK(code) 471 #else 472 #define GL_SERVICE_LOG(args) LOG(INFO) << args; 473 #define GL_SERVICE_LOG_CODE_BLOCK(code) code 474 #endif 475 476 // OVR_multiview2 constants. 477 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 478 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 479 #define GL_MAX_VIEWS_OVR 0x9631 480 #define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 481 482 #define GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT 0x8868 483 484 // Forward declare EGL types. 485 typedef uint64_t EGLuint64CHROMIUM; 486 #ifndef EGL_VERSION_1_5 487 typedef intptr_t EGLAttrib; 488 #endif 489 #ifndef EGL_KHR_stream 490 typedef void *EGLStreamKHR; 491 typedef uint64_t EGLuint64KHR; 492 #endif 493 #ifndef EGL_ANDROID_presentation_time 494 typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; 495 #endif 496 #ifndef EGL_KHR_debug 497 typedef void* EGLObjectKHR; 498 typedef void* EGLLabelKHR; 499 typedef void (APIENTRY *EGLDEBUGPROCKHR)( 500 EGLenum error, 501 const char *command, 502 EGLint messageType, 503 EGLLabelKHR threadLabel, 504 EGLLabelKHR objectLabel, 505 const char* message); 506 #endif 507 508 #include "gl_bindings_autogen_gl.h" 509 510 #if defined(USE_EGL) 511 #include "gl_bindings_autogen_egl.h" 512 #endif 513 514 #if defined(OS_WIN) 515 #include "gl_bindings_autogen_wgl.h" 516 #endif 517 518 #if defined(USE_GLX) 519 #include "gl_bindings_autogen_glx.h" 520 #endif 521 522 namespace gl { 523 524 struct GLVersionInfo; 525 526 struct GL_EXPORT DriverGL { 527 void InitializeStaticBindings(); 528 void InitializeDynamicBindings(const GLVersionInfo* ver, 529 const gfx::ExtensionSet& extensions); 530 void ClearBindings(); 531 532 ProcsGL fn; 533 ExtensionsGL ext; 534 DriverGLDriverGL535 DriverGL() { 536 // InitializeStaticBindings() requires that fn is null-initialized. 537 ClearBindings(); 538 } 539 }; 540 541 struct GL_EXPORT CurrentGL { 542 GLApi* Api = nullptr; 543 DriverGL* Driver = nullptr; 544 const GLVersionInfo* Version = nullptr; 545 }; 546 547 #if defined(OS_WIN) 548 struct GL_EXPORT DriverWGL { 549 void InitializeStaticBindings(); 550 void InitializeExtensionBindings(); 551 void ClearBindings(); 552 553 ProcsWGL fn; 554 ExtensionsWGL ext; 555 556 private: 557 static std::string GetPlatformExtensions(); 558 }; 559 #endif 560 561 #if defined(USE_EGL) 562 struct GL_EXPORT DriverEGL { 563 void InitializeStaticBindings(); 564 void InitializeClientExtensionBindings(); 565 void InitializeExtensionBindings(); 566 void ClearBindings(); 567 void UpdateConditionalExtensionBindings(); 568 569 ProcsEGL fn; 570 ExtensionsEGL ext; 571 572 static std::string GetPlatformExtensions(); 573 static std::string GetClientExtensions(); 574 }; 575 #endif 576 577 #if defined(USE_GLX) 578 struct GL_EXPORT DriverGLX { 579 void InitializeStaticBindings(); 580 #ifdef TOOLKIT_QT 581 void InitializeExtensionBindings(const std::string&); 582 #else 583 void InitializeExtensionBindings(); 584 #endif 585 586 void ClearBindings(); 587 588 ProcsGLX fn; 589 ExtensionsGLX ext; 590 591 #ifndef TOOLKIT_QT 592 private: 593 #endif 594 static std::string GetPlatformExtensions(); 595 }; 596 #endif 597 598 // This #define is here to support autogenerated code. 599 #define g_current_gl_context g_current_gl_context_tls->Get()->Api 600 #define g_current_gl_driver g_current_gl_context_tls->Get()->Driver 601 #define g_current_gl_version g_current_gl_context_tls->Get()->Version 602 GL_EXPORT extern base::ThreadLocalPointer<CurrentGL>* g_current_gl_context_tls; 603 604 #if defined(USE_EGL) 605 GL_EXPORT extern EGLApi* g_current_egl_context; 606 GL_EXPORT extern DriverEGL g_driver_egl; 607 #endif 608 609 #if defined(OS_WIN) 610 GL_EXPORT extern WGLApi* g_current_wgl_context; 611 GL_EXPORT extern DriverWGL g_driver_wgl; 612 #endif 613 614 #if defined(USE_GLX) 615 GL_EXPORT extern GLXApi* g_current_glx_context; 616 GL_EXPORT extern DriverGLX g_driver_glx; 617 #endif 618 619 } // namespace gl 620 621 #endif // UI_GL_GL_BINDINGS_H_ 622