internal.h (27804B)
1 //======================================================================== 2 // GLFW 3.3 - 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 63 typedef struct _GLFWerror _GLFWerror; 64 typedef struct _GLFWinitconfig _GLFWinitconfig; 65 typedef struct _GLFWwndconfig _GLFWwndconfig; 66 typedef struct _GLFWctxconfig _GLFWctxconfig; 67 typedef struct _GLFWfbconfig _GLFWfbconfig; 68 typedef struct _GLFWcontext _GLFWcontext; 69 typedef struct _GLFWwindow _GLFWwindow; 70 typedef struct _GLFWlibrary _GLFWlibrary; 71 typedef struct _GLFWmonitor _GLFWmonitor; 72 typedef struct _GLFWcursor _GLFWcursor; 73 typedef struct _GLFWmapelement _GLFWmapelement; 74 typedef struct _GLFWmapping _GLFWmapping; 75 typedef struct _GLFWjoystick _GLFWjoystick; 76 typedef struct _GLFWtls _GLFWtls; 77 typedef struct _GLFWmutex _GLFWmutex; 78 79 typedef void (* _GLFWmakecontextcurrentfun)(_GLFWwindow*); 80 typedef void (* _GLFWswapbuffersfun)(_GLFWwindow*); 81 typedef void (* _GLFWswapintervalfun)(int); 82 typedef int (* _GLFWextensionsupportedfun)(const char*); 83 typedef GLFWglproc (* _GLFWgetprocaddressfun)(const char*); 84 typedef void (* _GLFWdestroycontextfun)(_GLFWwindow*); 85 86 #define GL_VERSION 0x1f02 87 #define GL_NONE 0 88 #define GL_COLOR_BUFFER_BIT 0x00004000 89 #define GL_UNSIGNED_BYTE 0x1401 90 #define GL_EXTENSIONS 0x1f03 91 #define GL_NUM_EXTENSIONS 0x821d 92 #define GL_CONTEXT_FLAGS 0x821e 93 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 94 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 95 #define GL_CONTEXT_PROFILE_MASK 0x9126 96 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 97 #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 98 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 99 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 100 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 101 #define GL_CONTEXT_RELEASE_BEHAVIOR 0x82fb 102 #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82fc 103 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 104 105 typedef int GLint; 106 typedef unsigned int GLuint; 107 typedef unsigned int GLenum; 108 typedef unsigned int GLbitfield; 109 typedef unsigned char GLubyte; 110 111 typedef void (APIENTRY * PFNGLCLEARPROC)(GLbitfield); 112 typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGPROC)(GLenum); 113 typedef void (APIENTRY * PFNGLGETINTEGERVPROC)(GLenum,GLint*); 114 typedef const GLubyte* (APIENTRY * PFNGLGETSTRINGIPROC)(GLenum,GLuint); 115 116 #define VK_NULL_HANDLE 0 117 118 typedef void* VkInstance; 119 typedef void* VkPhysicalDevice; 120 typedef uint64_t VkSurfaceKHR; 121 typedef uint32_t VkFlags; 122 typedef uint32_t VkBool32; 123 124 typedef enum VkStructureType 125 { 126 VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, 127 VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, 128 VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, 129 VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, 130 VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, 131 VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, 132 VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF 133 } VkStructureType; 134 135 typedef enum VkResult 136 { 137 VK_SUCCESS = 0, 138 VK_NOT_READY = 1, 139 VK_TIMEOUT = 2, 140 VK_EVENT_SET = 3, 141 VK_EVENT_RESET = 4, 142 VK_INCOMPLETE = 5, 143 VK_ERROR_OUT_OF_HOST_MEMORY = -1, 144 VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, 145 VK_ERROR_INITIALIZATION_FAILED = -3, 146 VK_ERROR_DEVICE_LOST = -4, 147 VK_ERROR_MEMORY_MAP_FAILED = -5, 148 VK_ERROR_LAYER_NOT_PRESENT = -6, 149 VK_ERROR_EXTENSION_NOT_PRESENT = -7, 150 VK_ERROR_FEATURE_NOT_PRESENT = -8, 151 VK_ERROR_INCOMPATIBLE_DRIVER = -9, 152 VK_ERROR_TOO_MANY_OBJECTS = -10, 153 VK_ERROR_FORMAT_NOT_SUPPORTED = -11, 154 VK_ERROR_SURFACE_LOST_KHR = -1000000000, 155 VK_SUBOPTIMAL_KHR = 1000001003, 156 VK_ERROR_OUT_OF_DATE_KHR = -1000001004, 157 VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, 158 VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, 159 VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, 160 VK_RESULT_MAX_ENUM = 0x7FFFFFFF 161 } VkResult; 162 163 typedef struct VkAllocationCallbacks VkAllocationCallbacks; 164 165 typedef struct VkExtensionProperties 166 { 167 char extensionName[256]; 168 uint32_t specVersion; 169 } VkExtensionProperties; 170 171 typedef void (APIENTRY * PFN_vkVoidFunction)(void); 172 173 #if defined(_GLFW_VULKAN_STATIC) 174 PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance,const char*); 175 VkResult vkEnumerateInstanceExtensionProperties(const char*,uint32_t*,VkExtensionProperties*); 176 #else 177 typedef PFN_vkVoidFunction (APIENTRY * PFN_vkGetInstanceProcAddr)(VkInstance,const char*); 178 typedef VkResult (APIENTRY * PFN_vkEnumerateInstanceExtensionProperties)(const char*,uint32_t*,VkExtensionProperties*); 179 #define vkEnumerateInstanceExtensionProperties _glfw.vk.EnumerateInstanceExtensionProperties 180 #define vkGetInstanceProcAddr _glfw.vk.GetInstanceProcAddr 181 #endif 182 183 #if defined(_GLFW_COCOA) 184 #include "cocoa_platform.h" 185 #elif defined(_GLFW_WIN32) 186 #include "win32_platform.h" 187 #elif defined(_GLFW_X11) 188 #include "x11_platform.h" 189 #elif defined(_GLFW_WAYLAND) 190 #include "wl_platform.h" 191 #elif defined(_GLFW_OSMESA) 192 #include "null_platform.h" 193 #else 194 #error "No supported window creation API selected" 195 #endif 196 197 // Constructs a version number string from the public header macros 198 #define _GLFW_CONCAT_VERSION(m, n, r) #m "." #n "." #r 199 #define _GLFW_MAKE_VERSION(m, n, r) _GLFW_CONCAT_VERSION(m, n, r) 200 #define _GLFW_VERSION_NUMBER _GLFW_MAKE_VERSION(GLFW_VERSION_MAJOR, \ 201 GLFW_VERSION_MINOR, \ 202 GLFW_VERSION_REVISION) 203 204 // Checks for whether the library has been initialized 205 #define _GLFW_REQUIRE_INIT() \ 206 if (!_glfw.initialized) \ 207 { \ 208 _glfwInputError(GLFW_NOT_INITIALIZED, NULL); \ 209 return; \ 210 } 211 #define _GLFW_REQUIRE_INIT_OR_RETURN(x) \ 212 if (!_glfw.initialized) \ 213 { \ 214 _glfwInputError(GLFW_NOT_INITIALIZED, NULL); \ 215 return x; \ 216 } 217 218 // Swaps the provided pointers 219 #define _GLFW_SWAP_POINTERS(x, y) \ 220 { \ 221 void* t; \ 222 t = x; \ 223 x = y; \ 224 y = t; \ 225 } 226 227 // Per-thread error structure 228 // 229 struct _GLFWerror 230 { 231 _GLFWerror* next; 232 int code; 233 char description[_GLFW_MESSAGE_SIZE]; 234 }; 235 236 // Initialization configuration 237 // 238 // Parameters relating to the initialization of the library 239 // 240 struct _GLFWinitconfig 241 { 242 GLFWbool hatButtons; 243 struct { 244 GLFWbool menubar; 245 GLFWbool chdir; 246 } ns; 247 }; 248 249 // Window configuration 250 // 251 // Parameters relating to the creation of the window but not directly related 252 // to the framebuffer. This is used to pass window creation parameters from 253 // shared code to the platform API. 254 // 255 struct _GLFWwndconfig 256 { 257 int width; 258 int height; 259 const char* title; 260 GLFWbool resizable; 261 GLFWbool visible; 262 GLFWbool decorated; 263 GLFWbool focused; 264 GLFWbool autoIconify; 265 GLFWbool floating; 266 GLFWbool maximized; 267 GLFWbool centerCursor; 268 GLFWbool focusOnShow; 269 GLFWbool scaleToMonitor; 270 struct { 271 GLFWbool retina; 272 char frameName[256]; 273 } ns; 274 struct { 275 char className[256]; 276 char instanceName[256]; 277 } x11; 278 }; 279 280 // Context configuration 281 // 282 // Parameters relating to the creation of the context but not directly related 283 // to the framebuffer. This is used to pass context creation parameters from 284 // shared code to the platform API. 285 // 286 struct _GLFWctxconfig 287 { 288 int client; 289 int source; 290 int major; 291 int minor; 292 GLFWbool forward; 293 GLFWbool debug; 294 GLFWbool noerror; 295 int profile; 296 int robustness; 297 int release; 298 _GLFWwindow* share; 299 struct { 300 GLFWbool offline; 301 } nsgl; 302 }; 303 304 // Framebuffer configuration 305 // 306 // This describes buffers and their sizes. It also contains 307 // a platform-specific ID used to map back to the backend API object. 308 // 309 // It is used to pass framebuffer parameters from shared code to the platform 310 // API and also to enumerate and select available framebuffer configs. 311 // 312 struct _GLFWfbconfig 313 { 314 int redBits; 315 int greenBits; 316 int blueBits; 317 int alphaBits; 318 int depthBits; 319 int stencilBits; 320 int accumRedBits; 321 int accumGreenBits; 322 int accumBlueBits; 323 int accumAlphaBits; 324 int auxBuffers; 325 GLFWbool stereo; 326 int samples; 327 GLFWbool sRGB; 328 GLFWbool doublebuffer; 329 GLFWbool transparent; 330 uintptr_t handle; 331 }; 332 333 // Context structure 334 // 335 struct _GLFWcontext 336 { 337 int client; 338 int source; 339 int major, minor, revision; 340 GLFWbool forward, debug, noerror; 341 int profile; 342 int robustness; 343 int release; 344 345 PFNGLGETSTRINGIPROC GetStringi; 346 PFNGLGETINTEGERVPROC GetIntegerv; 347 PFNGLGETSTRINGPROC GetString; 348 349 _GLFWmakecontextcurrentfun makeCurrent; 350 _GLFWswapbuffersfun swapBuffers; 351 _GLFWswapintervalfun swapInterval; 352 _GLFWextensionsupportedfun extensionSupported; 353 _GLFWgetprocaddressfun getProcAddress; 354 _GLFWdestroycontextfun destroy; 355 356 // This is defined in the context API's context.h 357 _GLFW_PLATFORM_CONTEXT_STATE; 358 // This is defined in egl_context.h 359 _GLFW_EGL_CONTEXT_STATE; 360 // This is defined in osmesa_context.h 361 _GLFW_OSMESA_CONTEXT_STATE; 362 }; 363 364 // Window and context structure 365 // 366 struct _GLFWwindow 367 { 368 struct _GLFWwindow* next; 369 370 // Window settings and state 371 GLFWbool resizable; 372 GLFWbool decorated; 373 GLFWbool autoIconify; 374 GLFWbool floating; 375 GLFWbool focusOnShow; 376 GLFWbool shouldClose; 377 void* userPointer; 378 GLFWvidmode videoMode; 379 _GLFWmonitor* monitor; 380 _GLFWcursor* cursor; 381 382 int minwidth, minheight; 383 int maxwidth, maxheight; 384 int numer, denom; 385 386 GLFWbool stickyKeys; 387 GLFWbool stickyMouseButtons; 388 GLFWbool lockKeyMods; 389 int cursorMode; 390 char mouseButtons[GLFW_MOUSE_BUTTON_LAST + 1]; 391 char keys[GLFW_KEY_LAST + 1]; 392 // Virtual cursor position when cursor is disabled 393 double virtualCursorPosX, virtualCursorPosY; 394 GLFWbool rawMouseMotion; 395 396 _GLFWcontext context; 397 398 struct { 399 GLFWwindowposfun pos; 400 GLFWwindowsizefun size; 401 GLFWwindowclosefun close; 402 GLFWwindowrefreshfun refresh; 403 GLFWwindowfocusfun focus; 404 GLFWwindowiconifyfun iconify; 405 GLFWwindowmaximizefun maximize; 406 GLFWframebuffersizefun fbsize; 407 GLFWwindowcontentscalefun scale; 408 GLFWmousebuttonfun mouseButton; 409 GLFWcursorposfun cursorPos; 410 GLFWcursorenterfun cursorEnter; 411 GLFWscrollfun scroll; 412 GLFWkeyfun key; 413 GLFWcharfun character; 414 GLFWcharmodsfun charmods; 415 GLFWdropfun drop; 416 } callbacks; 417 418 // This is defined in the window API's platform.h 419 _GLFW_PLATFORM_WINDOW_STATE; 420 }; 421 422 // Monitor structure 423 // 424 struct _GLFWmonitor 425 { 426 char* name; 427 void* userPointer; 428 429 // Physical dimensions in millimeters. 430 int widthMM, heightMM; 431 432 // The window whose video mode is current on this monitor 433 _GLFWwindow* window; 434 435 GLFWvidmode* modes; 436 int modeCount; 437 GLFWvidmode currentMode; 438 439 GLFWgammaramp originalRamp; 440 GLFWgammaramp currentRamp; 441 442 // This is defined in the window API's platform.h 443 _GLFW_PLATFORM_MONITOR_STATE; 444 }; 445 446 // Cursor structure 447 // 448 struct _GLFWcursor 449 { 450 _GLFWcursor* next; 451 452 // This is defined in the window API's platform.h 453 _GLFW_PLATFORM_CURSOR_STATE; 454 }; 455 456 // Gamepad mapping element structure 457 // 458 struct _GLFWmapelement 459 { 460 uint8_t type; 461 uint8_t index; 462 int8_t axisScale; 463 int8_t axisOffset; 464 }; 465 466 // Gamepad mapping structure 467 // 468 struct _GLFWmapping 469 { 470 char name[128]; 471 char guid[33]; 472 _GLFWmapelement buttons[15]; 473 _GLFWmapelement axes[6]; 474 }; 475 476 // Joystick structure 477 // 478 struct _GLFWjoystick 479 { 480 GLFWbool present; 481 float* axes; 482 int axisCount; 483 unsigned char* buttons; 484 int buttonCount; 485 unsigned char* hats; 486 int hatCount; 487 char* name; 488 void* userPointer; 489 char guid[33]; 490 _GLFWmapping* mapping; 491 492 // This is defined in the joystick API's joystick.h 493 _GLFW_PLATFORM_JOYSTICK_STATE; 494 }; 495 496 // Thread local storage structure 497 // 498 struct _GLFWtls 499 { 500 // This is defined in the platform's thread.h 501 _GLFW_PLATFORM_TLS_STATE; 502 }; 503 504 // Mutex structure 505 // 506 struct _GLFWmutex 507 { 508 // This is defined in the platform's thread.h 509 _GLFW_PLATFORM_MUTEX_STATE; 510 }; 511 512 // Library global data 513 // 514 struct _GLFWlibrary 515 { 516 GLFWbool initialized; 517 518 struct { 519 _GLFWinitconfig init; 520 _GLFWfbconfig framebuffer; 521 _GLFWwndconfig window; 522 _GLFWctxconfig context; 523 int refreshRate; 524 } hints; 525 526 _GLFWerror* errorListHead; 527 _GLFWcursor* cursorListHead; 528 _GLFWwindow* windowListHead; 529 530 _GLFWmonitor** monitors; 531 int monitorCount; 532 533 _GLFWjoystick joysticks[GLFW_JOYSTICK_LAST + 1]; 534 _GLFWmapping* mappings; 535 int mappingCount; 536 537 _GLFWtls errorSlot; 538 _GLFWtls contextSlot; 539 _GLFWmutex errorLock; 540 541 struct { 542 uint64_t offset; 543 // This is defined in the platform's time.h 544 _GLFW_PLATFORM_LIBRARY_TIMER_STATE; 545 } timer; 546 547 struct { 548 GLFWbool available; 549 void* handle; 550 char* extensions[2]; 551 #if !defined(_GLFW_VULKAN_STATIC) 552 PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties; 553 PFN_vkGetInstanceProcAddr GetInstanceProcAddr; 554 #endif 555 GLFWbool KHR_surface; 556 #if defined(_GLFW_WIN32) 557 GLFWbool KHR_win32_surface; 558 #elif defined(_GLFW_COCOA) 559 GLFWbool MVK_macos_surface; 560 GLFWbool EXT_metal_surface; 561 #elif defined(_GLFW_X11) 562 GLFWbool KHR_xlib_surface; 563 GLFWbool KHR_xcb_surface; 564 #elif defined(_GLFW_WAYLAND) 565 GLFWbool KHR_wayland_surface; 566 #endif 567 } vk; 568 569 struct { 570 GLFWmonitorfun monitor; 571 GLFWjoystickfun joystick; 572 } callbacks; 573 574 // This is defined in the window API's platform.h 575 _GLFW_PLATFORM_LIBRARY_WINDOW_STATE; 576 // This is defined in the context API's context.h 577 _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE; 578 // This is defined in the platform's joystick.h 579 _GLFW_PLATFORM_LIBRARY_JOYSTICK_STATE; 580 // This is defined in egl_context.h 581 _GLFW_EGL_LIBRARY_CONTEXT_STATE; 582 // This is defined in osmesa_context.h 583 _GLFW_OSMESA_LIBRARY_CONTEXT_STATE; 584 }; 585 586 // Global state shared between compilation units of GLFW 587 // 588 extern _GLFWlibrary _glfw; 589 590 591 ////////////////////////////////////////////////////////////////////////// 592 ////// GLFW platform API ////// 593 ////////////////////////////////////////////////////////////////////////// 594 595 int _glfwPlatformInit(void); 596 void _glfwPlatformTerminate(void); 597 const char* _glfwPlatformGetVersionString(void); 598 599 void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos); 600 void _glfwPlatformSetCursorPos(_GLFWwindow* window, double xpos, double ypos); 601 void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode); 602 void _glfwPlatformSetRawMouseMotion(_GLFWwindow *window, GLFWbool enabled); 603 GLFWbool _glfwPlatformRawMouseMotionSupported(void); 604 int _glfwPlatformCreateCursor(_GLFWcursor* cursor, 605 const GLFWimage* image, int xhot, int yhot); 606 int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, int shape); 607 void _glfwPlatformDestroyCursor(_GLFWcursor* cursor); 608 void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor); 609 610 const char* _glfwPlatformGetScancodeName(int scancode); 611 int _glfwPlatformGetKeyScancode(int key); 612 613 void _glfwPlatformFreeMonitor(_GLFWmonitor* monitor); 614 void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos); 615 void _glfwPlatformGetMonitorContentScale(_GLFWmonitor* monitor, 616 float* xscale, float* yscale); 617 void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos, int *width, int *height); 618 GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count); 619 void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode); 620 GLFWbool _glfwPlatformGetGammaRamp(_GLFWmonitor* monitor, GLFWgammaramp* ramp); 621 void _glfwPlatformSetGammaRamp(_GLFWmonitor* monitor, const GLFWgammaramp* ramp); 622 623 void _glfwPlatformSetClipboardString(const char* string); 624 const char* _glfwPlatformGetClipboardString(void); 625 626 int _glfwPlatformPollJoystick(_GLFWjoystick* js, int mode); 627 void _glfwPlatformUpdateGamepadGUID(char* guid); 628 629 uint64_t _glfwPlatformGetTimerValue(void); 630 uint64_t _glfwPlatformGetTimerFrequency(void); 631 632 int _glfwPlatformCreateWindow(_GLFWwindow* window, 633 const _GLFWwndconfig* wndconfig, 634 const _GLFWctxconfig* ctxconfig, 635 const _GLFWfbconfig* fbconfig); 636 void _glfwPlatformDestroyWindow(_GLFWwindow* window); 637 void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title); 638 void _glfwPlatformSetWindowIcon(_GLFWwindow* window, 639 int count, const GLFWimage* images); 640 void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos); 641 void _glfwPlatformSetWindowPos(_GLFWwindow* window, int xpos, int ypos); 642 void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height); 643 void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height); 644 void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, 645 int minwidth, int minheight, 646 int maxwidth, int maxheight); 647 void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom); 648 void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height); 649 void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, 650 int* left, int* top, 651 int* right, int* bottom); 652 void _glfwPlatformGetWindowContentScale(_GLFWwindow* window, 653 float* xscale, float* yscale); 654 void _glfwPlatformIconifyWindow(_GLFWwindow* window); 655 void _glfwPlatformRestoreWindow(_GLFWwindow* window); 656 void _glfwPlatformMaximizeWindow(_GLFWwindow* window); 657 void _glfwPlatformShowWindow(_GLFWwindow* window); 658 void _glfwPlatformHideWindow(_GLFWwindow* window); 659 void _glfwPlatformRequestWindowAttention(_GLFWwindow* window); 660 void _glfwPlatformFocusWindow(_GLFWwindow* window); 661 void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor, 662 int xpos, int ypos, int width, int height, 663 int refreshRate); 664 int _glfwPlatformWindowFocused(_GLFWwindow* window); 665 int _glfwPlatformWindowIconified(_GLFWwindow* window); 666 int _glfwPlatformWindowVisible(_GLFWwindow* window); 667 int _glfwPlatformWindowMaximized(_GLFWwindow* window); 668 int _glfwPlatformWindowHovered(_GLFWwindow* window); 669 int _glfwPlatformFramebufferTransparent(_GLFWwindow* window); 670 float _glfwPlatformGetWindowOpacity(_GLFWwindow* window); 671 void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled); 672 void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled); 673 void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled); 674 void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity); 675 676 void _glfwPlatformPollEvents(void); 677 void _glfwPlatformWaitEvents(void); 678 void _glfwPlatformWaitEventsTimeout(double timeout); 679 void _glfwPlatformPostEmptyEvent(void); 680 681 void _glfwPlatformGetRequiredInstanceExtensions(char** extensions); 682 int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, 683 VkPhysicalDevice device, 684 uint32_t queuefamily); 685 VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, 686 _GLFWwindow* window, 687 const VkAllocationCallbacks* allocator, 688 VkSurfaceKHR* surface); 689 690 GLFWbool _glfwPlatformCreateTls(_GLFWtls* tls); 691 void _glfwPlatformDestroyTls(_GLFWtls* tls); 692 void* _glfwPlatformGetTls(_GLFWtls* tls); 693 void _glfwPlatformSetTls(_GLFWtls* tls, void* value); 694 695 GLFWbool _glfwPlatformCreateMutex(_GLFWmutex* mutex); 696 void _glfwPlatformDestroyMutex(_GLFWmutex* mutex); 697 void _glfwPlatformLockMutex(_GLFWmutex* mutex); 698 void _glfwPlatformUnlockMutex(_GLFWmutex* mutex); 699 700 701 ////////////////////////////////////////////////////////////////////////// 702 ////// GLFW event API ////// 703 ////////////////////////////////////////////////////////////////////////// 704 705 void _glfwInputWindowFocus(_GLFWwindow* window, GLFWbool focused); 706 void _glfwInputWindowPos(_GLFWwindow* window, int xpos, int ypos); 707 void _glfwInputWindowSize(_GLFWwindow* window, int width, int height); 708 void _glfwInputFramebufferSize(_GLFWwindow* window, int width, int height); 709 void _glfwInputWindowContentScale(_GLFWwindow* window, 710 float xscale, float yscale); 711 void _glfwInputWindowIconify(_GLFWwindow* window, GLFWbool iconified); 712 void _glfwInputWindowMaximize(_GLFWwindow* window, GLFWbool maximized); 713 void _glfwInputWindowDamage(_GLFWwindow* window); 714 void _glfwInputWindowCloseRequest(_GLFWwindow* window); 715 void _glfwInputWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor); 716 717 void _glfwInputKey(_GLFWwindow* window, 718 int key, int scancode, int action, int mods); 719 void _glfwInputChar(_GLFWwindow* window, 720 unsigned int codepoint, int mods, GLFWbool plain); 721 void _glfwInputScroll(_GLFWwindow* window, double xoffset, double yoffset); 722 void _glfwInputMouseClick(_GLFWwindow* window, int button, int action, int mods); 723 void _glfwInputCursorPos(_GLFWwindow* window, double xpos, double ypos); 724 void _glfwInputCursorEnter(_GLFWwindow* window, GLFWbool entered); 725 void _glfwInputDrop(_GLFWwindow* window, int count, const char** names); 726 void _glfwInputJoystick(_GLFWjoystick* js, int event); 727 void _glfwInputJoystickAxis(_GLFWjoystick* js, int axis, float value); 728 void _glfwInputJoystickButton(_GLFWjoystick* js, int button, char value); 729 void _glfwInputJoystickHat(_GLFWjoystick* js, int hat, char value); 730 731 void _glfwInputMonitor(_GLFWmonitor* monitor, int action, int placement); 732 void _glfwInputMonitorWindow(_GLFWmonitor* monitor, _GLFWwindow* window); 733 734 #if defined(__GNUC__) 735 void _glfwInputError(int code, const char* format, ...) 736 __attribute__((format(printf, 2, 3))); 737 #else 738 void _glfwInputError(int code, const char* format, ...); 739 #endif 740 741 742 ////////////////////////////////////////////////////////////////////////// 743 ////// GLFW internal API ////// 744 ////////////////////////////////////////////////////////////////////////// 745 746 GLFWbool _glfwStringInExtensionString(const char* string, const char* extensions); 747 const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired, 748 const _GLFWfbconfig* alternatives, 749 unsigned int count); 750 GLFWbool _glfwRefreshContextAttribs(_GLFWwindow* window, 751 const _GLFWctxconfig* ctxconfig); 752 GLFWbool _glfwIsValidContextConfig(const _GLFWctxconfig* ctxconfig); 753 754 const GLFWvidmode* _glfwChooseVideoMode(_GLFWmonitor* monitor, 755 const GLFWvidmode* desired); 756 int _glfwCompareVideoModes(const GLFWvidmode* first, const GLFWvidmode* second); 757 _GLFWmonitor* _glfwAllocMonitor(const char* name, int widthMM, int heightMM); 758 void _glfwFreeMonitor(_GLFWmonitor* monitor); 759 void _glfwAllocGammaArrays(GLFWgammaramp* ramp, unsigned int size); 760 void _glfwFreeGammaArrays(GLFWgammaramp* ramp); 761 void _glfwSplitBPP(int bpp, int* red, int* green, int* blue); 762 763 _GLFWjoystick* _glfwAllocJoystick(const char* name, 764 const char* guid, 765 int axisCount, 766 int buttonCount, 767 int hatCount); 768 void _glfwFreeJoystick(_GLFWjoystick* js); 769 void _glfwCenterCursorInContentArea(_GLFWwindow* window); 770 771 GLFWbool _glfwInitVulkan(int mode); 772 void _glfwTerminateVulkan(void); 773 const char* _glfwGetVulkanResultString(VkResult result); 774 775 char* _glfw_strdup(const char* source); 776 float _glfw_fminf(float a, float b); 777 float _glfw_fmaxf(float a, float b); 778