zorldo

Goofing around with Ebiten
git clone git://bsandro.tech/zorldo
Log | Files | Refs | README

egl_context.h (8417B)


      1 //========================================================================
      2 // GLFW 3.3 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