egl_context.h (8417B)
1 //======================================================================== 2 // GLFW 3.4 EGL - www.glfw.org 3 //------------------------------------------------------------------------ 4 // Copyright (c) 2002-2006 Marcus Geelnard 5 // Copyright (c) 2006-2017 Camilla Löwy <elmindreda@glfw.org> 6 // 7 // This software is provided 'as-is', without any express or implied 8 // warranty. In no event will the authors be held liable for any damages 9 // arising from the use of this software. 10 // 11 // Permission is granted to anyone to use this software for any purpose, 12 // including commercial applications, and to alter it and redistribute it 13 // freely, subject to the following restrictions: 14 // 15 // 1. The origin of this software must not be misrepresented; you must not 16 // claim that you wrote the original software. If you use this software 17 // in a product, an acknowledgment in the product documentation would 18 // be appreciated but is not required. 19 // 20 // 2. Altered source versions must be plainly marked as such, and must not 21 // be misrepresented as being the original software. 22 // 23 // 3. This notice may not be removed or altered from any source 24 // distribution. 25 // 26 //======================================================================== 27 28 #if defined(_GLFW_USE_EGLPLATFORM_H) 29 #include <EGL/eglplatform.h> 30 #elif defined(_GLFW_WIN32) 31 #define EGLAPIENTRY __stdcall 32 typedef HDC EGLNativeDisplayType; 33 typedef HWND EGLNativeWindowType; 34 #elif defined(_GLFW_COCOA) 35 #define EGLAPIENTRY 36 typedef void* EGLNativeDisplayType; 37 typedef id EGLNativeWindowType; 38 #elif defined(_GLFW_X11) 39 #define EGLAPIENTRY 40 typedef Display* EGLNativeDisplayType; 41 typedef Window EGLNativeWindowType; 42 #elif defined(_GLFW_WAYLAND) 43 #define EGLAPIENTRY 44 typedef struct wl_display* EGLNativeDisplayType; 45 typedef struct wl_egl_window* EGLNativeWindowType; 46 #else 47 #error "No supported EGL platform selected" 48 #endif 49 50 #define EGL_SUCCESS 0x3000 51 #define EGL_NOT_INITIALIZED 0x3001 52 #define EGL_BAD_ACCESS 0x3002 53 #define EGL_BAD_ALLOC 0x3003 54 #define EGL_BAD_ATTRIBUTE 0x3004 55 #define EGL_BAD_CONFIG 0x3005 56 #define EGL_BAD_CONTEXT 0x3006 57 #define EGL_BAD_CURRENT_SURFACE 0x3007 58 #define EGL_BAD_DISPLAY 0x3008 59 #define EGL_BAD_MATCH 0x3009 60 #define EGL_BAD_NATIVE_PIXMAP 0x300a 61 #define EGL_BAD_NATIVE_WINDOW 0x300b 62 #define EGL_BAD_PARAMETER 0x300c 63 #define EGL_BAD_SURFACE 0x300d 64 #define EGL_CONTEXT_LOST 0x300e 65 #define EGL_COLOR_BUFFER_TYPE 0x303f 66 #define EGL_RGB_BUFFER 0x308e 67 #define EGL_SURFACE_TYPE 0x3033 68 #define EGL_WINDOW_BIT 0x0004 69 #define EGL_RENDERABLE_TYPE 0x3040 70 #define EGL_OPENGL_ES_BIT 0x0001 71 #define EGL_OPENGL_ES2_BIT 0x0004 72 #define EGL_OPENGL_BIT 0x0008 73 #define EGL_ALPHA_SIZE 0x3021 74 #define EGL_BLUE_SIZE 0x3022 75 #define EGL_GREEN_SIZE 0x3023 76 #define EGL_RED_SIZE 0x3024 77 #define EGL_DEPTH_SIZE 0x3025 78 #define EGL_STENCIL_SIZE 0x3026 79 #define EGL_SAMPLES 0x3031 80 #define EGL_OPENGL_ES_API 0x30a0 81 #define EGL_OPENGL_API 0x30a2 82 #define EGL_NONE 0x3038 83 #define EGL_EXTENSIONS 0x3055 84 #define EGL_CONTEXT_CLIENT_VERSION 0x3098 85 #define EGL_NATIVE_VISUAL_ID 0x302e 86 #define EGL_NO_SURFACE ((EGLSurface) 0) 87 #define EGL_NO_DISPLAY ((EGLDisplay) 0) 88 #define EGL_NO_CONTEXT ((EGLContext) 0) 89 #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType) 0) 90 91 #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 92 #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 93 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 94 #define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 95 #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31bd 96 #define EGL_NO_RESET_NOTIFICATION_KHR 0x31be 97 #define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31bf 98 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 99 #define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 100 #define EGL_CONTEXT_MINOR_VERSION_KHR 0x30fb 101 #define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30fd 102 #define EGL_CONTEXT_FLAGS_KHR 0x30fc 103 #define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31b3 104 #define EGL_GL_COLORSPACE_KHR 0x309d 105 #define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 106 #define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 107 #define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 108 #define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 109 110 typedef int EGLint; 111 typedef unsigned int EGLBoolean; 112 typedef unsigned int EGLenum; 113 typedef void* EGLConfig; 114 typedef void* EGLContext; 115 typedef void* EGLDisplay; 116 typedef void* EGLSurface; 117 118 // EGL function pointer typedefs 119 typedef EGLBoolean (EGLAPIENTRY * PFN_eglGetConfigAttrib)(EGLDisplay,EGLConfig,EGLint,EGLint*); 120 typedef EGLBoolean (EGLAPIENTRY * PFN_eglGetConfigs)(EGLDisplay,EGLConfig*,EGLint,EGLint*); 121 typedef EGLDisplay (EGLAPIENTRY * PFN_eglGetDisplay)(EGLNativeDisplayType); 122 typedef EGLint (EGLAPIENTRY * PFN_eglGetError)(void); 123 typedef EGLBoolean (EGLAPIENTRY * PFN_eglInitialize)(EGLDisplay,EGLint*,EGLint*); 124 typedef EGLBoolean (EGLAPIENTRY * PFN_eglTerminate)(EGLDisplay); 125 typedef EGLBoolean (EGLAPIENTRY * PFN_eglBindAPI)(EGLenum); 126 typedef EGLContext (EGLAPIENTRY * PFN_eglCreateContext)(EGLDisplay,EGLConfig,EGLContext,const EGLint*); 127 typedef EGLBoolean (EGLAPIENTRY * PFN_eglDestroySurface)(EGLDisplay,EGLSurface); 128 typedef EGLBoolean (EGLAPIENTRY * PFN_eglDestroyContext)(EGLDisplay,EGLContext); 129 typedef EGLSurface (EGLAPIENTRY * PFN_eglCreateWindowSurface)(EGLDisplay,EGLConfig,EGLNativeWindowType,const EGLint*); 130 typedef EGLBoolean (EGLAPIENTRY * PFN_eglMakeCurrent)(EGLDisplay,EGLSurface,EGLSurface,EGLContext); 131 typedef EGLBoolean (EGLAPIENTRY * PFN_eglSwapBuffers)(EGLDisplay,EGLSurface); 132 typedef EGLBoolean (EGLAPIENTRY * PFN_eglSwapInterval)(EGLDisplay,EGLint); 133 typedef const char* (EGLAPIENTRY * PFN_eglQueryString)(EGLDisplay,EGLint); 134 typedef GLFWglproc (EGLAPIENTRY * PFN_eglGetProcAddress)(const char*); 135 #define eglGetConfigAttrib _glfw.egl.GetConfigAttrib 136 #define eglGetConfigs _glfw.egl.GetConfigs 137 #define eglGetDisplay _glfw.egl.GetDisplay 138 #define eglGetError _glfw.egl.GetError 139 #define eglInitialize _glfw.egl.Initialize 140 #define eglTerminate _glfw.egl.Terminate 141 #define eglBindAPI _glfw.egl.BindAPI 142 #define eglCreateContext _glfw.egl.CreateContext 143 #define eglDestroySurface _glfw.egl.DestroySurface 144 #define eglDestroyContext _glfw.egl.DestroyContext 145 #define eglCreateWindowSurface _glfw.egl.CreateWindowSurface 146 #define eglMakeCurrent _glfw.egl.MakeCurrent 147 #define eglSwapBuffers _glfw.egl.SwapBuffers 148 #define eglSwapInterval _glfw.egl.SwapInterval 149 #define eglQueryString _glfw.egl.QueryString 150 #define eglGetProcAddress _glfw.egl.GetProcAddress 151 152 #define _GLFW_EGL_CONTEXT_STATE _GLFWcontextEGL egl 153 #define _GLFW_EGL_LIBRARY_CONTEXT_STATE _GLFWlibraryEGL egl 154 155 156 // EGL-specific per-context data 157 // 158 typedef struct _GLFWcontextEGL 159 { 160 EGLConfig config; 161 EGLContext handle; 162 EGLSurface surface; 163 164 void* client; 165 166 } _GLFWcontextEGL; 167 168 // EGL-specific global data 169 // 170 typedef struct _GLFWlibraryEGL 171 { 172 EGLDisplay display; 173 EGLint major, minor; 174 GLFWbool prefix; 175 176 GLFWbool KHR_create_context; 177 GLFWbool KHR_create_context_no_error; 178 GLFWbool KHR_gl_colorspace; 179 GLFWbool KHR_get_all_proc_addresses; 180 GLFWbool KHR_context_flush_control; 181 182 void* handle; 183 184 PFN_eglGetConfigAttrib GetConfigAttrib; 185 PFN_eglGetConfigs GetConfigs; 186 PFN_eglGetDisplay GetDisplay; 187 PFN_eglGetError GetError; 188 PFN_eglInitialize Initialize; 189 PFN_eglTerminate Terminate; 190 PFN_eglBindAPI BindAPI; 191 PFN_eglCreateContext CreateContext; 192 PFN_eglDestroySurface DestroySurface; 193 PFN_eglDestroyContext DestroyContext; 194 PFN_eglCreateWindowSurface CreateWindowSurface; 195 PFN_eglMakeCurrent MakeCurrent; 196 PFN_eglSwapBuffers SwapBuffers; 197 PFN_eglSwapInterval SwapInterval; 198 PFN_eglQueryString QueryString; 199 PFN_eglGetProcAddress GetProcAddress; 200 201 } _GLFWlibraryEGL; 202 203 204 GLFWbool _glfwInitEGL(void); 205 void _glfwTerminateEGL(void); 206 GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, 207 const _GLFWctxconfig* ctxconfig, 208 const _GLFWfbconfig* fbconfig); 209 #if defined(_GLFW_X11) 210 GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig, 211 const _GLFWctxconfig* ctxconfig, 212 const _GLFWfbconfig* fbconfig, 213 Visual** visual, int* depth); 214 #endif /*_GLFW_X11*/ 215