1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_GL_GL_BINDINGS_H_
#define UI_GL_GL_BINDINGS_H_
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
// Includes the platform independent and platform dependent GL headers.
// GL headers may include inttypes.h and so we need to ensure that
// __STDC_FORMAT_MACROS is defined in order for //base/format_macros.h to
// function correctly. See comment and #error message in //base/format_macros.h
// for details.
#if BUILDFLAG(IS_POSIX) && !defined(__STDC_FORMAT_MACROS)
#define __STDC_FORMAT_MACROS
#endif
// The GL and EGL headers below are included in a specific order with comments
// separating them to avoid the code formatter re-ordering them.
// Core GL headers must be included before the glext headers
#include <GLES3/gl32.h>
// glext headers reference the GL enums added in the core GL headers
#include <GLES2/gl2ext.h>
#include <GLES2/gl2ext_angle.h>
// Core EGL headers can be included after GL
#include <EGL/egl.h>
// eglext headers reference EGL eums added in the core EGL headers
#include <EGL/eglext.h>
#include <EGL/eglext_angle.h>
#include <stdint.h>
#include "base/logging.h"
#include "build/build_config.h"
#include "ui/gfx/extension_set.h"
#include "ui/gl/gl_export.h"
// GLClampd is only defined in the desktop headers
typedef double GLclampd;
// Desktop GL-only enable state
#define GL_PRIMITIVE_RESTART 0x8F9D
#define GL_UNPACK_COLORSPACE_CONVERSION_CHROMIUM 0x9243
#define GL_BIND_GENERATES_RESOURCE_CHROMIUM 0x9244
// GL_ARB_occlusion_query
#define GL_SAMPLES_PASSED_ARB 0x8914
// GL_CHROMIUM_command_buffer_query
#define GL_COMMANDS_ISSUED_CHROMIUM 0x6004
#define GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM 0x6005
/* GL_CHROMIUM_get_error_query */
#define GL_GET_ERROR_QUERY_CHROMIUM 0x6003
/* GL_CHROMIUM_program_completion_query */
#define GL_PROGRAM_COMPLETION_QUERY_CHROMIUM 0x6009
/* GL_CHROMIUM_async_pixel_transfers */
#define GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM 0x6006
// GL_CHROMIUM_sync_query
#define GL_COMMANDS_COMPLETED_CHROMIUM 0x84F7
// GL_CHROMIUM_subscribe_uniforms
#define GL_SUBSCRIBED_VALUES_BUFFER_CHROMIUM 0x924B
#define GL_MOUSE_POSITION_CHROMIUM 0x924C
// GL_CHROMIUM_pixel_transfer_buffer_object
#define GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM 0x78EC
#define GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM 0x78ED
#define GL_PIXEL_PACK_TRANSFER_BUFFER_BINDING_CHROMIUM 0x78EE
#define GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM 0x78EF
#ifndef GL_EXT_multisample_compatibility
#define GL_EXT_multisample_compatibility 1
#define GL_MULTISAMPLE_EXT 0x809D
#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
#endif /* GL_EXT_multisample_compatibility */
#ifndef GL_CHROMIUM_nonblocking_readback
#define GL_CHROMIUM_nonblocking_readback 1
#define GL_READBACK_SHADOW_COPIES_UPDATED_CHROMIUM 0x84F8
#endif /* GL_CHROMIUM_nonblocking_readback */
#ifndef GL_CHROMIUM_shared_image
#define GL_CHROMIUM_shared_image 1
#define GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM 0x8AF6
#define GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM 0x8AF7
#endif /* GL_CHROMIUM_shared_image */
#define GL_GLEXT_PROTOTYPES 1
#if BUILDFLAG(IS_WIN)
#define GL_BINDING_CALL WINAPI
#else
#define GL_BINDING_CALL
#endif
#if defined(NDEBUG) && !defined(GPU_ENABLE_SERVICE_LOGGING)
#define GL_SERVICE_LOG(args) DLOG(INFO) << args;
#define GL_SERVICE_LOG_CODE_BLOCK(code)
#else
#define GL_SERVICE_LOG(args) LOG(INFO) << args;
#define GL_SERVICE_LOG_CODE_BLOCK(code) code
#endif
#define GL_QUERY_RESULT_AVAILABLE_NO_FLUSH_CHROMIUM_EXT 0x8868
// Forward declare EGL types.
typedef uint64_t EGLuint64CHROMIUM;
#if !defined(BINDINGS_GL_PROTOTYPES)
#define BINDINGS_GL_PROTOTYPES 1
#endif
#include "gl_bindings_autogen_gl.h"
#if !defined(BINDINGS_EGL_PROTOTYPES)
#define BINDINGS_EGL_PROTOTYPES 1
#endif
#include "gl_bindings_autogen_egl.h"
using GLFunctionPointerType = void (*)();
#if BUILDFLAG(IS_WIN)
typedef GLFunctionPointerType(WINAPI* GLGetProcAddressProc)(const char* name);
#define STDCALL __stdcall
#else
typedef GLFunctionPointerType (*GLGetProcAddressProc)(const char* name);
#define STDCALL
#endif
namespace gl {
struct GLVersionInfo;
struct GL_EXPORT DriverGL {
void InitializeStaticBindings(GLGetProcAddressProc get_proc_address);
void InitializeDynamicBindings(GLGetProcAddressProc get_proc_address,
const GLVersionInfo* ver,
const gfx::ExtensionSet& extensions);
void ClearBindings();
ProcsGL fn;
ExtensionsGL ext;
};
struct GL_EXPORT CurrentGL {
raw_ptr<GLApi, DanglingUntriaged> Api = nullptr;
raw_ptr<DriverGL, DanglingUntriaged> Driver = nullptr;
raw_ptr<const GLVersionInfo, AcrossTasksDanglingUntriaged> Version = nullptr;
};
struct GL_EXPORT DriverEGL {
void InitializeStaticBindings(GLGetProcAddressProc get_proc_address);
void ClearBindings();
ProcsEGL fn;
ClientExtensionsEGL client_ext;
};
// This #define is here to support autogenerated code.
#define g_current_gl_context GetThreadLocalCurrentGL()->Api.get()
#define g_current_gl_driver GetThreadLocalCurrentGL()->Driver
#define g_current_gl_version GetThreadLocalCurrentGL()->Version.get()
GL_EXPORT CurrentGL* GetThreadLocalCurrentGL();
GL_EXPORT extern EGLApi* g_current_egl_context;
GL_EXPORT extern DriverEGL g_driver_egl;
} // namespace gl
#endif // UI_GL_GL_BINDINGS_H_
|