volviewer

Volumetric Data Toy Viewer
git clone anongit@rnpnr.xyz:volviewer.git
Log | Files | Refs | Feed | LICENSE

internal.h (35817B)


      1 //========================================================================
      2 // GLFW 3.4 - www.glfw.org
      3 //------------------------------------------------------------------------
      4 // Copyright (c) 2002-2006 Marcus Geelnard
      5 // Copyright (c) 2006-2019 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 #pragma once
     29 
     30 #if defined(_GLFW_USE_CONFIG_H)
     31  #include "glfw_config.h"
     32 #endif
     33 
     34 #if defined(GLFW_INCLUDE_GLCOREARB) || \
     35     defined(GLFW_INCLUDE_ES1)       || \
     36     defined(GLFW_INCLUDE_ES2)       || \
     37     defined(GLFW_INCLUDE_ES3)       || \
     38     defined(GLFW_INCLUDE_ES31)      || \
     39     defined(GLFW_INCLUDE_ES32)      || \
     40     defined(GLFW_INCLUDE_NONE)      || \
     41     defined(GLFW_INCLUDE_GLEXT)     || \
     42     defined(GLFW_INCLUDE_GLU)       || \
     43     defined(GLFW_INCLUDE_VULKAN)    || \
     44     defined(GLFW_DLL)
     45  #error "You must not define any header option macros when compiling GLFW"
     46 #endif
     47 
     48 #define GLFW_INCLUDE_NONE
     49 #include "../include/GLFW/glfw3.h"
     50 
     51 #define _GLFW_INSERT_FIRST      0
     52 #define _GLFW_INSERT_LAST       1
     53 
     54 #define _GLFW_POLL_PRESENCE     0
     55 #define _GLFW_POLL_AXES         1
     56 #define _GLFW_POLL_BUTTONS      2
     57 #define _GLFW_POLL_ALL          (_GLFW_POLL_AXES | _GLFW_POLL_BUTTONS)
     58 
     59 #define _GLFW_MESSAGE_SIZE      1024
     60 
     61 typedef int GLFWbool;
     62 typedef void (*GLFWproc)(void);
     63 
     64 typedef struct _GLFWerror       _GLFWerror;
     65 typedef struct _GLFWinitconfig  _GLFWinitconfig;
     66 typedef struct _GLFWwndconfig   _GLFWwndconfig;
     67 typedef struct _GLFWctxconfig   _GLFWctxconfig;
     68 typedef struct _GLFWfbconfig    _GLFWfbconfig;
     69 typedef struct _GLFWcontext     _GLFWcontext;
     70 typedef struct _GLFWwindow      _GLFWwindow;
     71 typedef struct _GLFWplatform    _GLFWplatform;
     72 typedef struct _GLFWlibrary     _GLFWlibrary;
     73 typedef struct _GLFWmonitor     _GLFWmonitor;
     74 typedef struct _GLFWcursor      _GLFWcursor;
     75 typedef struct _GLFWmapelement  _GLFWmapelement;
     76 typedef struct _GLFWmapping     _GLFWmapping;
     77 typedef struct _GLFWjoystick    _GLFWjoystick;
     78 typedef struct _GLFWtls         _GLFWtls;
     79 typedef struct _GLFWmutex       _GLFWmutex;
     80 
     81 #define GL_VERSION 0x1f02
     82 #define GL_NONE 0
     83 #define GL_COLOR_BUFFER_BIT 0x00004000
     84 #define GL_UNSIGNED_BYTE 0x1401
     85 #define GL_EXTENSIONS 0x1f03
     86 #define GL_NUM_EXTENSIONS 0x821d
     87 #define GL_CONTEXT_FLAGS 0x821e
     88 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001
     89 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
     90 #define GL_CONTEXT_PROFILE_MASK 0x9126
     91 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
     92 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
     93 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
     94 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
     95 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261
     96 #define GL_CONTEXT_RELEASE_BEHAVIOR 0x82fb
     97 #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82fc
     98 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
     99 
    100 typedef int GLint;
    101 typedef unsigned int GLuint;
    102 typedef unsigned int GLenum;
    103 typedef unsigned int GLbitfield;
    104 typedef unsigned char GLubyte;
    105 
    106 typedef void (APIENTRY * PFNGLCLEARPROC)(GLbitfield);
    107 typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGPROC)(GLenum);
    108 typedef void (APIENTRY * PFNGLGETINTEGERVPROC)(GLenum,GLint*);
    109 typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGIPROC)(GLenum,GLuint);
    110 
    111 #define EGL_SUCCESS 0x3000
    112 #define EGL_NOT_INITIALIZED 0x3001
    113 #define EGL_BAD_ACCESS 0x3002
    114 #define EGL_BAD_ALLOC 0x3003
    115 #define EGL_BAD_ATTRIBUTE 0x3004
    116 #define EGL_BAD_CONFIG 0x3005
    117 #define EGL_BAD_CONTEXT 0x3006
    118 #define EGL_BAD_CURRENT_SURFACE 0x3007
    119 #define EGL_BAD_DISPLAY 0x3008
    120 #define EGL_BAD_MATCH 0x3009
    121 #define EGL_BAD_NATIVE_PIXMAP 0x300a
    122 #define EGL_BAD_NATIVE_WINDOW 0x300b
    123 #define EGL_BAD_PARAMETER 0x300c
    124 #define EGL_BAD_SURFACE 0x300d
    125 #define EGL_CONTEXT_LOST 0x300e
    126 #define EGL_COLOR_BUFFER_TYPE 0x303f
    127 #define EGL_RGB_BUFFER 0x308e
    128 #define EGL_SURFACE_TYPE 0x3033
    129 #define EGL_WINDOW_BIT 0x0004
    130 #define EGL_RENDERABLE_TYPE 0x3040
    131 #define EGL_OPENGL_ES_BIT 0x0001
    132 #define EGL_OPENGL_ES2_BIT 0x0004
    133 #define EGL_OPENGL_BIT 0x0008
    134 #define EGL_ALPHA_SIZE 0x3021
    135 #define EGL_BLUE_SIZE 0x3022
    136 #define EGL_GREEN_SIZE 0x3023
    137 #define EGL_RED_SIZE 0x3024
    138 #define EGL_DEPTH_SIZE 0x3025
    139 #define EGL_STENCIL_SIZE 0x3026
    140 #define EGL_SAMPLES 0x3031
    141 #define EGL_OPENGL_ES_API 0x30a0
    142 #define EGL_OPENGL_API 0x30a2
    143 #define EGL_NONE 0x3038
    144 #define EGL_RENDER_BUFFER 0x3086
    145 #define EGL_SINGLE_BUFFER 0x3085
    146 #define EGL_EXTENSIONS 0x3055
    147 #define EGL_CONTEXT_CLIENT_VERSION 0x3098
    148 #define EGL_NATIVE_VISUAL_ID 0x302e
    149 #define EGL_NO_SURFACE ((EGLSurface) 0)
    150 #define EGL_NO_DISPLAY ((EGLDisplay) 0)
    151 #define EGL_NO_CONTEXT ((EGLContext) 0)
    152 #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType) 0)
    153 
    154 #define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002
    155 #define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001
    156 #define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002
    157 #define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001
    158 #define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31bd
    159 #define EGL_NO_RESET_NOTIFICATION_KHR 0x31be
    160 #define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31bf
    161 #define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004
    162 #define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098
    163 #define EGL_CONTEXT_MINOR_VERSION_KHR 0x30fb
    164 #define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30fd
    165 #define EGL_CONTEXT_FLAGS_KHR 0x30fc
    166 #define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31b3
    167 #define EGL_GL_COLORSPACE_KHR 0x309d
    168 #define EGL_GL_COLORSPACE_SRGB_KHR 0x3089
    169 #define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097
    170 #define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0
    171 #define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098
    172 #define EGL_PLATFORM_X11_EXT 0x31d5
    173 #define EGL_PLATFORM_WAYLAND_EXT 0x31d8
    174 #define EGL_PRESENT_OPAQUE_EXT 0x31df
    175 #define EGL_PLATFORM_ANGLE_ANGLE 0x3202
    176 #define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203
    177 #define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320d
    178 #define EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE 0x320e
    179 #define EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE 0x3207
    180 #define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208
    181 #define EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE 0x3450
    182 #define EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE 0x3489
    183 #define EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE 0x348f
    184 
    185 typedef int EGLint;
    186 typedef unsigned int EGLBoolean;
    187 typedef unsigned int EGLenum;
    188 typedef void* EGLConfig;
    189 typedef void* EGLContext;
    190 typedef void* EGLDisplay;
    191 typedef void* EGLSurface;
    192 
    193 typedef void* EGLNativeDisplayType;
    194 typedef void* EGLNativeWindowType;
    195 
    196 // EGL function pointer typedefs
    197 typedef EGLBoolean (APIENTRY * PFN_eglGetConfigAttrib)(EGLDisplay,EGLConfig,EGLint,EGLint*);
    198 typedef EGLBoolean (APIENTRY * PFN_eglGetConfigs)(EGLDisplay,EGLConfig*,EGLint,EGLint*);
    199 typedef EGLDisplay (APIENTRY * PFN_eglGetDisplay)(EGLNativeDisplayType);
    200 typedef EGLint (APIENTRY * PFN_eglGetError)(void);
    201 typedef EGLBoolean (APIENTRY * PFN_eglInitialize)(EGLDisplay,EGLint*,EGLint*);
    202 typedef EGLBoolean (APIENTRY * PFN_eglTerminate)(EGLDisplay);
    203 typedef EGLBoolean (APIENTRY * PFN_eglBindAPI)(EGLenum);
    204 typedef EGLContext (APIENTRY * PFN_eglCreateContext)(EGLDisplay,EGLConfig,EGLContext,const EGLint*);
    205 typedef EGLBoolean (APIENTRY * PFN_eglDestroySurface)(EGLDisplay,EGLSurface);
    206 typedef EGLBoolean (APIENTRY * PFN_eglDestroyContext)(EGLDisplay,EGLContext);
    207 typedef EGLSurface (APIENTRY * PFN_eglCreateWindowSurface)(EGLDisplay,EGLConfig,EGLNativeWindowType,const EGLint*);
    208 typedef EGLBoolean (APIENTRY * PFN_eglMakeCurrent)(EGLDisplay,EGLSurface,EGLSurface,EGLContext);
    209 typedef EGLBoolean (APIENTRY * PFN_eglSwapBuffers)(EGLDisplay,EGLSurface);
    210 typedef EGLBoolean (APIENTRY * PFN_eglSwapInterval)(EGLDisplay,EGLint);
    211 typedef const char* (APIENTRY * PFN_eglQueryString)(EGLDisplay,EGLint);
    212 typedef GLFWglproc (APIENTRY * PFN_eglGetProcAddress)(const char*);
    213 #define eglGetConfigAttrib _glfw.egl.GetConfigAttrib
    214 #define eglGetConfigs _glfw.egl.GetConfigs
    215 #define eglGetDisplay _glfw.egl.GetDisplay
    216 #define eglGetError _glfw.egl.GetError
    217 #define eglInitialize _glfw.egl.Initialize
    218 #define eglTerminate _glfw.egl.Terminate
    219 #define eglBindAPI _glfw.egl.BindAPI
    220 #define eglCreateContext _glfw.egl.CreateContext
    221 #define eglDestroySurface _glfw.egl.DestroySurface
    222 #define eglDestroyContext _glfw.egl.DestroyContext
    223 #define eglCreateWindowSurface _glfw.egl.CreateWindowSurface
    224 #define eglMakeCurrent _glfw.egl.MakeCurrent
    225 #define eglSwapBuffers _glfw.egl.SwapBuffers
    226 #define eglSwapInterval _glfw.egl.SwapInterval
    227 #define eglQueryString _glfw.egl.QueryString
    228 #define eglGetProcAddress _glfw.egl.GetProcAddress
    229 
    230 typedef EGLDisplay (APIENTRY * PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum,void*,const EGLint*);
    231 typedef EGLSurface (APIENTRY * PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)(EGLDisplay,EGLConfig,void*,const EGLint*);
    232 #define eglGetPlatformDisplayEXT _glfw.egl.GetPlatformDisplayEXT
    233 #define eglCreatePlatformWindowSurfaceEXT _glfw.egl.CreatePlatformWindowSurfaceEXT
    234 
    235 #define OSMESA_RGBA 0x1908
    236 #define OSMESA_FORMAT 0x22
    237 #define OSMESA_DEPTH_BITS 0x30
    238 #define OSMESA_STENCIL_BITS 0x31
    239 #define OSMESA_ACCUM_BITS 0x32
    240 #define OSMESA_PROFILE 0x33
    241 #define OSMESA_CORE_PROFILE 0x34
    242 #define OSMESA_COMPAT_PROFILE 0x35
    243 #define OSMESA_CONTEXT_MAJOR_VERSION 0x36
    244 #define OSMESA_CONTEXT_MINOR_VERSION 0x37
    245 
    246 typedef void* OSMesaContext;
    247 typedef void (*OSMESAproc)(void);
    248 
    249 typedef OSMesaContext (GLAPIENTRY * PFN_OSMesaCreateContextExt)(GLenum,GLint,GLint,GLint,OSMesaContext);
    250 typedef OSMesaContext (GLAPIENTRY * PFN_OSMesaCreateContextAttribs)(const int*,OSMesaContext);
    251 typedef void (GLAPIENTRY * PFN_OSMesaDestroyContext)(OSMesaContext);
    252 typedef int (GLAPIENTRY * PFN_OSMesaMakeCurrent)(OSMesaContext,void*,int,int,int);
    253 typedef int (GLAPIENTRY * PFN_OSMesaGetColorBuffer)(OSMesaContext,int*,int*,int*,void**);
    254 typedef int (GLAPIENTRY * PFN_OSMesaGetDepthBuffer)(OSMesaContext,int*,int*,int*,void**);
    255 typedef GLFWglproc (GLAPIENTRY * PFN_OSMesaGetProcAddress)(const char*);
    256 #define OSMesaCreateContextExt _glfw.osmesa.CreateContextExt
    257 #define OSMesaCreateContextAttribs _glfw.osmesa.CreateContextAttribs
    258 #define OSMesaDestroyContext _glfw.osmesa.DestroyContext
    259 #define OSMesaMakeCurrent _glfw.osmesa.MakeCurrent
    260 #define OSMesaGetColorBuffer _glfw.osmesa.GetColorBuffer
    261 #define OSMesaGetDepthBuffer _glfw.osmesa.GetDepthBuffer
    262 #define OSMesaGetProcAddress _glfw.osmesa.GetProcAddress
    263 
    264 #define VK_NULL_HANDLE 0
    265 
    266 typedef void* VkInstance;
    267 typedef void* VkPhysicalDevice;
    268 typedef uint64_t VkSurfaceKHR;
    269 typedef uint32_t VkFlags;
    270 typedef uint32_t VkBool32;
    271 
    272 typedef enum VkStructureType
    273 {
    274     VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
    275     VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
    276     VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
    277     VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
    278     VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
    279     VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000,
    280     VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
    281 } VkStructureType;
    282 
    283 typedef enum VkResult
    284 {
    285     VK_SUCCESS = 0,
    286     VK_NOT_READY = 1,
    287     VK_TIMEOUT = 2,
    288     VK_EVENT_SET = 3,
    289     VK_EVENT_RESET = 4,
    290     VK_INCOMPLETE = 5,
    291     VK_ERROR_OUT_OF_HOST_MEMORY = -1,
    292     VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
    293     VK_ERROR_INITIALIZATION_FAILED = -3,
    294     VK_ERROR_DEVICE_LOST = -4,
    295     VK_ERROR_MEMORY_MAP_FAILED = -5,
    296     VK_ERROR_LAYER_NOT_PRESENT = -6,
    297     VK_ERROR_EXTENSION_NOT_PRESENT = -7,
    298     VK_ERROR_FEATURE_NOT_PRESENT = -8,
    299     VK_ERROR_INCOMPATIBLE_DRIVER = -9,
    300     VK_ERROR_TOO_MANY_OBJECTS = -10,
    301     VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
    302     VK_ERROR_SURFACE_LOST_KHR = -1000000000,
    303     VK_SUBOPTIMAL_KHR = 1000001003,
    304     VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
    305     VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
    306     VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
    307     VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
    308     VK_RESULT_MAX_ENUM = 0x7FFFFFFF
    309 } VkResult;
    310 
    311 typedef struct VkAllocationCallbacks VkAllocationCallbacks;
    312 
    313 typedef struct VkExtensionProperties
    314 {
    315     char            extensionName[256];
    316     uint32_t        specVersion;
    317 } VkExtensionProperties;
    318 
    319 typedef void (APIENTRY * PFN_vkVoidFunction)(void);
    320 
    321 typedef PFN_vkVoidFunction (APIENTRY * PFN_vkGetInstanceProcAddr)(VkInstance,const char*);
    322 typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const char*,uint32_t*,VkExtensionProperties*);
    323 #define vkGetInstanceProcAddr _glfw.vk.GetInstanceProcAddr
    324 
    325 #include "platform.h"
    326 
    327 #define GLFW_NATIVE_INCLUDE_NONE
    328 #include "../include/GLFW/glfw3native.h"
    329 
    330 // Checks for whether the library has been initialized
    331 #define _GLFW_REQUIRE_INIT()                         \
    332     if (!_glfw.initialized)                          \
    333     {                                                \
    334         _glfwInputError(GLFW_NOT_INITIALIZED, NULL); \
    335         return;                                      \
    336     }
    337 #define _GLFW_REQUIRE_INIT_OR_RETURN(x)              \
    338     if (!_glfw.initialized)                          \
    339     {                                                \
    340         _glfwInputError(GLFW_NOT_INITIALIZED, NULL); \
    341         return x;                                    \
    342     }
    343 
    344 // Swaps the provided pointers
    345 #define _GLFW_SWAP(type, x, y) \
    346     {                          \
    347         type t;                \
    348         t = x;                 \
    349         x = y;                 \
    350         y = t;                 \
    351     }
    352 
    353 // Per-thread error structure
    354 //
    355 struct _GLFWerror
    356 {
    357     _GLFWerror*     next;
    358     int             code;
    359     char            description[_GLFW_MESSAGE_SIZE];
    360 };
    361 
    362 // Initialization configuration
    363 //
    364 // Parameters relating to the initialization of the library
    365 //
    366 struct _GLFWinitconfig
    367 {
    368     GLFWbool      hatButtons;
    369     int           angleType;
    370     int           platformID;
    371     PFN_vkGetInstanceProcAddr vulkanLoader;
    372     struct {
    373         GLFWbool  menubar;
    374         GLFWbool  chdir;
    375     } ns;
    376     struct {
    377         GLFWbool  xcbVulkanSurface;
    378     } x11;
    379     struct {
    380         int       libdecorMode;
    381     } wl;
    382 };
    383 
    384 // Window configuration
    385 //
    386 // Parameters relating to the creation of the window but not directly related
    387 // to the framebuffer.  This is used to pass window creation parameters from
    388 // shared code to the platform API.
    389 //
    390 struct _GLFWwndconfig
    391 {
    392     int           xpos;
    393     int           ypos;
    394     int           width;
    395     int           height;
    396     const char*   title;
    397     GLFWbool      resizable;
    398     GLFWbool      visible;
    399     GLFWbool      decorated;
    400     GLFWbool      focused;
    401     GLFWbool      autoIconify;
    402     GLFWbool      floating;
    403     GLFWbool      maximized;
    404     GLFWbool      centerCursor;
    405     GLFWbool      focusOnShow;
    406     GLFWbool      mousePassthrough;
    407     GLFWbool      scaleToMonitor;
    408     GLFWbool      scaleFramebuffer;
    409     struct {
    410         char      frameName[256];
    411     } ns;
    412     struct {
    413         char      className[256];
    414         char      instanceName[256];
    415     } x11;
    416     struct {
    417         GLFWbool  keymenu;
    418         GLFWbool  showDefault;
    419     } win32;
    420     struct {
    421         char      appId[256];
    422     } wl;
    423 };
    424 
    425 // Context configuration
    426 //
    427 // Parameters relating to the creation of the context but not directly related
    428 // to the framebuffer.  This is used to pass context creation parameters from
    429 // shared code to the platform API.
    430 //
    431 struct _GLFWctxconfig
    432 {
    433     int           client;
    434     int           source;
    435     int           major;
    436     int           minor;
    437     GLFWbool      forward;
    438     GLFWbool      debug;
    439     GLFWbool      noerror;
    440     int           profile;
    441     int           robustness;
    442     int           release;
    443     _GLFWwindow*  share;
    444     struct {
    445         GLFWbool  offline;
    446     } nsgl;
    447 };
    448 
    449 // Framebuffer configuration
    450 //
    451 // This describes buffers and their sizes.  It also contains
    452 // a platform-specific ID used to map back to the backend API object.
    453 //
    454 // It is used to pass framebuffer parameters from shared code to the platform
    455 // API and also to enumerate and select available framebuffer configs.
    456 //
    457 struct _GLFWfbconfig
    458 {
    459     int         redBits;
    460     int         greenBits;
    461     int         blueBits;
    462     int         alphaBits;
    463     int         depthBits;
    464     int         stencilBits;
    465     int         accumRedBits;
    466     int         accumGreenBits;
    467     int         accumBlueBits;
    468     int         accumAlphaBits;
    469     int         auxBuffers;
    470     GLFWbool    stereo;
    471     int         samples;
    472     GLFWbool    sRGB;
    473     GLFWbool    doublebuffer;
    474     GLFWbool    transparent;
    475     uintptr_t   handle;
    476 };
    477 
    478 // Context structure
    479 //
    480 struct _GLFWcontext
    481 {
    482     int                 client;
    483     int                 source;
    484     int                 major, minor, revision;
    485     GLFWbool            forward, debug, noerror;
    486     int                 profile;
    487     int                 robustness;
    488     int                 release;
    489 
    490     PFNGLGETSTRINGIPROC  GetStringi;
    491     PFNGLGETINTEGERVPROC GetIntegerv;
    492     PFNGLGETSTRINGPROC   GetString;
    493 
    494     void (*makeCurrent)(_GLFWwindow*);
    495     void (*swapBuffers)(_GLFWwindow*);
    496     void (*swapInterval)(int);
    497     int (*extensionSupported)(const char*);
    498     GLFWglproc (*getProcAddress)(const char*);
    499     void (*destroy)(_GLFWwindow*);
    500 
    501     struct {
    502         EGLConfig       config;
    503         EGLContext      handle;
    504         EGLSurface      surface;
    505         void*           client;
    506     } egl;
    507 
    508     struct {
    509         OSMesaContext   handle;
    510         int             width;
    511         int             height;
    512         void*           buffer;
    513     } osmesa;
    514 
    515     // This is defined in platform.h
    516     GLFW_PLATFORM_CONTEXT_STATE
    517 };
    518 
    519 // Window and context structure
    520 //
    521 struct _GLFWwindow
    522 {
    523     struct _GLFWwindow* next;
    524 
    525     // Window settings and state
    526     GLFWbool            resizable;
    527     GLFWbool            decorated;
    528     GLFWbool            autoIconify;
    529     GLFWbool            floating;
    530     GLFWbool            focusOnShow;
    531     GLFWbool            mousePassthrough;
    532     GLFWbool            shouldClose;
    533     void*               userPointer;
    534     GLFWbool            doublebuffer;
    535     GLFWvidmode         videoMode;
    536     _GLFWmonitor*       monitor;
    537     _GLFWcursor*        cursor;
    538     char*               title;
    539 
    540     int                 minwidth, minheight;
    541     int                 maxwidth, maxheight;
    542     int                 numer, denom;
    543 
    544     GLFWbool            stickyKeys;
    545     GLFWbool            stickyMouseButtons;
    546     GLFWbool            lockKeyMods;
    547     int                 cursorMode;
    548     char                mouseButtons[GLFW_MOUSE_BUTTON_LAST + 1];
    549     char                keys[GLFW_KEY_LAST + 1];
    550     // Virtual cursor position when cursor is disabled
    551     double              virtualCursorPosX, virtualCursorPosY;
    552     GLFWbool            rawMouseMotion;
    553 
    554     _GLFWcontext        context;
    555 
    556     struct {
    557         GLFWwindowposfun          pos;
    558         GLFWwindowsizefun         size;
    559         GLFWwindowclosefun        close;
    560         GLFWwindowrefreshfun      refresh;
    561         GLFWwindowfocusfun        focus;
    562         GLFWwindowiconifyfun      iconify;
    563         GLFWwindowmaximizefun     maximize;
    564         GLFWframebuffersizefun    fbsize;
    565         GLFWwindowcontentscalefun scale;
    566         GLFWmousebuttonfun        mouseButton;
    567         GLFWcursorposfun          cursorPos;
    568         GLFWcursorenterfun        cursorEnter;
    569         GLFWscrollfun             scroll;
    570         GLFWkeyfun                key;
    571         GLFWcharfun               character;
    572         GLFWcharmodsfun           charmods;
    573         GLFWdropfun               drop;
    574     } callbacks;
    575 
    576     // This is defined in platform.h
    577     GLFW_PLATFORM_WINDOW_STATE
    578 };
    579 
    580 // Monitor structure
    581 //
    582 struct _GLFWmonitor
    583 {
    584     char            name[128];
    585     void*           userPointer;
    586 
    587     // Physical dimensions in millimeters.
    588     int             widthMM, heightMM;
    589 
    590     // The window whose video mode is current on this monitor
    591     _GLFWwindow*    window;
    592 
    593     GLFWvidmode*    modes;
    594     int             modeCount;
    595     GLFWvidmode     currentMode;
    596 
    597     GLFWgammaramp   originalRamp;
    598     GLFWgammaramp   currentRamp;
    599 
    600     // This is defined in platform.h
    601     GLFW_PLATFORM_MONITOR_STATE
    602 };
    603 
    604 // Cursor structure
    605 //
    606 struct _GLFWcursor
    607 {
    608     _GLFWcursor*    next;
    609     // This is defined in platform.h
    610     GLFW_PLATFORM_CURSOR_STATE
    611 };
    612 
    613 // Gamepad mapping element structure
    614 //
    615 struct _GLFWmapelement
    616 {
    617     uint8_t         type;
    618     uint8_t         index;
    619     int8_t          axisScale;
    620     int8_t          axisOffset;
    621 };
    622 
    623 // Gamepad mapping structure
    624 //
    625 struct _GLFWmapping
    626 {
    627     char            name[128];
    628     char            guid[33];
    629     _GLFWmapelement buttons[15];
    630     _GLFWmapelement axes[6];
    631 };
    632 
    633 // Joystick structure
    634 //
    635 struct _GLFWjoystick
    636 {
    637     GLFWbool        allocated;
    638     GLFWbool        connected;
    639     float*          axes;
    640     int             axisCount;
    641     unsigned char*  buttons;
    642     int             buttonCount;
    643     unsigned char*  hats;
    644     int             hatCount;
    645     char            name[128];
    646     void*           userPointer;
    647     char            guid[33];
    648     _GLFWmapping*   mapping;
    649 
    650     // This is defined in platform.h
    651     GLFW_PLATFORM_JOYSTICK_STATE
    652 };
    653 
    654 // Thread local storage structure
    655 //
    656 struct _GLFWtls
    657 {
    658     // This is defined in platform.h
    659     GLFW_PLATFORM_TLS_STATE
    660 };
    661 
    662 // Mutex structure
    663 //
    664 struct _GLFWmutex
    665 {
    666     // This is defined in platform.h
    667     GLFW_PLATFORM_MUTEX_STATE
    668 };
    669 
    670 // Platform API structure
    671 //
    672 struct _GLFWplatform
    673 {
    674     int platformID;
    675     // init
    676     GLFWbool (*init)(void);
    677     void (*terminate)(void);
    678     // input
    679     void (*getCursorPos)(_GLFWwindow*,double*,double*);
    680     void (*setCursorPos)(_GLFWwindow*,double,double);
    681     void (*setCursorMode)(_GLFWwindow*,int);
    682     void (*setRawMouseMotion)(_GLFWwindow*,GLFWbool);
    683     GLFWbool (*rawMouseMotionSupported)(void);
    684     GLFWbool (*createCursor)(_GLFWcursor*,const GLFWimage*,int,int);
    685     GLFWbool (*createStandardCursor)(_GLFWcursor*,int);
    686     void (*destroyCursor)(_GLFWcursor*);
    687     void (*setCursor)(_GLFWwindow*,_GLFWcursor*);
    688     const char* (*getScancodeName)(int);
    689     int (*getKeyScancode)(int);
    690     void (*setClipboardString)(const char*);
    691     const char* (*getClipboardString)(void);
    692     GLFWbool (*initJoysticks)(void);
    693     void (*terminateJoysticks)(void);
    694     GLFWbool (*pollJoystick)(_GLFWjoystick*,int);
    695     const char* (*getMappingName)(void);
    696     void (*updateGamepadGUID)(char*);
    697     // monitor
    698     void (*freeMonitor)(_GLFWmonitor*);
    699     void (*getMonitorPos)(_GLFWmonitor*,int*,int*);
    700     void (*getMonitorContentScale)(_GLFWmonitor*,float*,float*);
    701     void (*getMonitorWorkarea)(_GLFWmonitor*,int*,int*,int*,int*);
    702     GLFWvidmode* (*getVideoModes)(_GLFWmonitor*,int*);
    703     GLFWbool (*getVideoMode)(_GLFWmonitor*,GLFWvidmode*);
    704     GLFWbool (*getGammaRamp)(_GLFWmonitor*,GLFWgammaramp*);
    705     void (*setGammaRamp)(_GLFWmonitor*,const GLFWgammaramp*);
    706     // window
    707     GLFWbool (*createWindow)(_GLFWwindow*,const _GLFWwndconfig*,const _GLFWctxconfig*,const _GLFWfbconfig*);
    708     void (*destroyWindow)(_GLFWwindow*);
    709     void (*setWindowTitle)(_GLFWwindow*,const char*);
    710     void (*setWindowIcon)(_GLFWwindow*,int,const GLFWimage*);
    711     void (*getWindowPos)(_GLFWwindow*,int*,int*);
    712     void (*setWindowPos)(_GLFWwindow*,int,int);
    713     void (*getWindowSize)(_GLFWwindow*,int*,int*);
    714     void (*setWindowSize)(_GLFWwindow*,int,int);
    715     void (*setWindowSizeLimits)(_GLFWwindow*,int,int,int,int);
    716     void (*setWindowAspectRatio)(_GLFWwindow*,int,int);
    717     void (*getFramebufferSize)(_GLFWwindow*,int*,int*);
    718     void (*getWindowFrameSize)(_GLFWwindow*,int*,int*,int*,int*);
    719     void (*getWindowContentScale)(_GLFWwindow*,float*,float*);
    720     void (*iconifyWindow)(_GLFWwindow*);
    721     void (*restoreWindow)(_GLFWwindow*);
    722     void (*maximizeWindow)(_GLFWwindow*);
    723     void (*showWindow)(_GLFWwindow*);
    724     void (*hideWindow)(_GLFWwindow*);
    725     void (*requestWindowAttention)(_GLFWwindow*);
    726     void (*focusWindow)(_GLFWwindow*);
    727     void (*setWindowMonitor)(_GLFWwindow*,_GLFWmonitor*,int,int,int,int,int);
    728     GLFWbool (*windowFocused)(_GLFWwindow*);
    729     GLFWbool (*windowIconified)(_GLFWwindow*);
    730     GLFWbool (*windowVisible)(_GLFWwindow*);
    731     GLFWbool (*windowMaximized)(_GLFWwindow*);
    732     GLFWbool (*windowHovered)(_GLFWwindow*);
    733     GLFWbool (*framebufferTransparent)(_GLFWwindow*);
    734     float (*getWindowOpacity)(_GLFWwindow*);
    735     void (*setWindowResizable)(_GLFWwindow*,GLFWbool);
    736     void (*setWindowDecorated)(_GLFWwindow*,GLFWbool);
    737     void (*setWindowFloating)(_GLFWwindow*,GLFWbool);
    738     void (*setWindowOpacity)(_GLFWwindow*,float);
    739     void (*setWindowMousePassthrough)(_GLFWwindow*,GLFWbool);
    740     void (*pollEvents)(void);
    741     void (*waitEvents)(void);
    742     void (*waitEventsTimeout)(double);
    743     void (*postEmptyEvent)(void);
    744     // EGL
    745     EGLenum (*getEGLPlatform)(EGLint**);
    746     EGLNativeDisplayType (*getEGLNativeDisplay)(void);
    747     EGLNativeWindowType (*getEGLNativeWindow)(_GLFWwindow*);
    748     // vulkan
    749     void (*getRequiredInstanceExtensions)(char**);
    750     GLFWbool (*getPhysicalDevicePresentationSupport)(VkInstance,VkPhysicalDevice,uint32_t);
    751     VkResult (*createWindowSurface)(VkInstance,_GLFWwindow*,const VkAllocationCallbacks*,VkSurfaceKHR*);
    752 };
    753 
    754 // Library global data
    755 //
    756 struct _GLFWlibrary
    757 {
    758     GLFWbool            initialized;
    759     GLFWallocator       allocator;
    760 
    761     _GLFWplatform       platform;
    762 
    763     struct {
    764         _GLFWinitconfig init;
    765         _GLFWfbconfig   framebuffer;
    766         _GLFWwndconfig  window;
    767         _GLFWctxconfig  context;
    768         int             refreshRate;
    769     } hints;
    770 
    771     _GLFWerror*         errorListHead;
    772     _GLFWcursor*        cursorListHead;
    773     _GLFWwindow*        windowListHead;
    774 
    775     _GLFWmonitor**      monitors;
    776     int                 monitorCount;
    777 
    778     GLFWbool            joysticksInitialized;
    779     _GLFWjoystick       joysticks[GLFW_JOYSTICK_LAST + 1];
    780     _GLFWmapping*       mappings;
    781     int                 mappingCount;
    782 
    783     _GLFWtls            errorSlot;
    784     _GLFWtls            contextSlot;
    785     _GLFWmutex          errorLock;
    786 
    787     struct {
    788         uint64_t        offset;
    789         // This is defined in platform.h
    790         GLFW_PLATFORM_LIBRARY_TIMER_STATE
    791     } timer;
    792 
    793     struct {
    794         EGLenum         platform;
    795         EGLDisplay      display;
    796         EGLint          major, minor;
    797         GLFWbool        prefix;
    798 
    799         GLFWbool        KHR_create_context;
    800         GLFWbool        KHR_create_context_no_error;
    801         GLFWbool        KHR_gl_colorspace;
    802         GLFWbool        KHR_get_all_proc_addresses;
    803         GLFWbool        KHR_context_flush_control;
    804         GLFWbool        EXT_client_extensions;
    805         GLFWbool        EXT_platform_base;
    806         GLFWbool        EXT_platform_x11;
    807         GLFWbool        EXT_platform_wayland;
    808         GLFWbool        EXT_present_opaque;
    809         GLFWbool        ANGLE_platform_angle;
    810         GLFWbool        ANGLE_platform_angle_opengl;
    811         GLFWbool        ANGLE_platform_angle_d3d;
    812         GLFWbool        ANGLE_platform_angle_vulkan;
    813         GLFWbool        ANGLE_platform_angle_metal;
    814 
    815         void*           handle;
    816 
    817         PFN_eglGetConfigAttrib      GetConfigAttrib;
    818         PFN_eglGetConfigs           GetConfigs;
    819         PFN_eglGetDisplay           GetDisplay;
    820         PFN_eglGetError             GetError;
    821         PFN_eglInitialize           Initialize;
    822         PFN_eglTerminate            Terminate;
    823         PFN_eglBindAPI              BindAPI;
    824         PFN_eglCreateContext        CreateContext;
    825         PFN_eglDestroySurface       DestroySurface;
    826         PFN_eglDestroyContext       DestroyContext;
    827         PFN_eglCreateWindowSurface  CreateWindowSurface;
    828         PFN_eglMakeCurrent          MakeCurrent;
    829         PFN_eglSwapBuffers          SwapBuffers;
    830         PFN_eglSwapInterval         SwapInterval;
    831         PFN_eglQueryString          QueryString;
    832         PFN_eglGetProcAddress       GetProcAddress;
    833 
    834         PFNEGLGETPLATFORMDISPLAYEXTPROC GetPlatformDisplayEXT;
    835         PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC CreatePlatformWindowSurfaceEXT;
    836     } egl;
    837 
    838     struct {
    839         void*           handle;
    840 
    841         PFN_OSMesaCreateContextExt      CreateContextExt;
    842         PFN_OSMesaCreateContextAttribs  CreateContextAttribs;
    843         PFN_OSMesaDestroyContext        DestroyContext;
    844         PFN_OSMesaMakeCurrent           MakeCurrent;
    845         PFN_OSMesaGetColorBuffer        GetColorBuffer;
    846         PFN_OSMesaGetDepthBuffer        GetDepthBuffer;
    847         PFN_OSMesaGetProcAddress        GetProcAddress;
    848 
    849     } osmesa;
    850 
    851     struct {
    852         GLFWbool        available;
    853         void*           handle;
    854         char*           extensions[2];
    855         PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
    856         GLFWbool        KHR_surface;
    857         GLFWbool        KHR_win32_surface;
    858         GLFWbool        MVK_macos_surface;
    859         GLFWbool        EXT_metal_surface;
    860         GLFWbool        KHR_xlib_surface;
    861         GLFWbool        KHR_xcb_surface;
    862         GLFWbool        KHR_wayland_surface;
    863     } vk;
    864 
    865     struct {
    866         GLFWmonitorfun  monitor;
    867         GLFWjoystickfun joystick;
    868     } callbacks;
    869 
    870     // These are defined in platform.h
    871     GLFW_PLATFORM_LIBRARY_WINDOW_STATE
    872     GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
    873     GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE
    874 };
    875 
    876 // Global state shared between compilation units of GLFW
    877 //
    878 extern _GLFWlibrary _glfw;
    879 
    880 
    881 //////////////////////////////////////////////////////////////////////////
    882 //////                       GLFW platform API                      //////
    883 //////////////////////////////////////////////////////////////////////////
    884 
    885 void _glfwPlatformInitTimer(void);
    886 uint64_t _glfwPlatformGetTimerValue(void);
    887 uint64_t _glfwPlatformGetTimerFrequency(void);
    888 
    889 GLFWbool _glfwPlatformCreateTls(_GLFWtls* tls);
    890 void _glfwPlatformDestroyTls(_GLFWtls* tls);
    891 void* _glfwPlatformGetTls(_GLFWtls* tls);
    892 void _glfwPlatformSetTls(_GLFWtls* tls, void* value);
    893 
    894 GLFWbool _glfwPlatformCreateMutex(_GLFWmutex* mutex);
    895 void _glfwPlatformDestroyMutex(_GLFWmutex* mutex);
    896 void _glfwPlatformLockMutex(_GLFWmutex* mutex);
    897 void _glfwPlatformUnlockMutex(_GLFWmutex* mutex);
    898 
    899 void* _glfwPlatformLoadModule(const char* path);
    900 void _glfwPlatformFreeModule(void* module);
    901 GLFWproc _glfwPlatformGetModuleSymbol(void* module, const char* name);
    902 
    903 
    904 //////////////////////////////////////////////////////////////////////////
    905 //////                         GLFW event API                       //////
    906 //////////////////////////////////////////////////////////////////////////
    907 
    908 void _glfwInputWindowFocus(_GLFWwindow* window, GLFWbool focused);
    909 void _glfwInputWindowPos(_GLFWwindow* window, int xpos, int ypos);
    910 void _glfwInputWindowSize(_GLFWwindow* window, int width, int height);
    911 void _glfwInputFramebufferSize(_GLFWwindow* window, int width, int height);
    912 void _glfwInputWindowContentScale(_GLFWwindow* window,
    913                                   float xscale, float yscale);
    914 void _glfwInputWindowIconify(_GLFWwindow* window, GLFWbool iconified);
    915 void _glfwInputWindowMaximize(_GLFWwindow* window, GLFWbool maximized);
    916 void _glfwInputWindowDamage(_GLFWwindow* window);
    917 void _glfwInputWindowCloseRequest(_GLFWwindow* window);
    918 void _glfwInputWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor);
    919 
    920 void _glfwInputKey(_GLFWwindow* window,
    921                    int key, int scancode, int action, int mods);
    922 void _glfwInputChar(_GLFWwindow* window,
    923                     uint32_t codepoint, int mods, GLFWbool plain);
    924 void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset);
    925 void _glfwInputMouseClick(_GLFWwindow* window, int button, int action, int mods);
    926 void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos);
    927 void _glfwInputCursorEnter(_GLFWwindow* window, GLFWbool entered);
    928 void _glfwInputDrop(_GLFWwindow* window, int count, const char** names);
    929 void _glfwInputJoystick(_GLFWjoystick* js, int event);
    930 void _glfwInputJoystickAxis(_GLFWjoystick* js, int axis, float value);
    931 void _glfwInputJoystickButton(_GLFWjoystick* js, int button, char value);
    932 void _glfwInputJoystickHat(_GLFWjoystick* js, int hat, char value);
    933 
    934 void _glfwInputMonitor(_GLFWmonitor* monitor, int action, int placement);
    935 void _glfwInputMonitorWindow(_GLFWmonitor* monitor, _GLFWwindow* window);
    936 
    937 #if defined(__GNUC__)
    938 void _glfwInputError(int code, const char* format, ...)
    939     __attribute__((format(printf, 2, 3)));
    940 #else
    941 void _glfwInputError(int code, const char* format, ...);
    942 #endif
    943 
    944 
    945 //////////////////////////////////////////////////////////////////////////
    946 //////                       GLFW internal API                      //////
    947 //////////////////////////////////////////////////////////////////////////
    948 
    949 GLFWbool _glfwSelectPlatform(int platformID, _GLFWplatform* platform);
    950 
    951 GLFWbool _glfwStringInExtensionString(const char* string, const char* extensions);
    952 const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
    953                                          const _GLFWfbconfig* alternatives,
    954                                          unsigned int count);
    955 GLFWbool _glfwRefreshContextAttribs(_GLFWwindow* window,
    956                                     const _GLFWctxconfig* ctxconfig);
    957 GLFWbool _glfwIsValidContextConfig(const _GLFWctxconfig* ctxconfig);
    958 
    959 const GLFWvidmode* _glfwChooseVideoMode(_GLFWmonitor* monitor,
    960                                         const GLFWvidmode* desired);
    961 int _glfwCompareVideoModes(const GLFWvidmode* first, const GLFWvidmode* second);
    962 _GLFWmonitor* _glfwAllocMonitor(const char* name, int widthMM, int heightMM);
    963 void _glfwFreeMonitor(_GLFWmonitor* monitor);
    964 void _glfwAllocGammaArrays(GLFWgammaramp* ramp, unsigned int size);
    965 void _glfwFreeGammaArrays(GLFWgammaramp* ramp);
    966 void _glfwSplitBPP(int bpp, int* red, int* green, int* blue);
    967 
    968 void _glfwInitGamepadMappings(void);
    969 _GLFWjoystick* _glfwAllocJoystick(const char* name,
    970                                   const char* guid,
    971                                   int axisCount,
    972                                   int buttonCount,
    973                                   int hatCount);
    974 void _glfwFreeJoystick(_GLFWjoystick* js);
    975 void _glfwCenterCursorInContentArea(_GLFWwindow* window);
    976 
    977 GLFWbool _glfwInitEGL(void);
    978 void _glfwTerminateEGL(void);
    979 GLFWbool _glfwCreateContextEGL(_GLFWwindow* window,
    980                                const _GLFWctxconfig* ctxconfig,
    981                                const _GLFWfbconfig* fbconfig);
    982 #if defined(_GLFW_X11)
    983 GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig,
    984                               const _GLFWctxconfig* ctxconfig,
    985                               const _GLFWfbconfig* fbconfig,
    986                               Visual** visual, int* depth);
    987 #endif /*_GLFW_X11*/
    988 
    989 GLFWbool _glfwInitOSMesa(void);
    990 void _glfwTerminateOSMesa(void);
    991 GLFWbool _glfwCreateContextOSMesa(_GLFWwindow* window,
    992                                   const _GLFWctxconfig* ctxconfig,
    993                                   const _GLFWfbconfig* fbconfig);
    994 
    995 GLFWbool _glfwInitVulkan(int mode);
    996 void _glfwTerminateVulkan(void);
    997 const char* _glfwGetVulkanResultString(VkResult result);
    998 
    999 size_t _glfwEncodeUTF8(char* s, uint32_t codepoint);
   1000 char** _glfwParseUriList(char* text, int* count);
   1001 
   1002 char* _glfw_strdup(const char* source);
   1003 int _glfw_min(int a, int b);
   1004 int _glfw_max(int a, int b);
   1005 
   1006 void* _glfw_calloc(size_t count, size_t size);
   1007 void* _glfw_realloc(void* pointer, size_t size);
   1008 void _glfw_free(void* pointer);
   1009