1 /************************************************************************* 2 * GLFW 3.2 - www.glfw.org 3 * A library for OpenGL, window and input 4 *------------------------------------------------------------------------ 5 * Copyright (c) 2002-2006 Marcus Geelnard 6 * Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org> 7 * 8 * This software is provided 'as-is', without any express or implied 9 * warranty. In no event will the authors be held liable for any damages 10 * arising from the use of this software. 11 * 12 * Permission is granted to anyone to use this software for any purpose, 13 * including commercial applications, and to alter it and redistribute it 14 * freely, subject to the following restrictions: 15 * 16 * 1. The origin of this software must not be misrepresented; you must not 17 * claim that you wrote the original software. If you use this software 18 * in a product, an acknowledgment in the product documentation would 19 * be appreciated but is not required. 20 * 21 * 2. Altered source versions must be plainly marked as such, and must not 22 * be misrepresented as being the original software. 23 * 24 * 3. This notice may not be removed or altered from any source 25 * distribution. 26 * 27 *************************************************************************/ 28 29 #ifndef _glfw3_h_ 30 #define _glfw3_h_ 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 37 /************************************************************************* 38 * Doxygen documentation 39 *************************************************************************/ 40 41 /*! @file glfw3.h 42 * @brief The header of the GLFW 3 API. 43 * 44 * This is the header file of the GLFW 3 API. It defines all its types and 45 * declares all its functions. 46 * 47 * For more information about how to use this file, see @ref build_include. 48 */ 49 /*! @defgroup context Context reference 50 * 51 * This is the reference documentation for OpenGL and OpenGL ES context related 52 * functions. For more task-oriented information, see the @ref context_guide. 53 */ 54 /*! @defgroup vulkan Vulkan reference 55 * 56 * This is the reference documentation for Vulkan related functions and types. 57 * For more task-oriented information, see the @ref vulkan_guide. 58 */ 59 /*! @defgroup init Initialization, version and error reference 60 * 61 * This is the reference documentation for initialization and termination of 62 * the library, version management and error handling. For more task-oriented 63 * information, see the @ref intro_guide. 64 */ 65 /*! @defgroup input Input reference 66 * 67 * This is the reference documentation for input related functions and types. 68 * For more task-oriented information, see the @ref input_guide. 69 */ 70 /*! @defgroup monitor Monitor reference 71 * 72 * This is the reference documentation for monitor related functions and types. 73 * For more task-oriented information, see the @ref monitor_guide. 74 */ 75 /*! @defgroup window Window reference 76 * 77 * This is the reference documentation for window related functions and types, 78 * including creation, deletion and event polling. For more task-oriented 79 * information, see the @ref window_guide. 80 */ 81 82 83 /************************************************************************* 84 * Compiler- and platform-specific preprocessor work 85 *************************************************************************/ 86 87 /* If we are we on Windows, we want a single define for it. 88 */ 89 #if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__)) 90 #define _WIN32 91 #endif /* _WIN32 */ 92 93 /* It is customary to use APIENTRY for OpenGL function pointer declarations on 94 * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. 95 */ 96 #ifndef APIENTRY 97 #ifdef _WIN32 98 #define APIENTRY __stdcall 99 #else 100 #define APIENTRY 101 #endif 102 #endif /* APIENTRY */ 103 104 /* Some Windows OpenGL headers need this. 105 */ 106 #if !defined(WINGDIAPI) && defined(_WIN32) 107 #define WINGDIAPI __declspec(dllimport) 108 #define GLFW_WINGDIAPI_DEFINED 109 #endif /* WINGDIAPI */ 110 111 /* Some Windows GLU headers need this. 112 */ 113 #if !defined(CALLBACK) && defined(_WIN32) 114 #define CALLBACK __stdcall 115 #define GLFW_CALLBACK_DEFINED 116 #endif /* CALLBACK */ 117 118 /* Include because most Windows GLU headers need wchar_t and 119 * the OS X OpenGL header blocks the definition of ptrdiff_t by glext.h. 120 * Include it unconditionally to avoid surprising side-effects. 121 */ 122 #include <stddef.h> 123 124 /* Include because it is needed by Vulkan and related functions. 125 */ 126 #include <stdint.h> 127 128 /* Include the chosen client API headers. 129 */ 130 #if defined(__APPLE__) 131 #if defined(GLFW_INCLUDE_GLCOREARB) 132 #include <OpenGL/gl3.h> 133 #if defined(GLFW_INCLUDE_GLEXT) 134 #include <OpenGL/gl3ext.h> 135 #endif 136 #elif !defined(GLFW_INCLUDE_NONE) 137 #if !defined(GLFW_INCLUDE_GLEXT) 138 #define GL_GLEXT_LEGACY 139 #endif 140 #include <OpenGL/gl.h> 141 #endif 142 #if defined(GLFW_INCLUDE_GLU) 143 #include <OpenGL/glu.h> 144 #endif 145 #else 146 #if defined(GLFW_INCLUDE_GLCOREARB) 147 #include <GL/glcorearb.h> 148 #elif defined(GLFW_INCLUDE_ES1) 149 #include <GLES/gl.h> 150 #if defined(GLFW_INCLUDE_GLEXT) 151 #include <GLES/glext.h> 152 #endif 153 #elif defined(GLFW_INCLUDE_ES2) 154 #include <GLES2/gl2.h> 155 #if defined(GLFW_INCLUDE_GLEXT) 156 #include <GLES2/gl2ext.h> 157 #endif 158 #elif defined(GLFW_INCLUDE_ES3) 159 #include <GLES3/gl3.h> 160 #if defined(GLFW_INCLUDE_GLEXT) 161 #include <GLES2/gl2ext.h> 162 #endif 163 #elif defined(GLFW_INCLUDE_ES31) 164 #include <GLES3/gl31.h> 165 #if defined(GLFW_INCLUDE_GLEXT) 166 #include <GLES2/gl2ext.h> 167 #endif 168 #elif defined(GLFW_INCLUDE_VULKAN) 169 #include <vulkan/vulkan.h> 170 #elif !defined(GLFW_INCLUDE_NONE) 171 #include <GL/gl.h> 172 #if defined(GLFW_INCLUDE_GLEXT) 173 #include <GL/glext.h> 174 #endif 175 #endif 176 #if defined(GLFW_INCLUDE_GLU) 177 #include <GL/glu.h> 178 #endif 179 #endif 180 181 #if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) 182 /* GLFW_DLL must be defined by applications that are linking against the DLL 183 * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW 184 * configuration header when compiling the DLL version of the library. 185 */ 186 #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined" 187 #endif 188 189 /* GLFWAPI is used to declare public API functions for export 190 * from the DLL / shared library / dynamic library. 191 */ 192 #if defined(_WIN32) && defined(_GLFW_BUILD_DLL) 193 /* We are building GLFW as a Win32 DLL */ 194 #define GLFWAPI __declspec(dllexport) 195 #elif defined(_WIN32) && defined(GLFW_DLL) 196 /* We are calling GLFW as a Win32 DLL */ 197 #define GLFWAPI __declspec(dllimport) 198 #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) 199 /* We are building GLFW as a shared / dynamic library */ 200 #define GLFWAPI __attribute__((visibility("default"))) 201 #else 202 /* We are building or calling GLFW as a static library */ 203 #define GLFWAPI 204 #endif 205 206 207 /************************************************************************* 208 * GLFW API tokens 209 *************************************************************************/ 210 211 /*! @name GLFW version macros 212 * @{ */ 213 /*! @brief The major version number of the GLFW library. 214 * 215 * This is incremented when the API is changed in non-compatible ways. 216 * @ingroup init 217 */ 218 #define GLFW_VERSION_MAJOR 3 219 /*! @brief The minor version number of the GLFW library. 220 * 221 * This is incremented when features are added to the API but it remains 222 * backward-compatible. 223 * @ingroup init 224 */ 225 #define GLFW_VERSION_MINOR 2 226 /*! @brief The revision number of the GLFW library. 227 * 228 * This is incremented when a bug fix release is made that does not contain any 229 * API changes. 230 * @ingroup init 231 */ 232 #define GLFW_VERSION_REVISION 1 233 /*! @} */ 234 235 /*! @name Boolean values 236 * @{ */ 237 /*! @brief One. 238 * 239 * One. Seriously. You don't _need_ to use this symbol in your code. It's 240 * just semantic sugar for the number 1. You can use `1` or `true` or `_True` 241 * or `GL_TRUE` or whatever you want. 242 */ 243 #define GLFW_TRUE 1 244 /*! @brief Zero. 245 * 246 * Zero. Seriously. You don't _need_ to use this symbol in your code. It's 247 * just just semantic sugar for the number 0. You can use `0` or `false` or 248 * `_False` or `GL_FALSE` or whatever you want. 249 */ 250 #define GLFW_FALSE 0 251 /*! @} */ 252 253 /*! @name Key and button actions 254 * @{ */ 255 /*! @brief The key or mouse button was released. 256 * 257 * The key or mouse button was released. 258 * 259 * @ingroup input 260 */ 261 #define GLFW_RELEASE 0 262 /*! @brief The key or mouse button was pressed. 263 * 264 * The key or mouse button was pressed. 265 * 266 * @ingroup input 267 */ 268 #define GLFW_PRESS 1 269 /*! @brief The key was held down until it repeated. 270 * 271 * The key was held down until it repeated. 272 * 273 * @ingroup input 274 */ 275 #define GLFW_REPEAT 2 276 /*! @} */ 277 278 /*! @defgroup keys Keyboard keys 279 * 280 * See [key input](@ref input_key) for how these are used. 281 * 282 * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), 283 * but re-arranged to map to 7-bit ASCII for printable keys (function keys are 284 * put in the 256+ range). 285 * 286 * The naming of the key codes follow these rules: 287 * - The US keyboard layout is used 288 * - Names of printable alpha-numeric characters are used (e.g. "A", "R", 289 * "3", etc.) 290 * - For non-alphanumeric characters, Unicode:ish names are used (e.g. 291 * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not 292 * correspond to the Unicode standard (usually for brevity) 293 * - Keys that lack a clear US mapping are named "WORLD_x" 294 * - For non-printable keys, custom names are used (e.g. "F4", 295 * "BACKSPACE", etc.) 296 * 297 * @ingroup input 298 * @{ 299 */ 300 301 /* The unknown key */ 302 #define GLFW_KEY_UNKNOWN -1 303 304 /* Printable keys */ 305 #define GLFW_KEY_SPACE 32 306 #define GLFW_KEY_APOSTROPHE 39 /* ' */ 307 #define GLFW_KEY_COMMA 44 /* , */ 308 #define GLFW_KEY_MINUS 45 /* - */ 309 #define GLFW_KEY_PERIOD 46 /* . */ 310 #define GLFW_KEY_SLASH 47 /* / */ 311 #define GLFW_KEY_0 48 312 #define GLFW_KEY_1 49 313 #define GLFW_KEY_2 50 314 #define GLFW_KEY_3 51 315 #define GLFW_KEY_4 52 316 #define GLFW_KEY_5 53 317 #define GLFW_KEY_6 54 318 #define GLFW_KEY_7 55 319 #define GLFW_KEY_8 56 320 #define GLFW_KEY_9 57 321 #define GLFW_KEY_SEMICOLON 59 /* ; */ 322 #define GLFW_KEY_EQUAL 61 /* = */ 323 #define GLFW_KEY_A 65 324 #define GLFW_KEY_B 66 325 #define GLFW_KEY_C 67 326 #define GLFW_KEY_D 68 327 #define GLFW_KEY_E 69 328 #define GLFW_KEY_F 70 329 #define GLFW_KEY_G 71 330 #define GLFW_KEY_H 72 331 #define GLFW_KEY_I 73 332 #define GLFW_KEY_J 74 333 #define GLFW_KEY_K 75 334 #define GLFW_KEY_L 76 335 #define GLFW_KEY_M 77 336 #define GLFW_KEY_N 78 337 #define GLFW_KEY_O 79 338 #define GLFW_KEY_P 80 339 #define GLFW_KEY_Q 81 340 #define GLFW_KEY_R 82 341 #define GLFW_KEY_S 83 342 #define GLFW_KEY_T 84 343 #define GLFW_KEY_U 85 344 #define GLFW_KEY_V 86 345 #define GLFW_KEY_W 87 346 #define GLFW_KEY_X 88 347 #define GLFW_KEY_Y 89 348 #define GLFW_KEY_Z 90 349 #define GLFW_KEY_LEFT_BRACKET 91 /* [ */ 350 #define GLFW_KEY_BACKSLASH 92 /* \ */ 351 #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ 352 #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ 353 #define GLFW_KEY_WORLD_1 161 /* non-US #1 */ 354 #define GLFW_KEY_WORLD_2 162 /* non-US #2 */ 355 356 /* Function keys */ 357 #define GLFW_KEY_ESCAPE 256 358 #define GLFW_KEY_ENTER 257 359 #define GLFW_KEY_TAB 258 360 #define GLFW_KEY_BACKSPACE 259 361 #define GLFW_KEY_INSERT 260 362 #define GLFW_KEY_DELETE 261 363 #define GLFW_KEY_RIGHT 262 364 #define GLFW_KEY_LEFT 263 365 #define GLFW_KEY_DOWN 264 366 #define GLFW_KEY_UP 265 367 #define GLFW_KEY_PAGE_UP 266 368 #define GLFW_KEY_PAGE_DOWN 267 369 #define GLFW_KEY_HOME 268 370 #define GLFW_KEY_END 269 371 #define GLFW_KEY_CAPS_LOCK 280 372 #define GLFW_KEY_SCROLL_LOCK 281 373 #define GLFW_KEY_NUM_LOCK 282 374 #define GLFW_KEY_PRINT_SCREEN 283 375 #define GLFW_KEY_PAUSE 284 376 #define GLFW_KEY_F1 290 377 #define GLFW_KEY_F2 291 378 #define GLFW_KEY_F3 292 379 #define GLFW_KEY_F4 293 380 #define GLFW_KEY_F5 294 381 #define GLFW_KEY_F6 295 382 #define GLFW_KEY_F7 296 383 #define GLFW_KEY_F8 297 384 #define GLFW_KEY_F9 298 385 #define GLFW_KEY_F10 299 386 #define GLFW_KEY_F11 300 387 #define GLFW_KEY_F12 301 388 #define GLFW_KEY_F13 302 389 #define GLFW_KEY_F14 303 390 #define GLFW_KEY_F15 304 391 #define GLFW_KEY_F16 305 392 #define GLFW_KEY_F17 306 393 #define GLFW_KEY_F18 307 394 #define GLFW_KEY_F19 308 395 #define GLFW_KEY_F20 309 396 #define GLFW_KEY_F21 310 397 #define GLFW_KEY_F22 311 398 #define GLFW_KEY_F23 312 399 #define GLFW_KEY_F24 313 400 #define GLFW_KEY_F25 314 401 #define GLFW_KEY_KP_0 320 402 #define GLFW_KEY_KP_1 321 403 #define GLFW_KEY_KP_2 322 404 #define GLFW_KEY_KP_3 323 405 #define GLFW_KEY_KP_4 324 406 #define GLFW_KEY_KP_5 325 407 #define GLFW_KEY_KP_6 326 408 #define GLFW_KEY_KP_7 327 409 #define GLFW_KEY_KP_8 328 410 #define GLFW_KEY_KP_9 329 411 #define GLFW_KEY_KP_DECIMAL 330 412 #define GLFW_KEY_KP_DIVIDE 331 413 #define GLFW_KEY_KP_MULTIPLY 332 414 #define GLFW_KEY_KP_SUBTRACT 333 415 #define GLFW_KEY_KP_ADD 334 416 #define GLFW_KEY_KP_ENTER 335 417 #define GLFW_KEY_KP_EQUAL 336 418 #define GLFW_KEY_LEFT_SHIFT 340 419 #define GLFW_KEY_LEFT_CONTROL 341 420 #define GLFW_KEY_LEFT_ALT 342 421 #define GLFW_KEY_LEFT_SUPER 343 422 #define GLFW_KEY_RIGHT_SHIFT 344 423 #define GLFW_KEY_RIGHT_CONTROL 345 424 #define GLFW_KEY_RIGHT_ALT 346 425 #define GLFW_KEY_RIGHT_SUPER 347 426 #define GLFW_KEY_MENU 348 427 428 #define GLFW_KEY_LAST GLFW_KEY_MENU 429 430 /*! @} */ 431 432 /*! @defgroup mods Modifier key flags 433 * 434 * See [key input](@ref input_key) for how these are used. 435 * 436 * @ingroup input 437 * @{ */ 438 439 /*! @brief If this bit is set one or more Shift keys were held down. 440 */ 441 #define GLFW_MOD_SHIFT 0x0001 442 /*! @brief If this bit is set one or more Control keys were held down. 443 */ 444 #define GLFW_MOD_CONTROL 0x0002 445 /*! @brief If this bit is set one or more Alt keys were held down. 446 */ 447 #define GLFW_MOD_ALT 0x0004 448 /*! @brief If this bit is set one or more Super keys were held down. 449 */ 450 #define GLFW_MOD_SUPER 0x0008 451 452 /*! @} */ 453 454 /*! @defgroup buttons Mouse buttons 455 * 456 * See [mouse button input](@ref input_mouse_button) for how these are used. 457 * 458 * @ingroup input 459 * @{ */ 460 #define GLFW_MOUSE_BUTTON_1 0 461 #define GLFW_MOUSE_BUTTON_2 1 462 #define GLFW_MOUSE_BUTTON_3 2 463 #define GLFW_MOUSE_BUTTON_4 3 464 #define GLFW_MOUSE_BUTTON_5 4 465 #define GLFW_MOUSE_BUTTON_6 5 466 #define GLFW_MOUSE_BUTTON_7 6 467 #define GLFW_MOUSE_BUTTON_8 7 468 #define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 469 #define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 470 #define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 471 #define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 472 /*! @} */ 473 474 /*! @defgroup joysticks Joysticks 475 * 476 * See [joystick input](@ref joystick) for how these are used. 477 * 478 * @ingroup input 479 * @{ */ 480 #define GLFW_JOYSTICK_1 0 481 #define GLFW_JOYSTICK_2 1 482 #define GLFW_JOYSTICK_3 2 483 #define GLFW_JOYSTICK_4 3 484 #define GLFW_JOYSTICK_5 4 485 #define GLFW_JOYSTICK_6 5 486 #define GLFW_JOYSTICK_7 6 487 #define GLFW_JOYSTICK_8 7 488 #define GLFW_JOYSTICK_9 8 489 #define GLFW_JOYSTICK_10 9 490 #define GLFW_JOYSTICK_11 10 491 #define GLFW_JOYSTICK_12 11 492 #define GLFW_JOYSTICK_13 12 493 #define GLFW_JOYSTICK_14 13 494 #define GLFW_JOYSTICK_15 14 495 #define GLFW_JOYSTICK_16 15 496 #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 497 /*! @} */ 498 499 /*! @defgroup errors Error codes 500 * 501 * See [error handling](@ref error_handling) for how these are used. 502 * 503 * @ingroup init 504 * @{ */ 505 /*! @brief GLFW has not been initialized. 506 * 507 * This occurs if a GLFW function was called that must not be called unless the 508 * library is [initialized](@ref intro_init). 509 * 510 * @analysis Application programmer error. Initialize GLFW before calling any 511 * function that requires initialization. 512 */ 513 #define GLFW_NOT_INITIALIZED 0x00010001 514 /*! @brief No context is current for this thread. 515 * 516 * This occurs if a GLFW function was called that needs and operates on the 517 * current OpenGL or OpenGL ES context but no context is current on the calling 518 * thread. One such function is @ref glfwSwapInterval. 519 * 520 * @analysis Application programmer error. Ensure a context is current before 521 * calling functions that require a current context. 522 */ 523 #define GLFW_NO_CURRENT_CONTEXT 0x00010002 524 /*! @brief One of the arguments to the function was an invalid enum value. 525 * 526 * One of the arguments to the function was an invalid enum value, for example 527 * requesting [GLFW_RED_BITS](@ref window_hints_fb) with @ref 528 * glfwGetWindowAttrib. 529 * 530 * @analysis Application programmer error. Fix the offending call. 531 */ 532 #define GLFW_INVALID_ENUM 0x00010003 533 /*! @brief One of the arguments to the function was an invalid value. 534 * 535 * One of the arguments to the function was an invalid value, for example 536 * requesting a non-existent OpenGL or OpenGL ES version like 2.7. 537 * 538 * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead 539 * result in a @ref GLFW_VERSION_UNAVAILABLE error. 540 * 541 * @analysis Application programmer error. Fix the offending call. 542 */ 543 #define GLFW_INVALID_VALUE 0x00010004 544 /*! @brief A memory allocation failed. 545 * 546 * A memory allocation failed. 547 * 548 * @analysis A bug in GLFW or the underlying operating system. Report the bug 549 * to our [issue tracker](https://github.com/glfw/glfw/issues). 550 */ 551 #define GLFW_OUT_OF_MEMORY 0x00010005 552 /*! @brief GLFW could not find support for the requested API on the system. 553 * 554 * GLFW could not find support for the requested API on the system. 555 * 556 * @analysis The installed graphics driver does not support the requested 557 * API, or does not support it via the chosen context creation backend. 558 * Below are a few examples. 559 * 560 * @par 561 * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only 562 * supports OpenGL ES via EGL, while Nvidia and Intel only support it via 563 * a WGL or GLX extension. OS X does not provide OpenGL ES at all. The Mesa 564 * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary 565 * driver. Older graphics drivers do not support Vulkan. 566 */ 567 #define GLFW_API_UNAVAILABLE 0x00010006 568 /*! @brief The requested OpenGL or OpenGL ES version is not available. 569 * 570 * The requested OpenGL or OpenGL ES version (including any requested context 571 * or framebuffer hints) is not available on this machine. 572 * 573 * @analysis The machine does not support your requirements. If your 574 * application is sufficiently flexible, downgrade your requirements and try 575 * again. Otherwise, inform the user that their machine does not match your 576 * requirements. 577 * 578 * @par 579 * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 580 * comes out before the 4.x series gets that far, also fail with this error and 581 * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions 582 * will exist. 583 */ 584 #define GLFW_VERSION_UNAVAILABLE 0x00010007 585 /*! @brief A platform-specific error occurred that does not match any of the 586 * more specific categories. 587 * 588 * A platform-specific error occurred that does not match any of the more 589 * specific categories. 590 * 591 * @analysis A bug or configuration error in GLFW, the underlying operating 592 * system or its drivers, or a lack of required resources. Report the issue to 593 * our [issue tracker](https://github.com/glfw/glfw/issues). 594 */ 595 #define GLFW_PLATFORM_ERROR 0x00010008 596 /*! @brief The requested format is not supported or available. 597 * 598 * If emitted during window creation, the requested pixel format is not 599 * supported. 600 * 601 * If emitted when querying the clipboard, the contents of the clipboard could 602 * not be converted to the requested format. 603 * 604 * @analysis If emitted during window creation, one or more 605 * [hard constraints](@ref window_hints_hard) did not match any of the 606 * available pixel formats. If your application is sufficiently flexible, 607 * downgrade your requirements and try again. Otherwise, inform the user that 608 * their machine does not match your requirements. 609 * 610 * @par 611 * If emitted when querying the clipboard, ignore the error or report it to 612 * the user, as appropriate. 613 */ 614 #define GLFW_FORMAT_UNAVAILABLE 0x00010009 615 /*! @brief The specified window does not have an OpenGL or OpenGL ES context. 616 * 617 * A window that does not have an OpenGL or OpenGL ES context was passed to 618 * a function that requires it to have one. 619 * 620 * @analysis Application programmer error. Fix the offending call. 621 */ 622 #define GLFW_NO_WINDOW_CONTEXT 0x0001000A 623 /*! @} */ 624 625 #define GLFW_FOCUSED 0x00020001 626 #define GLFW_ICONIFIED 0x00020002 627 #define GLFW_RESIZABLE 0x00020003 628 #define GLFW_VISIBLE 0x00020004 629 #define GLFW_DECORATED 0x00020005 630 #define GLFW_AUTO_ICONIFY 0x00020006 631 #define GLFW_FLOATING 0x00020007 632 #define GLFW_MAXIMIZED 0x00020008 633 634 #define GLFW_RED_BITS 0x00021001 635 #define GLFW_GREEN_BITS 0x00021002 636 #define GLFW_BLUE_BITS 0x00021003 637 #define GLFW_ALPHA_BITS 0x00021004 638 #define GLFW_DEPTH_BITS 0x00021005 639 #define GLFW_STENCIL_BITS 0x00021006 640 #define GLFW_ACCUM_RED_BITS 0x00021007 641 #define GLFW_ACCUM_GREEN_BITS 0x00021008 642 #define GLFW_ACCUM_BLUE_BITS 0x00021009 643 #define GLFW_ACCUM_ALPHA_BITS 0x0002100A 644 #define GLFW_AUX_BUFFERS 0x0002100B 645 #define GLFW_STEREO 0x0002100C 646 #define GLFW_SAMPLES 0x0002100D 647 #define GLFW_SRGB_CAPABLE 0x0002100E 648 #define GLFW_REFRESH_RATE 0x0002100F 649 #define GLFW_DOUBLEBUFFER 0x00021010 650 651 #define GLFW_CLIENT_API 0x00022001 652 #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 653 #define GLFW_CONTEXT_VERSION_MINOR 0x00022003 654 #define GLFW_CONTEXT_REVISION 0x00022004 655 #define GLFW_CONTEXT_ROBUSTNESS 0x00022005 656 #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 657 #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 658 #define GLFW_OPENGL_PROFILE 0x00022008 659 #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 660 #define GLFW_CONTEXT_NO_ERROR 0x0002200A 661 #define GLFW_CONTEXT_CREATION_API 0x0002200B 662 663 #define GLFW_NO_API 0 664 #define GLFW_OPENGL_API 0x00030001 665 #define GLFW_OPENGL_ES_API 0x00030002 666 667 #define GLFW_NO_ROBUSTNESS 0 668 #define GLFW_NO_RESET_NOTIFICATION 0x00031001 669 #define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 670 671 #define GLFW_OPENGL_ANY_PROFILE 0 672 #define GLFW_OPENGL_CORE_PROFILE 0x00032001 673 #define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 674 675 #define GLFW_CURSOR 0x00033001 676 #define GLFW_STICKY_KEYS 0x00033002 677 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 678 679 #define GLFW_CURSOR_NORMAL 0x00034001 680 #define GLFW_CURSOR_HIDDEN 0x00034002 681 #define GLFW_CURSOR_DISABLED 0x00034003 682 683 #define GLFW_ANY_RELEASE_BEHAVIOR 0 684 #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 685 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 686 687 #define GLFW_NATIVE_CONTEXT_API 0x00036001 688 #define GLFW_EGL_CONTEXT_API 0x00036002 689 690 /*! @defgroup shapes Standard cursor shapes 691 * 692 * See [standard cursor creation](@ref cursor_standard) for how these are used. 693 * 694 * @ingroup input 695 * @{ */ 696 697 /*! @brief The regular arrow cursor shape. 698 * 699 * The regular arrow cursor. 700 */ 701 #define GLFW_ARROW_CURSOR 0x00036001 702 /*! @brief The text input I-beam cursor shape. 703 * 704 * The text input I-beam cursor shape. 705 */ 706 #define GLFW_IBEAM_CURSOR 0x00036002 707 /*! @brief The crosshair shape. 708 * 709 * The crosshair shape. 710 */ 711 #define GLFW_CROSSHAIR_CURSOR 0x00036003 712 /*! @brief The hand shape. 713 * 714 * The hand shape. 715 */ 716 #define GLFW_HAND_CURSOR 0x00036004 717 /*! @brief The horizontal resize arrow shape. 718 * 719 * The horizontal resize arrow shape. 720 */ 721 #define GLFW_HRESIZE_CURSOR 0x00036005 722 /*! @brief The vertical resize arrow shape. 723 * 724 * The vertical resize arrow shape. 725 */ 726 #define GLFW_VRESIZE_CURSOR 0x00036006 727 /*! @} */ 728 729 #define GLFW_CONNECTED 0x00040001 730 #define GLFW_DISCONNECTED 0x00040002 731 732 #define GLFW_DONT_CARE -1 733 734 735 /************************************************************************* 736 * GLFW API types 737 *************************************************************************/ 738 739 /*! @brief Client API function pointer type. 740 * 741 * Generic function pointer used for returning client API function pointers 742 * without forcing a cast from a regular pointer. 743 * 744 * @sa @ref context_glext 745 * @sa glfwGetProcAddress 746 * 747 * @since Added in version 3.0. 748 749 * @ingroup context 750 */ 751 typedef void (*GLFWglproc)(void); 752 753 /*! @brief Vulkan API function pointer type. 754 * 755 * Generic function pointer used for returning Vulkan API function pointers 756 * without forcing a cast from a regular pointer. 757 * 758 * @sa @ref vulkan_proc 759 * @sa glfwGetInstanceProcAddress 760 * 761 * @since Added in version 3.2. 762 * 763 * @ingroup vulkan 764 */ 765 typedef void (*GLFWvkproc)(void); 766 767 /*! @brief Opaque monitor object. 768 * 769 * Opaque monitor object. 770 * 771 * @see @ref monitor_object 772 * 773 * @since Added in version 3.0. 774 * 775 * @ingroup monitor 776 */ 777 typedef struct GLFWmonitor GLFWmonitor; 778 779 /*! @brief Opaque window object. 780 * 781 * Opaque window object. 782 * 783 * @see @ref window_object 784 * 785 * @since Added in version 3.0. 786 * 787 * @ingroup window 788 */ 789 typedef struct GLFWwindow GLFWwindow; 790 791 /*! @brief Opaque cursor object. 792 * 793 * Opaque cursor object. 794 * 795 * @see @ref cursor_object 796 * 797 * @since Added in version 3.1. 798 * 799 * @ingroup cursor 800 */ 801 typedef struct GLFWcursor GLFWcursor; 802 803 /*! @brief The function signature for error callbacks. 804 * 805 * This is the function signature for error callback functions. 806 * 807 * @param[in] error An [error code](@ref errors). 808 * @param[in] description A UTF-8 encoded string describing the error. 809 * 810 * @sa @ref error_handling 811 * @sa glfwSetErrorCallback 812 * 813 * @since Added in version 3.0. 814 * 815 * @ingroup init 816 */ 817 typedef void (* GLFWerrorfun)(int,const char*); 818 819 /*! @brief The function signature for window position callbacks. 820 * 821 * This is the function signature for window position callback functions. 822 * 823 * @param[in] window The window that was moved. 824 * @param[in] xpos The new x-coordinate, in screen coordinates, of the 825 * upper-left corner of the client area of the window. 826 * @param[in] ypos The new y-coordinate, in screen coordinates, of the 827 * upper-left corner of the client area of the window. 828 * 829 * @sa @ref window_pos 830 * @sa glfwSetWindowPosCallback 831 * 832 * @since Added in version 3.0. 833 * 834 * @ingroup window 835 */ 836 typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); 837 838 /*! @brief The function signature for window resize callbacks. 839 * 840 * This is the function signature for window size callback functions. 841 * 842 * @param[in] window The window that was resized. 843 * @param[in] width The new width, in screen coordinates, of the window. 844 * @param[in] height The new height, in screen coordinates, of the window. 845 * 846 * @sa @ref window_size 847 * @sa glfwSetWindowSizeCallback 848 * 849 * @since Added in version 1.0. 850 * @glfw3 Added window handle parameter. 851 * 852 * @ingroup window 853 */ 854 typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int); 855 856 /*! @brief The function signature for window close callbacks. 857 * 858 * This is the function signature for window close callback functions. 859 * 860 * @param[in] window The window that the user attempted to close. 861 * 862 * @sa @ref window_close 863 * @sa glfwSetWindowCloseCallback 864 * 865 * @since Added in version 2.5. 866 * @glfw3 Added window handle parameter. 867 * 868 * @ingroup window 869 */ 870 typedef void (* GLFWwindowclosefun)(GLFWwindow*); 871 872 /*! @brief The function signature for window content refresh callbacks. 873 * 874 * This is the function signature for window refresh callback functions. 875 * 876 * @param[in] window The window whose content needs to be refreshed. 877 * 878 * @sa @ref window_refresh 879 * @sa glfwSetWindowRefreshCallback 880 * 881 * @since Added in version 2.5. 882 * @glfw3 Added window handle parameter. 883 * 884 * @ingroup window 885 */ 886 typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); 887 888 /*! @brief The function signature for window focus/defocus callbacks. 889 * 890 * This is the function signature for window focus callback functions. 891 * 892 * @param[in] window The window that gained or lost input focus. 893 * @param[in] focused `GLFW_TRUE` if the window was given input focus, or 894 * `GLFW_FALSE` if it lost it. 895 * 896 * @sa @ref window_focus 897 * @sa glfwSetWindowFocusCallback 898 * 899 * @since Added in version 3.0. 900 * 901 * @ingroup window 902 */ 903 typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int); 904 905 /*! @brief The function signature for window iconify/restore callbacks. 906 * 907 * This is the function signature for window iconify/restore callback 908 * functions. 909 * 910 * @param[in] window The window that was iconified or restored. 911 * @param[in] iconified `GLFW_TRUE` if the window was iconified, or 912 * `GLFW_FALSE` if it was restored. 913 * 914 * @sa @ref window_iconify 915 * @sa glfwSetWindowIconifyCallback 916 * 917 * @since Added in version 3.0. 918 * 919 * @ingroup window 920 */ 921 typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int); 922 923 /*! @brief The function signature for framebuffer resize callbacks. 924 * 925 * This is the function signature for framebuffer resize callback 926 * functions. 927 * 928 * @param[in] window The window whose framebuffer was resized. 929 * @param[in] width The new width, in pixels, of the framebuffer. 930 * @param[in] height The new height, in pixels, of the framebuffer. 931 * 932 * @sa @ref window_fbsize 933 * @sa glfwSetFramebufferSizeCallback 934 * 935 * @since Added in version 3.0. 936 * 937 * @ingroup window 938 */ 939 typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int); 940 941 /*! @brief The function signature for mouse button callbacks. 942 * 943 * This is the function signature for mouse button callback functions. 944 * 945 * @param[in] window The window that received the event. 946 * @param[in] button The [mouse button](@ref buttons) that was pressed or 947 * released. 948 * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. 949 * @param[in] mods Bit field describing which [modifier keys](@ref mods) were 950 * held down. 951 * 952 * @sa @ref input_mouse_button 953 * @sa glfwSetMouseButtonCallback 954 * 955 * @since Added in version 1.0. 956 * @glfw3 Added window handle and modifier mask parameters. 957 * 958 * @ingroup input 959 */ 960 typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); 961 962 /*! @brief The function signature for cursor position callbacks. 963 * 964 * This is the function signature for cursor position callback functions. 965 * 966 * @param[in] window The window that received the event. 967 * @param[in] xpos The new cursor x-coordinate, relative to the left edge of 968 * the client area. 969 * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the 970 * client area. 971 * 972 * @sa @ref cursor_pos 973 * @sa glfwSetCursorPosCallback 974 * 975 * @since Added in version 3.0. Replaces `GLFWmouseposfun`. 976 * 977 * @ingroup input 978 */ 979 typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double); 980 981 /*! @brief The function signature for cursor enter/leave callbacks. 982 * 983 * This is the function signature for cursor enter/leave callback functions. 984 * 985 * @param[in] window The window that received the event. 986 * @param[in] entered `GLFW_TRUE` if the cursor entered the window's client 987 * area, or `GLFW_FALSE` if it left it. 988 * 989 * @sa @ref cursor_enter 990 * @sa glfwSetCursorEnterCallback 991 * 992 * @since Added in version 3.0. 993 * 994 * @ingroup input 995 */ 996 typedef void (* GLFWcursorenterfun)(GLFWwindow*,int); 997 998 /*! @brief The function signature for scroll callbacks. 999 * 1000 * This is the function signature for scroll callback functions. 1001 * 1002 * @param[in] window The window that received the event. 1003 * @param[in] xoffset The scroll offset along the x-axis. 1004 * @param[in] yoffset The scroll offset along the y-axis. 1005 * 1006 * @sa @ref scrolling 1007 * @sa glfwSetScrollCallback 1008 * 1009 * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. 1010 * 1011 * @ingroup input 1012 */ 1013 typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); 1014 1015 /*! @brief The function signature for keyboard key callbacks. 1016 * 1017 * This is the function signature for keyboard key callback functions. 1018 * 1019 * @param[in] window The window that received the event. 1020 * @param[in] key The [keyboard key](@ref keys) that was pressed or released. 1021 * @param[in] scancode The system-specific scancode of the key. 1022 * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. 1023 * @param[in] mods Bit field describing which [modifier keys](@ref mods) were 1024 * held down. 1025 * 1026 * @sa @ref input_key 1027 * @sa glfwSetKeyCallback 1028 * 1029 * @since Added in version 1.0. 1030 * @glfw3 Added window handle, scancode and modifier mask parameters. 1031 * 1032 * @ingroup input 1033 */ 1034 typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); 1035 1036 /*! @brief The function signature for Unicode character callbacks. 1037 * 1038 * This is the function signature for Unicode character callback functions. 1039 * 1040 * @param[in] window The window that received the event. 1041 * @param[in] codepoint The Unicode code point of the character. 1042 * 1043 * @sa @ref input_char 1044 * @sa glfwSetCharCallback 1045 * 1046 * @since Added in version 2.4. 1047 * @glfw3 Added window handle parameter. 1048 * 1049 * @ingroup input 1050 */ 1051 typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); 1052 1053 /*! @brief The function signature for Unicode character with modifiers 1054 * callbacks. 1055 * 1056 * This is the function signature for Unicode character with modifiers callback 1057 * functions. It is called for each input character, regardless of what 1058 * modifier keys are held down. 1059 * 1060 * @param[in] window The window that received the event. 1061 * @param[in] codepoint The Unicode code point of the character. 1062 * @param[in] mods Bit field describing which [modifier keys](@ref mods) were 1063 * held down. 1064 * 1065 * @sa @ref input_char 1066 * @sa glfwSetCharModsCallback 1067 * 1068 * @since Added in version 3.1. 1069 * 1070 * @ingroup input 1071 */ 1072 typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); 1073 1074 /*! @brief The function signature for file drop callbacks. 1075 * 1076 * This is the function signature for file drop callbacks. 1077 * 1078 * @param[in] window The window that received the event. 1079 * @param[in] count The number of dropped files. 1080 * @param[in] paths The UTF-8 encoded file and/or directory path names. 1081 * 1082 * @sa @ref path_drop 1083 * @sa glfwSetDropCallback 1084 * 1085 * @since Added in version 3.1. 1086 * 1087 * @ingroup input 1088 */ 1089 typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**); 1090 1091 /*! @brief The function signature for monitor configuration callbacks. 1092 * 1093 * This is the function signature for monitor configuration callback functions. 1094 * 1095 * @param[in] monitor The monitor that was connected or disconnected. 1096 * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. 1097 * 1098 * @sa @ref monitor_event 1099 * @sa glfwSetMonitorCallback 1100 * 1101 * @since Added in version 3.0. 1102 * 1103 * @ingroup monitor 1104 */ 1105 typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); 1106 1107 /*! @brief The function signature for joystick configuration callbacks. 1108 * 1109 * This is the function signature for joystick configuration callback 1110 * functions. 1111 * 1112 * @param[in] joy The joystick that was connected or disconnected. 1113 * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. 1114 * 1115 * @sa @ref joystick_event 1116 * @sa glfwSetJoystickCallback 1117 * 1118 * @since Added in version 3.2. 1119 * 1120 * @ingroup input 1121 */ 1122 typedef void (* GLFWjoystickfun)(int,int); 1123 1124 /*! @brief Video mode type. 1125 * 1126 * This describes a single video mode. 1127 * 1128 * @sa @ref monitor_modes 1129 * @sa glfwGetVideoMode glfwGetVideoModes 1130 * 1131 * @since Added in version 1.0. 1132 * @glfw3 Added refresh rate member. 1133 * 1134 * @ingroup monitor 1135 */ 1136 typedef struct GLFWvidmode 1137 { 1138 /*! The width, in screen coordinates, of the video mode. 1139 */ 1140 int width; 1141 /*! The height, in screen coordinates, of the video mode. 1142 */ 1143 int height; 1144 /*! The bit depth of the red channel of the video mode. 1145 */ 1146 int redBits; 1147 /*! The bit depth of the green channel of the video mode. 1148 */ 1149 int greenBits; 1150 /*! The bit depth of the blue channel of the video mode. 1151 */ 1152 int blueBits; 1153 /*! The refresh rate, in Hz, of the video mode. 1154 */ 1155 int refreshRate; 1156 } GLFWvidmode; 1157 1158 /*! @brief Gamma ramp. 1159 * 1160 * This describes the gamma ramp for a monitor. 1161 * 1162 * @sa @ref monitor_gamma 1163 * @sa glfwGetGammaRamp glfwSetGammaRamp 1164 * 1165 * @since Added in version 3.0. 1166 * 1167 * @ingroup monitor 1168 */ 1169 typedef struct GLFWgammaramp 1170 { 1171 /*! An array of value describing the response of the red channel. 1172 */ 1173 unsigned short* red; 1174 /*! An array of value describing the response of the green channel. 1175 */ 1176 unsigned short* green; 1177 /*! An array of value describing the response of the blue channel. 1178 */ 1179 unsigned short* blue; 1180 /*! The number of elements in each array. 1181 */ 1182 unsigned int size; 1183 } GLFWgammaramp; 1184 1185 /*! @brief Image data. 1186 * 1187 * @sa @ref cursor_custom 1188 * @sa @ref window_icon 1189 * 1190 * @since Added in version 2.1. 1191 * @glfw3 Removed format and bytes-per-pixel members. 1192 */ 1193 typedef struct GLFWimage 1194 { 1195 /*! The width, in pixels, of this image. 1196 */ 1197 int width; 1198 /*! The height, in pixels, of this image. 1199 */ 1200 int height; 1201 /*! The pixel data of this image, arranged left-to-right, top-to-bottom. 1202 */ 1203 unsigned char* pixels; 1204 } GLFWimage; 1205 1206 1207 /************************************************************************* 1208 * GLFW API functions 1209 *************************************************************************/ 1210 1211 /*! @brief Initializes the GLFW library. 1212 * 1213 * This function initializes the GLFW library. Before most GLFW functions can 1214 * be used, GLFW must be initialized, and before an application terminates GLFW 1215 * should be terminated in order to free any resources allocated during or 1216 * after initialization. 1217 * 1218 * If this function fails, it calls @ref glfwTerminate before returning. If it 1219 * succeeds, you should call @ref glfwTerminate before the application exits. 1220 * 1221 * Additional calls to this function after successful initialization but before 1222 * termination will return `GLFW_TRUE` immediately. 1223 * 1224 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an 1225 * [error](@ref error_handling) occurred. 1226 * 1227 * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. 1228 * 1229 * @remark @osx This function will change the current directory of the 1230 * application to the `Contents/Resources` subdirectory of the application's 1231 * bundle, if present. This can be disabled with a 1232 * [compile-time option](@ref compile_options_osx). 1233 * 1234 * @thread_safety This function must only be called from the main thread. 1235 * 1236 * @sa @ref intro_init 1237 * @sa glfwTerminate 1238 * 1239 * @since Added in version 1.0. 1240 * 1241 * @ingroup init 1242 */ 1243 GLFWAPI int glfwInit(void); 1244 1245 /*! @brief Terminates the GLFW library. 1246 * 1247 * This function destroys all remaining windows and cursors, restores any 1248 * modified gamma ramps and frees any other allocated resources. Once this 1249 * function is called, you must again call @ref glfwInit successfully before 1250 * you will be able to use most GLFW functions. 1251 * 1252 * If GLFW has been successfully initialized, this function should be called 1253 * before the application exits. If initialization fails, there is no need to 1254 * call this function, as it is called by @ref glfwInit before it returns 1255 * failure. 1256 * 1257 * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. 1258 * 1259 * @remark This function may be called before @ref glfwInit. 1260 * 1261 * @warning The contexts of any remaining windows must not be current on any 1262 * other thread when this function is called. 1263 * 1264 * @reentrancy This function must not be called from a callback. 1265 * 1266 * @thread_safety This function must only be called from the main thread. 1267 * 1268 * @sa @ref intro_init 1269 * @sa glfwInit 1270 * 1271 * @since Added in version 1.0. 1272 * 1273 * @ingroup init 1274 */ 1275 GLFWAPI void glfwTerminate(void); 1276 1277 /*! @brief Retrieves the version of the GLFW library. 1278 * 1279 * This function retrieves the major, minor and revision numbers of the GLFW 1280 * library. It is intended for when you are using GLFW as a shared library and 1281 * want to ensure that you are using the minimum required version. 1282 * 1283 * Any or all of the version arguments may be `NULL`. 1284 * 1285 * @param[out] major Where to store the major version number, or `NULL`. 1286 * @param[out] minor Where to store the minor version number, or `NULL`. 1287 * @param[out] rev Where to store the revision number, or `NULL`. 1288 * 1289 * @errors None. 1290 * 1291 * @remark This function may be called before @ref glfwInit. 1292 * 1293 * @thread_safety This function may be called from any thread. 1294 * 1295 * @sa @ref intro_version 1296 * @sa glfwGetVersionString 1297 * 1298 * @since Added in version 1.0. 1299 * 1300 * @ingroup init 1301 */ 1302 GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); 1303 1304 /*! @brief Returns a string describing the compile-time configuration. 1305 * 1306 * This function returns the compile-time generated 1307 * [version string](@ref intro_version_string) of the GLFW library binary. It 1308 * describes the version, platform, compiler and any platform-specific 1309 * compile-time options. It should not be confused with the OpenGL or OpenGL 1310 * ES version string, queried with `glGetString`. 1311 * 1312 * __Do not use the version string__ to parse the GLFW library version. The 1313 * @ref glfwGetVersion function provides the version of the running library 1314 * binary in numerical format. 1315 * 1316 * @return The ASCII encoded GLFW version string. 1317 * 1318 * @errors None. 1319 * 1320 * @remark This function may be called before @ref glfwInit. 1321 * 1322 * @pointer_lifetime The returned string is static and compile-time generated. 1323 * 1324 * @thread_safety This function may be called from any thread. 1325 * 1326 * @sa @ref intro_version 1327 * @sa glfwGetVersion 1328 * 1329 * @since Added in version 3.0. 1330 * 1331 * @ingroup init 1332 */ 1333 GLFWAPI const char* glfwGetVersionString(void); 1334 1335 /*! @brief Sets the error callback. 1336 * 1337 * This function sets the error callback, which is called with an error code 1338 * and a human-readable description each time a GLFW error occurs. 1339 * 1340 * The error callback is called on the thread where the error occurred. If you 1341 * are using GLFW from multiple threads, your error callback needs to be 1342 * written accordingly. 1343 * 1344 * Because the description string may have been generated specifically for that 1345 * error, it is not guaranteed to be valid after the callback has returned. If 1346 * you wish to use it after the callback returns, you need to make a copy. 1347 * 1348 * Once set, the error callback remains set even after the library has been 1349 * terminated. 1350 * 1351 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 1352 * callback. 1353 * @return The previously set callback, or `NULL` if no callback was set. 1354 * 1355 * @errors None. 1356 * 1357 * @remark This function may be called before @ref glfwInit. 1358 * 1359 * @thread_safety This function must only be called from the main thread. 1360 * 1361 * @sa @ref error_handling 1362 * 1363 * @since Added in version 3.0. 1364 * 1365 * @ingroup init 1366 */ 1367 GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); 1368 1369 /*! @brief Returns the currently connected monitors. 1370 * 1371 * This function returns an array of handles for all currently connected 1372 * monitors. The primary monitor is always first in the returned array. If no 1373 * monitors were found, this function returns `NULL`. 1374 * 1375 * @param[out] count Where to store the number of monitors in the returned 1376 * array. This is set to zero if an error occurred. 1377 * @return An array of monitor handles, or `NULL` if no monitors were found or 1378 * if an [error](@ref error_handling) occurred. 1379 * 1380 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1381 * 1382 * @pointer_lifetime The returned array is allocated and freed by GLFW. You 1383 * should not free it yourself. It is guaranteed to be valid only until the 1384 * monitor configuration changes or the library is terminated. 1385 * 1386 * @thread_safety This function must only be called from the main thread. 1387 * 1388 * @sa @ref monitor_monitors 1389 * @sa @ref monitor_event 1390 * @sa glfwGetPrimaryMonitor 1391 * 1392 * @since Added in version 3.0. 1393 * 1394 * @ingroup monitor 1395 */ 1396 GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); 1397 1398 /*! @brief Returns the primary monitor. 1399 * 1400 * This function returns the primary monitor. This is usually the monitor 1401 * where elements like the task bar or global menu bar are located. 1402 * 1403 * @return The primary monitor, or `NULL` if no monitors were found or if an 1404 * [error](@ref error_handling) occurred. 1405 * 1406 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1407 * 1408 * @thread_safety This function must only be called from the main thread. 1409 * 1410 * @remark The primary monitor is always first in the array returned by @ref 1411 * glfwGetMonitors. 1412 * 1413 * @sa @ref monitor_monitors 1414 * @sa glfwGetMonitors 1415 * 1416 * @since Added in version 3.0. 1417 * 1418 * @ingroup monitor 1419 */ 1420 GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); 1421 1422 /*! @brief Returns the position of the monitor's viewport on the virtual screen. 1423 * 1424 * This function returns the position, in screen coordinates, of the upper-left 1425 * corner of the specified monitor. 1426 * 1427 * Any or all of the position arguments may be `NULL`. If an error occurs, all 1428 * non-`NULL` position arguments will be set to zero. 1429 * 1430 * @param[in] monitor The monitor to query. 1431 * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. 1432 * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. 1433 * 1434 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1435 * GLFW_PLATFORM_ERROR. 1436 * 1437 * @thread_safety This function must only be called from the main thread. 1438 * 1439 * @sa @ref monitor_properties 1440 * 1441 * @since Added in version 3.0. 1442 * 1443 * @ingroup monitor 1444 */ 1445 GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); 1446 1447 /*! @brief Returns the physical size of the monitor. 1448 * 1449 * This function returns the size, in millimetres, of the display area of the 1450 * specified monitor. 1451 * 1452 * Some systems do not provide accurate monitor size information, either 1453 * because the monitor 1454 * [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) 1455 * data is incorrect or because the driver does not report it accurately. 1456 * 1457 * Any or all of the size arguments may be `NULL`. If an error occurs, all 1458 * non-`NULL` size arguments will be set to zero. 1459 * 1460 * @param[in] monitor The monitor to query. 1461 * @param[out] widthMM Where to store the width, in millimetres, of the 1462 * monitor's display area, or `NULL`. 1463 * @param[out] heightMM Where to store the height, in millimetres, of the 1464 * monitor's display area, or `NULL`. 1465 * 1466 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1467 * 1468 * @remark @win32 calculates the returned physical size from the 1469 * current resolution and system DPI instead of querying the monitor EDID data. 1470 * 1471 * @thread_safety This function must only be called from the main thread. 1472 * 1473 * @sa @ref monitor_properties 1474 * 1475 * @since Added in version 3.0. 1476 * 1477 * @ingroup monitor 1478 */ 1479 GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); 1480 1481 /*! @brief Returns the name of the specified monitor. 1482 * 1483 * This function returns a human-readable name, encoded as UTF-8, of the 1484 * specified monitor. The name typically reflects the make and model of the 1485 * monitor and is not guaranteed to be unique among the connected monitors. 1486 * 1487 * @param[in] monitor The monitor to query. 1488 * @return The UTF-8 encoded name of the monitor, or `NULL` if an 1489 * [error](@ref error_handling) occurred. 1490 * 1491 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1492 * 1493 * @pointer_lifetime The returned string is allocated and freed by GLFW. You 1494 * should not free it yourself. It is valid until the specified monitor is 1495 * disconnected or the library is terminated. 1496 * 1497 * @thread_safety This function must only be called from the main thread. 1498 * 1499 * @sa @ref monitor_properties 1500 * 1501 * @since Added in version 3.0. 1502 * 1503 * @ingroup monitor 1504 */ 1505 GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); 1506 1507 /*! @brief Sets the monitor configuration callback. 1508 * 1509 * This function sets the monitor configuration callback, or removes the 1510 * currently set callback. This is called when a monitor is connected to or 1511 * disconnected from the system. 1512 * 1513 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 1514 * callback. 1515 * @return The previously set callback, or `NULL` if no callback was set or the 1516 * library had not been [initialized](@ref intro_init). 1517 * 1518 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1519 * 1520 * @thread_safety This function must only be called from the main thread. 1521 * 1522 * @sa @ref monitor_event 1523 * 1524 * @since Added in version 3.0. 1525 * 1526 * @ingroup monitor 1527 */ 1528 GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); 1529 1530 /*! @brief Returns the available video modes for the specified monitor. 1531 * 1532 * This function returns an array of all video modes supported by the specified 1533 * monitor. The returned array is sorted in ascending order, first by color 1534 * bit depth (the sum of all channel depths) and then by resolution area (the 1535 * product of width and height). 1536 * 1537 * @param[in] monitor The monitor to query. 1538 * @param[out] count Where to store the number of video modes in the returned 1539 * array. This is set to zero if an error occurred. 1540 * @return An array of video modes, or `NULL` if an 1541 * [error](@ref error_handling) occurred. 1542 * 1543 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1544 * GLFW_PLATFORM_ERROR. 1545 * 1546 * @pointer_lifetime The returned array is allocated and freed by GLFW. You 1547 * should not free it yourself. It is valid until the specified monitor is 1548 * disconnected, this function is called again for that monitor or the library 1549 * is terminated. 1550 * 1551 * @thread_safety This function must only be called from the main thread. 1552 * 1553 * @sa @ref monitor_modes 1554 * @sa glfwGetVideoMode 1555 * 1556 * @since Added in version 1.0. 1557 * @glfw3 Changed to return an array of modes for a specific monitor. 1558 * 1559 * @ingroup monitor 1560 */ 1561 GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); 1562 1563 /*! @brief Returns the current mode of the specified monitor. 1564 * 1565 * This function returns the current video mode of the specified monitor. If 1566 * you have created a full screen window for that monitor, the return value 1567 * will depend on whether that window is iconified. 1568 * 1569 * @param[in] monitor The monitor to query. 1570 * @return The current mode of the monitor, or `NULL` if an 1571 * [error](@ref error_handling) occurred. 1572 * 1573 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1574 * GLFW_PLATFORM_ERROR. 1575 * 1576 * @pointer_lifetime The returned array is allocated and freed by GLFW. You 1577 * should not free it yourself. It is valid until the specified monitor is 1578 * disconnected or the library is terminated. 1579 * 1580 * @thread_safety This function must only be called from the main thread. 1581 * 1582 * @sa @ref monitor_modes 1583 * @sa glfwGetVideoModes 1584 * 1585 * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. 1586 * 1587 * @ingroup monitor 1588 */ 1589 GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); 1590 1591 /*! @brief Generates a gamma ramp and sets it for the specified monitor. 1592 * 1593 * This function generates a 256-element gamma ramp from the specified exponent 1594 * and then calls @ref glfwSetGammaRamp with it. The value must be a finite 1595 * number greater than zero. 1596 * 1597 * @param[in] monitor The monitor whose gamma ramp to set. 1598 * @param[in] gamma The desired exponent. 1599 * 1600 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 1601 * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. 1602 * 1603 * @thread_safety This function must only be called from the main thread. 1604 * 1605 * @sa @ref monitor_gamma 1606 * 1607 * @since Added in version 3.0. 1608 * 1609 * @ingroup monitor 1610 */ 1611 GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); 1612 1613 /*! @brief Returns the current gamma ramp for the specified monitor. 1614 * 1615 * This function returns the current gamma ramp of the specified monitor. 1616 * 1617 * @param[in] monitor The monitor to query. 1618 * @return The current gamma ramp, or `NULL` if an 1619 * [error](@ref error_handling) occurred. 1620 * 1621 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1622 * GLFW_PLATFORM_ERROR. 1623 * 1624 * @pointer_lifetime The returned structure and its arrays are allocated and 1625 * freed by GLFW. You should not free them yourself. They are valid until the 1626 * specified monitor is disconnected, this function is called again for that 1627 * monitor or the library is terminated. 1628 * 1629 * @thread_safety This function must only be called from the main thread. 1630 * 1631 * @sa @ref monitor_gamma 1632 * 1633 * @since Added in version 3.0. 1634 * 1635 * @ingroup monitor 1636 */ 1637 GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); 1638 1639 /*! @brief Sets the current gamma ramp for the specified monitor. 1640 * 1641 * This function sets the current gamma ramp for the specified monitor. The 1642 * original gamma ramp for that monitor is saved by GLFW the first time this 1643 * function is called and is restored by @ref glfwTerminate. 1644 * 1645 * @param[in] monitor The monitor whose gamma ramp to set. 1646 * @param[in] ramp The gamma ramp to use. 1647 * 1648 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1649 * GLFW_PLATFORM_ERROR. 1650 * 1651 * @remark Gamma ramp sizes other than 256 are not supported by all platforms 1652 * or graphics hardware. 1653 * 1654 * @remark @win32 The gamma ramp size must be 256. 1655 * 1656 * @pointer_lifetime The specified gamma ramp is copied before this function 1657 * returns. 1658 * 1659 * @thread_safety This function must only be called from the main thread. 1660 * 1661 * @sa @ref monitor_gamma 1662 * 1663 * @since Added in version 3.0. 1664 * 1665 * @ingroup monitor 1666 */ 1667 GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); 1668 1669 /*! @brief Resets all window hints to their default values. 1670 * 1671 * This function resets all window hints to their 1672 * [default values](@ref window_hints_values). 1673 * 1674 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1675 * 1676 * @thread_safety This function must only be called from the main thread. 1677 * 1678 * @sa @ref window_hints 1679 * @sa glfwWindowHint 1680 * 1681 * @since Added in version 3.0. 1682 * 1683 * @ingroup window 1684 */ 1685 GLFWAPI void glfwDefaultWindowHints(void); 1686 1687 /*! @brief Sets the specified window hint to the desired value. 1688 * 1689 * This function sets hints for the next call to @ref glfwCreateWindow. The 1690 * hints, once set, retain their values until changed by a call to @ref 1691 * glfwWindowHint or @ref glfwDefaultWindowHints, or until the library is 1692 * terminated. 1693 * 1694 * This function does not check whether the specified hint values are valid. 1695 * If you set hints to invalid values this will instead be reported by the next 1696 * call to @ref glfwCreateWindow. 1697 * 1698 * @param[in] hint The [window hint](@ref window_hints) to set. 1699 * @param[in] value The new value of the window hint. 1700 * 1701 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1702 * GLFW_INVALID_ENUM. 1703 * 1704 * @thread_safety This function must only be called from the main thread. 1705 * 1706 * @sa @ref window_hints 1707 * @sa glfwDefaultWindowHints 1708 * 1709 * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. 1710 * 1711 * @ingroup window 1712 */ 1713 GLFWAPI void glfwWindowHint(int hint, int value); 1714 1715 /*! @brief Creates a window and its associated context. 1716 * 1717 * This function creates a window and its associated OpenGL or OpenGL ES 1718 * context. Most of the options controlling how the window and its context 1719 * should be created are specified with [window hints](@ref window_hints). 1720 * 1721 * Successful creation does not change which context is current. Before you 1722 * can use the newly created context, you need to 1723 * [make it current](@ref context_current). For information about the `share` 1724 * parameter, see @ref context_sharing. 1725 * 1726 * The created window, framebuffer and context may differ from what you 1727 * requested, as not all parameters and hints are 1728 * [hard constraints](@ref window_hints_hard). This includes the size of the 1729 * window, especially for full screen windows. To query the actual attributes 1730 * of the created window, framebuffer and context, see @ref 1731 * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize. 1732 * 1733 * To create a full screen window, you need to specify the monitor the window 1734 * will cover. If no monitor is specified, the window will be windowed mode. 1735 * Unless you have a way for the user to choose a specific monitor, it is 1736 * recommended that you pick the primary monitor. For more information on how 1737 * to query connected monitors, see @ref monitor_monitors. 1738 * 1739 * For full screen windows, the specified size becomes the resolution of the 1740 * window's _desired video mode_. As long as a full screen window is not 1741 * iconified, the supported video mode most closely matching the desired video 1742 * mode is set for the specified monitor. For more information about full 1743 * screen windows, including the creation of so called _windowed full screen_ 1744 * or _borderless full screen_ windows, see @ref window_windowed_full_screen. 1745 * 1746 * Once you have created the window, you can switch it between windowed and 1747 * full screen mode with @ref glfwSetWindowMonitor. If the window has an 1748 * OpenGL or OpenGL ES context, it will be unaffected. 1749 * 1750 * By default, newly created windows use the placement recommended by the 1751 * window system. To create the window at a specific position, make it 1752 * initially invisible using the [GLFW_VISIBLE](@ref window_hints_wnd) window 1753 * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) 1754 * it. 1755 * 1756 * As long as at least one full screen window is not iconified, the screensaver 1757 * is prohibited from starting. 1758 * 1759 * Window systems put limits on window sizes. Very large or very small window 1760 * dimensions may be overridden by the window system on creation. Check the 1761 * actual [size](@ref window_size) after creation. 1762 * 1763 * The [swap interval](@ref buffer_swap) is not set during window creation and 1764 * the initial value may vary depending on driver settings and defaults. 1765 * 1766 * @param[in] width The desired width, in screen coordinates, of the window. 1767 * This must be greater than zero. 1768 * @param[in] height The desired height, in screen coordinates, of the window. 1769 * This must be greater than zero. 1770 * @param[in] title The initial, UTF-8 encoded window title. 1771 * @param[in] monitor The monitor to use for full screen mode, or `NULL` for 1772 * windowed mode. 1773 * @param[in] share The window whose context to share resources with, or `NULL` 1774 * to not share resources. 1775 * @return The handle of the created window, or `NULL` if an 1776 * [error](@ref error_handling) occurred. 1777 * 1778 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 1779 * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref 1780 * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE and @ref 1781 * GLFW_PLATFORM_ERROR. 1782 * 1783 * @remark @win32 Window creation will fail if the Microsoft GDI software 1784 * OpenGL implementation is the only one available. 1785 * 1786 * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it 1787 * will be set as the initial icon for the window. If no such icon is present, 1788 * the `IDI_WINLOGO` icon will be used instead. To set a different icon, see 1789 * @ref glfwSetWindowIcon. 1790 * 1791 * @remark @win32 The context to share resources with must not be current on 1792 * any other thread. 1793 * 1794 * @remark @osx The GLFW window has no icon, as it is not a document 1795 * window, but the dock icon will be the same as the application bundle's icon. 1796 * For more information on bundles, see the 1797 * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) 1798 * in the Mac Developer Library. 1799 * 1800 * @remark @osx The first time a window is created the menu bar is populated 1801 * with common commands like Hide, Quit and About. The About entry opens 1802 * a minimal about dialog with information from the application's bundle. The 1803 * menu bar can be disabled with a 1804 * [compile-time option](@ref compile_options_osx). 1805 * 1806 * @remark @osx On OS X 10.10 and later the window frame will not be rendered 1807 * at full resolution on Retina displays unless the `NSHighResolutionCapable` 1808 * key is enabled in the application bundle's `Info.plist`. For more 1809 * information, see 1810 * [High Resolution Guidelines for OS X](https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html) 1811 * in the Mac Developer Library. The GLFW test and example programs use 1812 * a custom `Info.plist` template for this, which can be found as 1813 * `CMake/MacOSXBundleInfo.plist.in` in the source tree. 1814 * 1815 * @remark @x11 Some window managers will not respect the placement of 1816 * initially hidden windows. 1817 * 1818 * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for 1819 * a window to reach its requested state. This means you may not be able to 1820 * query the final size, position or other attributes directly after window 1821 * creation. 1822 * 1823 * @reentrancy This function must not be called from a callback. 1824 * 1825 * @thread_safety This function must only be called from the main thread. 1826 * 1827 * @sa @ref window_creation 1828 * @sa glfwDestroyWindow 1829 * 1830 * @since Added in version 3.0. Replaces `glfwOpenWindow`. 1831 * 1832 * @ingroup window 1833 */ 1834 GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); 1835 1836 /*! @brief Destroys the specified window and its context. 1837 * 1838 * This function destroys the specified window and its context. On calling 1839 * this function, no further callbacks will be called for that window. 1840 * 1841 * If the context of the specified window is current on the main thread, it is 1842 * detached before being destroyed. 1843 * 1844 * @param[in] window The window to destroy. 1845 * 1846 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1847 * GLFW_PLATFORM_ERROR. 1848 * 1849 * @note The context of the specified window must not be current on any other 1850 * thread when this function is called. 1851 * 1852 * @reentrancy This function must not be called from a callback. 1853 * 1854 * @thread_safety This function must only be called from the main thread. 1855 * 1856 * @sa @ref window_creation 1857 * @sa glfwCreateWindow 1858 * 1859 * @since Added in version 3.0. Replaces `glfwCloseWindow`. 1860 * 1861 * @ingroup window 1862 */ 1863 GLFWAPI void glfwDestroyWindow(GLFWwindow* window); 1864 1865 /*! @brief Checks the close flag of the specified window. 1866 * 1867 * This function returns the value of the close flag of the specified window. 1868 * 1869 * @param[in] window The window to query. 1870 * @return The value of the close flag. 1871 * 1872 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1873 * 1874 * @thread_safety This function may be called from any thread. Access is not 1875 * synchronized. 1876 * 1877 * @sa @ref window_close 1878 * 1879 * @since Added in version 3.0. 1880 * 1881 * @ingroup window 1882 */ 1883 GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); 1884 1885 /*! @brief Sets the close flag of the specified window. 1886 * 1887 * This function sets the value of the close flag of the specified window. 1888 * This can be used to override the user's attempt to close the window, or 1889 * to signal that it should be closed. 1890 * 1891 * @param[in] window The window whose flag to change. 1892 * @param[in] value The new value. 1893 * 1894 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 1895 * 1896 * @thread_safety This function may be called from any thread. Access is not 1897 * synchronized. 1898 * 1899 * @sa @ref window_close 1900 * 1901 * @since Added in version 3.0. 1902 * 1903 * @ingroup window 1904 */ 1905 GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); 1906 1907 /*! @brief Sets the title of the specified window. 1908 * 1909 * This function sets the window title, encoded as UTF-8, of the specified 1910 * window. 1911 * 1912 * @param[in] window The window whose title to change. 1913 * @param[in] title The UTF-8 encoded window title. 1914 * 1915 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1916 * GLFW_PLATFORM_ERROR. 1917 * 1918 * @remark @osx The window title will not be updated until the next time you 1919 * process events. 1920 * 1921 * @thread_safety This function must only be called from the main thread. 1922 * 1923 * @sa @ref window_title 1924 * 1925 * @since Added in version 1.0. 1926 * @glfw3 Added window handle parameter. 1927 * 1928 * @ingroup window 1929 */ 1930 GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); 1931 1932 /*! @brief Sets the icon for the specified window. 1933 * 1934 * This function sets the icon of the specified window. If passed an array of 1935 * candidate images, those of or closest to the sizes desired by the system are 1936 * selected. If no images are specified, the window reverts to its default 1937 * icon. 1938 * 1939 * The desired image sizes varies depending on platform and system settings. 1940 * The selected images will be rescaled as needed. Good sizes include 16x16, 1941 * 32x32 and 48x48. 1942 * 1943 * @param[in] window The window whose icon to set. 1944 * @param[in] count The number of images in the specified array, or zero to 1945 * revert to the default window icon. 1946 * @param[in] images The images to create the icon from. This is ignored if 1947 * count is zero. 1948 * 1949 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1950 * GLFW_PLATFORM_ERROR. 1951 * 1952 * @pointer_lifetime The specified image data is copied before this function 1953 * returns. 1954 * 1955 * @remark @osx The GLFW window has no icon, as it is not a document 1956 * window, so this function does nothing. The dock icon will be the same as 1957 * the application bundle's icon. For more information on bundles, see the 1958 * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) 1959 * in the Mac Developer Library. 1960 * 1961 * @thread_safety This function must only be called from the main thread. 1962 * 1963 * @sa @ref window_icon 1964 * 1965 * @since Added in version 3.2. 1966 * 1967 * @ingroup window 1968 */ 1969 GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); 1970 1971 /*! @brief Retrieves the position of the client area of the specified window. 1972 * 1973 * This function retrieves the position, in screen coordinates, of the 1974 * upper-left corner of the client area of the specified window. 1975 * 1976 * Any or all of the position arguments may be `NULL`. If an error occurs, all 1977 * non-`NULL` position arguments will be set to zero. 1978 * 1979 * @param[in] window The window to query. 1980 * @param[out] xpos Where to store the x-coordinate of the upper-left corner of 1981 * the client area, or `NULL`. 1982 * @param[out] ypos Where to store the y-coordinate of the upper-left corner of 1983 * the client area, or `NULL`. 1984 * 1985 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 1986 * GLFW_PLATFORM_ERROR. 1987 * 1988 * @thread_safety This function must only be called from the main thread. 1989 * 1990 * @sa @ref window_pos 1991 * @sa glfwSetWindowPos 1992 * 1993 * @since Added in version 3.0. 1994 * 1995 * @ingroup window 1996 */ 1997 GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); 1998 1999 /*! @brief Sets the position of the client area of the specified window. 2000 * 2001 * This function sets the position, in screen coordinates, of the upper-left 2002 * corner of the client area of the specified windowed mode window. If the 2003 * window is a full screen window, this function does nothing. 2004 * 2005 * __Do not use this function__ to move an already visible window unless you 2006 * have very good reasons for doing so, as it will confuse and annoy the user. 2007 * 2008 * The window manager may put limits on what positions are allowed. GLFW 2009 * cannot and should not override these limits. 2010 * 2011 * @param[in] window The window to query. 2012 * @param[in] xpos The x-coordinate of the upper-left corner of the client area. 2013 * @param[in] ypos The y-coordinate of the upper-left corner of the client area. 2014 * 2015 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2016 * GLFW_PLATFORM_ERROR. 2017 * 2018 * @thread_safety This function must only be called from the main thread. 2019 * 2020 * @sa @ref window_pos 2021 * @sa glfwGetWindowPos 2022 * 2023 * @since Added in version 1.0. 2024 * @glfw3 Added window handle parameter. 2025 * 2026 * @ingroup window 2027 */ 2028 GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); 2029 2030 /*! @brief Retrieves the size of the client area of the specified window. 2031 * 2032 * This function retrieves the size, in screen coordinates, of the client area 2033 * of the specified window. If you wish to retrieve the size of the 2034 * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. 2035 * 2036 * Any or all of the size arguments may be `NULL`. If an error occurs, all 2037 * non-`NULL` size arguments will be set to zero. 2038 * 2039 * @param[in] window The window whose size to retrieve. 2040 * @param[out] width Where to store the width, in screen coordinates, of the 2041 * client area, or `NULL`. 2042 * @param[out] height Where to store the height, in screen coordinates, of the 2043 * client area, or `NULL`. 2044 * 2045 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2046 * GLFW_PLATFORM_ERROR. 2047 * 2048 * @thread_safety This function must only be called from the main thread. 2049 * 2050 * @sa @ref window_size 2051 * @sa glfwSetWindowSize 2052 * 2053 * @since Added in version 1.0. 2054 * @glfw3 Added window handle parameter. 2055 * 2056 * @ingroup window 2057 */ 2058 GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); 2059 2060 /*! @brief Sets the size limits of the specified window. 2061 * 2062 * This function sets the size limits of the client area of the specified 2063 * window. If the window is full screen, the size limits only take effect 2064 * once it is made windowed. If the window is not resizable, this function 2065 * does nothing. 2066 * 2067 * The size limits are applied immediately to a windowed mode window and may 2068 * cause it to be resized. 2069 * 2070 * The maximum dimensions must be greater than or equal to the minimum 2071 * dimensions and all must be greater than or equal to zero. 2072 * 2073 * @param[in] window The window to set limits for. 2074 * @param[in] minwidth The minimum width, in screen coordinates, of the client 2075 * area, or `GLFW_DONT_CARE`. 2076 * @param[in] minheight The minimum height, in screen coordinates, of the 2077 * client area, or `GLFW_DONT_CARE`. 2078 * @param[in] maxwidth The maximum width, in screen coordinates, of the client 2079 * area, or `GLFW_DONT_CARE`. 2080 * @param[in] maxheight The maximum height, in screen coordinates, of the 2081 * client area, or `GLFW_DONT_CARE`. 2082 * 2083 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 2084 * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. 2085 * 2086 * @remark If you set size limits and an aspect ratio that conflict, the 2087 * results are undefined. 2088 * 2089 * @thread_safety This function must only be called from the main thread. 2090 * 2091 * @sa @ref window_sizelimits 2092 * @sa glfwSetWindowAspectRatio 2093 * 2094 * @since Added in version 3.2. 2095 * 2096 * @ingroup window 2097 */ 2098 GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); 2099 2100 /*! @brief Sets the aspect ratio of the specified window. 2101 * 2102 * This function sets the required aspect ratio of the client area of the 2103 * specified window. If the window is full screen, the aspect ratio only takes 2104 * effect once it is made windowed. If the window is not resizable, this 2105 * function does nothing. 2106 * 2107 * The aspect ratio is specified as a numerator and a denominator and both 2108 * values must be greater than zero. For example, the common 16:9 aspect ratio 2109 * is specified as 16 and 9, respectively. 2110 * 2111 * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect 2112 * ratio limit is disabled. 2113 * 2114 * The aspect ratio is applied immediately to a windowed mode window and may 2115 * cause it to be resized. 2116 * 2117 * @param[in] window The window to set limits for. 2118 * @param[in] numer The numerator of the desired aspect ratio, or 2119 * `GLFW_DONT_CARE`. 2120 * @param[in] denom The denominator of the desired aspect ratio, or 2121 * `GLFW_DONT_CARE`. 2122 * 2123 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 2124 * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. 2125 * 2126 * @remark If you set size limits and an aspect ratio that conflict, the 2127 * results are undefined. 2128 * 2129 * @thread_safety This function must only be called from the main thread. 2130 * 2131 * @sa @ref window_sizelimits 2132 * @sa glfwSetWindowSizeLimits 2133 * 2134 * @since Added in version 3.2. 2135 * 2136 * @ingroup window 2137 */ 2138 GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); 2139 2140 /*! @brief Sets the size of the client area of the specified window. 2141 * 2142 * This function sets the size, in screen coordinates, of the client area of 2143 * the specified window. 2144 * 2145 * For full screen windows, this function updates the resolution of its desired 2146 * video mode and switches to the video mode closest to it, without affecting 2147 * the window's context. As the context is unaffected, the bit depths of the 2148 * framebuffer remain unchanged. 2149 * 2150 * If you wish to update the refresh rate of the desired video mode in addition 2151 * to its resolution, see @ref glfwSetWindowMonitor. 2152 * 2153 * The window manager may put limits on what sizes are allowed. GLFW cannot 2154 * and should not override these limits. 2155 * 2156 * @param[in] window The window to resize. 2157 * @param[in] width The desired width, in screen coordinates, of the window 2158 * client area. 2159 * @param[in] height The desired height, in screen coordinates, of the window 2160 * client area. 2161 * 2162 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2163 * GLFW_PLATFORM_ERROR. 2164 * 2165 * @thread_safety This function must only be called from the main thread. 2166 * 2167 * @sa @ref window_size 2168 * @sa glfwGetWindowSize 2169 * @sa glfwSetWindowMonitor 2170 * 2171 * @since Added in version 1.0. 2172 * @glfw3 Added window handle parameter. 2173 * 2174 * @ingroup window 2175 */ 2176 GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); 2177 2178 /*! @brief Retrieves the size of the framebuffer of the specified window. 2179 * 2180 * This function retrieves the size, in pixels, of the framebuffer of the 2181 * specified window. If you wish to retrieve the size of the window in screen 2182 * coordinates, see @ref glfwGetWindowSize. 2183 * 2184 * Any or all of the size arguments may be `NULL`. If an error occurs, all 2185 * non-`NULL` size arguments will be set to zero. 2186 * 2187 * @param[in] window The window whose framebuffer to query. 2188 * @param[out] width Where to store the width, in pixels, of the framebuffer, 2189 * or `NULL`. 2190 * @param[out] height Where to store the height, in pixels, of the framebuffer, 2191 * or `NULL`. 2192 * 2193 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2194 * GLFW_PLATFORM_ERROR. 2195 * 2196 * @thread_safety This function must only be called from the main thread. 2197 * 2198 * @sa @ref window_fbsize 2199 * @sa glfwSetFramebufferSizeCallback 2200 * 2201 * @since Added in version 3.0. 2202 * 2203 * @ingroup window 2204 */ 2205 GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); 2206 2207 /*! @brief Retrieves the size of the frame of the window. 2208 * 2209 * This function retrieves the size, in screen coordinates, of each edge of the 2210 * frame of the specified window. This size includes the title bar, if the 2211 * window has one. The size of the frame may vary depending on the 2212 * [window-related hints](@ref window_hints_wnd) used to create it. 2213 * 2214 * Because this function retrieves the size of each window frame edge and not 2215 * the offset along a particular coordinate axis, the retrieved values will 2216 * always be zero or positive. 2217 * 2218 * Any or all of the size arguments may be `NULL`. If an error occurs, all 2219 * non-`NULL` size arguments will be set to zero. 2220 * 2221 * @param[in] window The window whose frame size to query. 2222 * @param[out] left Where to store the size, in screen coordinates, of the left 2223 * edge of the window frame, or `NULL`. 2224 * @param[out] top Where to store the size, in screen coordinates, of the top 2225 * edge of the window frame, or `NULL`. 2226 * @param[out] right Where to store the size, in screen coordinates, of the 2227 * right edge of the window frame, or `NULL`. 2228 * @param[out] bottom Where to store the size, in screen coordinates, of the 2229 * bottom edge of the window frame, or `NULL`. 2230 * 2231 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2232 * GLFW_PLATFORM_ERROR. 2233 * 2234 * @thread_safety This function must only be called from the main thread. 2235 * 2236 * @sa @ref window_size 2237 * 2238 * @since Added in version 3.1. 2239 * 2240 * @ingroup window 2241 */ 2242 GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); 2243 2244 /*! @brief Iconifies the specified window. 2245 * 2246 * This function iconifies (minimizes) the specified window if it was 2247 * previously restored. If the window is already iconified, this function does 2248 * nothing. 2249 * 2250 * If the specified window is a full screen window, the original monitor 2251 * resolution is restored until the window is restored. 2252 * 2253 * @param[in] window The window to iconify. 2254 * 2255 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2256 * GLFW_PLATFORM_ERROR. 2257 * 2258 * @thread_safety This function must only be called from the main thread. 2259 * 2260 * @sa @ref window_iconify 2261 * @sa glfwRestoreWindow 2262 * @sa glfwMaximizeWindow 2263 * 2264 * @since Added in version 2.1. 2265 * @glfw3 Added window handle parameter. 2266 * 2267 * @ingroup window 2268 */ 2269 GLFWAPI void glfwIconifyWindow(GLFWwindow* window); 2270 2271 /*! @brief Restores the specified window. 2272 * 2273 * This function restores the specified window if it was previously iconified 2274 * (minimized) or maximized. If the window is already restored, this function 2275 * does nothing. 2276 * 2277 * If the specified window is a full screen window, the resolution chosen for 2278 * the window is restored on the selected monitor. 2279 * 2280 * @param[in] window The window to restore. 2281 * 2282 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2283 * GLFW_PLATFORM_ERROR. 2284 * 2285 * @thread_safety This function must only be called from the main thread. 2286 * 2287 * @sa @ref window_iconify 2288 * @sa glfwIconifyWindow 2289 * @sa glfwMaximizeWindow 2290 * 2291 * @since Added in version 2.1. 2292 * @glfw3 Added window handle parameter. 2293 * 2294 * @ingroup window 2295 */ 2296 GLFWAPI void glfwRestoreWindow(GLFWwindow* window); 2297 2298 /*! @brief Maximizes the specified window. 2299 * 2300 * This function maximizes the specified window if it was previously not 2301 * maximized. If the window is already maximized, this function does nothing. 2302 * 2303 * If the specified window is a full screen window, this function does nothing. 2304 * 2305 * @param[in] window The window to maximize. 2306 * 2307 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2308 * GLFW_PLATFORM_ERROR. 2309 * 2310 * @par Thread Safety 2311 * This function may only be called from the main thread. 2312 * 2313 * @sa @ref window_iconify 2314 * @sa glfwIconifyWindow 2315 * @sa glfwRestoreWindow 2316 * 2317 * @since Added in GLFW 3.2. 2318 * 2319 * @ingroup window 2320 */ 2321 GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); 2322 2323 /*! @brief Makes the specified window visible. 2324 * 2325 * This function makes the specified window visible if it was previously 2326 * hidden. If the window is already visible or is in full screen mode, this 2327 * function does nothing. 2328 * 2329 * @param[in] window The window to make visible. 2330 * 2331 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2332 * GLFW_PLATFORM_ERROR. 2333 * 2334 * @thread_safety This function must only be called from the main thread. 2335 * 2336 * @sa @ref window_hide 2337 * @sa glfwHideWindow 2338 * 2339 * @since Added in version 3.0. 2340 * 2341 * @ingroup window 2342 */ 2343 GLFWAPI void glfwShowWindow(GLFWwindow* window); 2344 2345 /*! @brief Hides the specified window. 2346 * 2347 * This function hides the specified window if it was previously visible. If 2348 * the window is already hidden or is in full screen mode, this function does 2349 * nothing. 2350 * 2351 * @param[in] window The window to hide. 2352 * 2353 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2354 * GLFW_PLATFORM_ERROR. 2355 * 2356 * @thread_safety This function must only be called from the main thread. 2357 * 2358 * @sa @ref window_hide 2359 * @sa glfwShowWindow 2360 * 2361 * @since Added in version 3.0. 2362 * 2363 * @ingroup window 2364 */ 2365 GLFWAPI void glfwHideWindow(GLFWwindow* window); 2366 2367 /*! @brief Brings the specified window to front and sets input focus. 2368 * 2369 * This function brings the specified window to front and sets input focus. 2370 * The window should already be visible and not iconified. 2371 * 2372 * By default, both windowed and full screen mode windows are focused when 2373 * initially created. Set the [GLFW_FOCUSED](@ref window_hints_wnd) to disable 2374 * this behavior. 2375 * 2376 * __Do not use this function__ to steal focus from other applications unless 2377 * you are certain that is what the user wants. Focus stealing can be 2378 * extremely disruptive. 2379 * 2380 * @param[in] window The window to give input focus. 2381 * 2382 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2383 * GLFW_PLATFORM_ERROR. 2384 * 2385 * @thread_safety This function must only be called from the main thread. 2386 * 2387 * @sa @ref window_focus 2388 * 2389 * @since Added in version 3.2. 2390 * 2391 * @ingroup window 2392 */ 2393 GLFWAPI void glfwFocusWindow(GLFWwindow* window); 2394 2395 /*! @brief Returns the monitor that the window uses for full screen mode. 2396 * 2397 * This function returns the handle of the monitor that the specified window is 2398 * in full screen on. 2399 * 2400 * @param[in] window The window to query. 2401 * @return The monitor, or `NULL` if the window is in windowed mode or an 2402 * [error](@ref error_handling) occurred. 2403 * 2404 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2405 * 2406 * @thread_safety This function must only be called from the main thread. 2407 * 2408 * @sa @ref window_monitor 2409 * @sa glfwSetWindowMonitor 2410 * 2411 * @since Added in version 3.0. 2412 * 2413 * @ingroup window 2414 */ 2415 GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); 2416 2417 /*! @brief Sets the mode, monitor, video mode and placement of a window. 2418 * 2419 * This function sets the monitor that the window uses for full screen mode or, 2420 * if the monitor is `NULL`, makes it windowed mode. 2421 * 2422 * When setting a monitor, this function updates the width, height and refresh 2423 * rate of the desired video mode and switches to the video mode closest to it. 2424 * The window position is ignored when setting a monitor. 2425 * 2426 * When the monitor is `NULL`, the position, width and height are used to 2427 * place the window client area. The refresh rate is ignored when no monitor 2428 * is specified. 2429 * 2430 * If you only wish to update the resolution of a full screen window or the 2431 * size of a windowed mode window, see @ref glfwSetWindowSize. 2432 * 2433 * When a window transitions from full screen to windowed mode, this function 2434 * restores any previous window settings such as whether it is decorated, 2435 * floating, resizable, has size or aspect ratio limits, etc.. 2436 * 2437 * @param[in] window The window whose monitor, size or video mode to set. 2438 * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. 2439 * @param[in] xpos The desired x-coordinate of the upper-left corner of the 2440 * client area. 2441 * @param[in] ypos The desired y-coordinate of the upper-left corner of the 2442 * client area. 2443 * @param[in] width The desired with, in screen coordinates, of the client area 2444 * or video mode. 2445 * @param[in] height The desired height, in screen coordinates, of the client 2446 * area or video mode. 2447 * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode, 2448 * or `GLFW_DONT_CARE`. 2449 * 2450 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2451 * GLFW_PLATFORM_ERROR. 2452 * 2453 * @thread_safety This function must only be called from the main thread. 2454 * 2455 * @sa @ref window_monitor 2456 * @sa @ref window_full_screen 2457 * @sa glfwGetWindowMonitor 2458 * @sa glfwSetWindowSize 2459 * 2460 * @since Added in version 3.2. 2461 * 2462 * @ingroup window 2463 */ 2464 GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); 2465 2466 /*! @brief Returns an attribute of the specified window. 2467 * 2468 * This function returns the value of an attribute of the specified window or 2469 * its OpenGL or OpenGL ES context. 2470 * 2471 * @param[in] window The window to query. 2472 * @param[in] attrib The [window attribute](@ref window_attribs) whose value to 2473 * return. 2474 * @return The value of the attribute, or zero if an 2475 * [error](@ref error_handling) occurred. 2476 * 2477 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 2478 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 2479 * 2480 * @remark Framebuffer related hints are not window attributes. See @ref 2481 * window_attribs_fb for more information. 2482 * 2483 * @remark Zero is a valid value for many window and context related 2484 * attributes so you cannot use a return value of zero as an indication of 2485 * errors. However, this function should not fail as long as it is passed 2486 * valid arguments and the library has been [initialized](@ref intro_init). 2487 * 2488 * @thread_safety This function must only be called from the main thread. 2489 * 2490 * @sa @ref window_attribs 2491 * 2492 * @since Added in version 3.0. Replaces `glfwGetWindowParam` and 2493 * `glfwGetGLVersion`. 2494 * 2495 * @ingroup window 2496 */ 2497 GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); 2498 2499 /*! @brief Sets the user pointer of the specified window. 2500 * 2501 * This function sets the user-defined pointer of the specified window. The 2502 * current value is retained until the window is destroyed. The initial value 2503 * is `NULL`. 2504 * 2505 * @param[in] window The window whose pointer to set. 2506 * @param[in] pointer The new value. 2507 * 2508 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2509 * 2510 * @thread_safety This function may be called from any thread. Access is not 2511 * synchronized. 2512 * 2513 * @sa @ref window_userptr 2514 * @sa glfwGetWindowUserPointer 2515 * 2516 * @since Added in version 3.0. 2517 * 2518 * @ingroup window 2519 */ 2520 GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); 2521 2522 /*! @brief Returns the user pointer of the specified window. 2523 * 2524 * This function returns the current value of the user-defined pointer of the 2525 * specified window. The initial value is `NULL`. 2526 * 2527 * @param[in] window The window whose pointer to return. 2528 * 2529 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2530 * 2531 * @thread_safety This function may be called from any thread. Access is not 2532 * synchronized. 2533 * 2534 * @sa @ref window_userptr 2535 * @sa glfwSetWindowUserPointer 2536 * 2537 * @since Added in version 3.0. 2538 * 2539 * @ingroup window 2540 */ 2541 GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); 2542 2543 /*! @brief Sets the position callback for the specified window. 2544 * 2545 * This function sets the position callback of the specified window, which is 2546 * called when the window is moved. The callback is provided with the screen 2547 * position of the upper-left corner of the client area of the window. 2548 * 2549 * @param[in] window The window whose callback to set. 2550 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2551 * callback. 2552 * @return The previously set callback, or `NULL` if no callback was set or the 2553 * library had not been [initialized](@ref intro_init). 2554 * 2555 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2556 * 2557 * @thread_safety This function must only be called from the main thread. 2558 * 2559 * @sa @ref window_pos 2560 * 2561 * @since Added in version 3.0. 2562 * 2563 * @ingroup window 2564 */ 2565 GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun cbfun); 2566 2567 /*! @brief Sets the size callback for the specified window. 2568 * 2569 * This function sets the size callback of the specified window, which is 2570 * called when the window is resized. The callback is provided with the size, 2571 * in screen coordinates, of the client area of the window. 2572 * 2573 * @param[in] window The window whose callback to set. 2574 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2575 * callback. 2576 * @return The previously set callback, or `NULL` if no callback was set or the 2577 * library had not been [initialized](@ref intro_init). 2578 * 2579 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2580 * 2581 * @thread_safety This function must only be called from the main thread. 2582 * 2583 * @sa @ref window_size 2584 * 2585 * @since Added in version 1.0. 2586 * @glfw3 Added window handle parameter and return value. 2587 * 2588 * @ingroup window 2589 */ 2590 GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun cbfun); 2591 2592 /*! @brief Sets the close callback for the specified window. 2593 * 2594 * This function sets the close callback of the specified window, which is 2595 * called when the user attempts to close the window, for example by clicking 2596 * the close widget in the title bar. 2597 * 2598 * The close flag is set before this callback is called, but you can modify it 2599 * at any time with @ref glfwSetWindowShouldClose. 2600 * 2601 * The close callback is not triggered by @ref glfwDestroyWindow. 2602 * 2603 * @param[in] window The window whose callback to set. 2604 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2605 * callback. 2606 * @return The previously set callback, or `NULL` if no callback was set or the 2607 * library had not been [initialized](@ref intro_init). 2608 * 2609 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2610 * 2611 * @remark @osx Selecting Quit from the application menu will trigger the close 2612 * callback for all windows. 2613 * 2614 * @thread_safety This function must only be called from the main thread. 2615 * 2616 * @sa @ref window_close 2617 * 2618 * @since Added in version 2.5. 2619 * @glfw3 Added window handle parameter and return value. 2620 * 2621 * @ingroup window 2622 */ 2623 GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun cbfun); 2624 2625 /*! @brief Sets the refresh callback for the specified window. 2626 * 2627 * This function sets the refresh callback of the specified window, which is 2628 * called when the client area of the window needs to be redrawn, for example 2629 * if the window has been exposed after having been covered by another window. 2630 * 2631 * On compositing window systems such as Aero, Compiz or Aqua, where the window 2632 * contents are saved off-screen, this callback may be called only very 2633 * infrequently or never at all. 2634 * 2635 * @param[in] window The window whose callback to set. 2636 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2637 * callback. 2638 * @return The previously set callback, or `NULL` if no callback was set or the 2639 * library had not been [initialized](@ref intro_init). 2640 * 2641 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2642 * 2643 * @thread_safety This function must only be called from the main thread. 2644 * 2645 * @sa @ref window_refresh 2646 * 2647 * @since Added in version 2.5. 2648 * @glfw3 Added window handle parameter and return value. 2649 * 2650 * @ingroup window 2651 */ 2652 GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun cbfun); 2653 2654 /*! @brief Sets the focus callback for the specified window. 2655 * 2656 * This function sets the focus callback of the specified window, which is 2657 * called when the window gains or loses input focus. 2658 * 2659 * After the focus callback is called for a window that lost input focus, 2660 * synthetic key and mouse button release events will be generated for all such 2661 * that had been pressed. For more information, see @ref glfwSetKeyCallback 2662 * and @ref glfwSetMouseButtonCallback. 2663 * 2664 * @param[in] window The window whose callback to set. 2665 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2666 * callback. 2667 * @return The previously set callback, or `NULL` if no callback was set or the 2668 * library had not been [initialized](@ref intro_init). 2669 * 2670 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2671 * 2672 * @thread_safety This function must only be called from the main thread. 2673 * 2674 * @sa @ref window_focus 2675 * 2676 * @since Added in version 3.0. 2677 * 2678 * @ingroup window 2679 */ 2680 GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun cbfun); 2681 2682 /*! @brief Sets the iconify callback for the specified window. 2683 * 2684 * This function sets the iconification callback of the specified window, which 2685 * is called when the window is iconified or restored. 2686 * 2687 * @param[in] window The window whose callback to set. 2688 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2689 * callback. 2690 * @return The previously set callback, or `NULL` if no callback was set or the 2691 * library had not been [initialized](@ref intro_init). 2692 * 2693 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2694 * 2695 * @thread_safety This function must only be called from the main thread. 2696 * 2697 * @sa @ref window_iconify 2698 * 2699 * @since Added in version 3.0. 2700 * 2701 * @ingroup window 2702 */ 2703 GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun cbfun); 2704 2705 /*! @brief Sets the framebuffer resize callback for the specified window. 2706 * 2707 * This function sets the framebuffer resize callback of the specified window, 2708 * which is called when the framebuffer of the specified window is resized. 2709 * 2710 * @param[in] window The window whose callback to set. 2711 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 2712 * callback. 2713 * @return The previously set callback, or `NULL` if no callback was set or the 2714 * library had not been [initialized](@ref intro_init). 2715 * 2716 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 2717 * 2718 * @thread_safety This function must only be called from the main thread. 2719 * 2720 * @sa @ref window_fbsize 2721 * 2722 * @since Added in version 3.0. 2723 * 2724 * @ingroup window 2725 */ 2726 GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun cbfun); 2727 2728 /*! @brief Processes all pending events. 2729 * 2730 * This function processes only those events that are already in the event 2731 * queue and then returns immediately. Processing events will cause the window 2732 * and input callbacks associated with those events to be called. 2733 * 2734 * On some platforms, a window move, resize or menu operation will cause event 2735 * processing to block. This is due to how event processing is designed on 2736 * those platforms. You can use the 2737 * [window refresh callback](@ref window_refresh) to redraw the contents of 2738 * your window when necessary during such operations. 2739 * 2740 * On some platforms, certain events are sent directly to the application 2741 * without going through the event queue, causing callbacks to be called 2742 * outside of a call to one of the event processing functions. 2743 * 2744 * Event processing is not required for joystick input to work. 2745 * 2746 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2747 * GLFW_PLATFORM_ERROR. 2748 * 2749 * @reentrancy This function must not be called from a callback. 2750 * 2751 * @thread_safety This function must only be called from the main thread. 2752 * 2753 * @sa @ref events 2754 * @sa glfwWaitEvents 2755 * @sa glfwWaitEventsTimeout 2756 * 2757 * @since Added in version 1.0. 2758 * 2759 * @ingroup window 2760 */ 2761 GLFWAPI void glfwPollEvents(void); 2762 2763 /*! @brief Waits until events are queued and processes them. 2764 * 2765 * This function puts the calling thread to sleep until at least one event is 2766 * available in the event queue. Once one or more events are available, 2767 * it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue 2768 * are processed and the function then returns immediately. Processing events 2769 * will cause the window and input callbacks associated with those events to be 2770 * called. 2771 * 2772 * Since not all events are associated with callbacks, this function may return 2773 * without a callback having been called even if you are monitoring all 2774 * callbacks. 2775 * 2776 * On some platforms, a window move, resize or menu operation will cause event 2777 * processing to block. This is due to how event processing is designed on 2778 * those platforms. You can use the 2779 * [window refresh callback](@ref window_refresh) to redraw the contents of 2780 * your window when necessary during such operations. 2781 * 2782 * On some platforms, certain callbacks may be called outside of a call to one 2783 * of the event processing functions. 2784 * 2785 * If no windows exist, this function returns immediately. For synchronization 2786 * of threads in applications that do not create windows, use your threading 2787 * library of choice. 2788 * 2789 * Event processing is not required for joystick input to work. 2790 * 2791 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2792 * GLFW_PLATFORM_ERROR. 2793 * 2794 * @reentrancy This function must not be called from a callback. 2795 * 2796 * @thread_safety This function must only be called from the main thread. 2797 * 2798 * @sa @ref events 2799 * @sa glfwPollEvents 2800 * @sa glfwWaitEventsTimeout 2801 * 2802 * @since Added in version 2.5. 2803 * 2804 * @ingroup window 2805 */ 2806 GLFWAPI void glfwWaitEvents(void); 2807 2808 /*! @brief Waits with timeout until events are queued and processes them. 2809 * 2810 * This function puts the calling thread to sleep until at least one event is 2811 * available in the event queue, or until the specified timeout is reached. If 2812 * one or more events are available, it behaves exactly like @ref 2813 * glfwPollEvents, i.e. the events in the queue are processed and the function 2814 * then returns immediately. Processing events will cause the window and input 2815 * callbacks associated with those events to be called. 2816 * 2817 * The timeout value must be a positive finite number. 2818 * 2819 * Since not all events are associated with callbacks, this function may return 2820 * without a callback having been called even if you are monitoring all 2821 * callbacks. 2822 * 2823 * On some platforms, a window move, resize or menu operation will cause event 2824 * processing to block. This is due to how event processing is designed on 2825 * those platforms. You can use the 2826 * [window refresh callback](@ref window_refresh) to redraw the contents of 2827 * your window when necessary during such operations. 2828 * 2829 * On some platforms, certain callbacks may be called outside of a call to one 2830 * of the event processing functions. 2831 * 2832 * If no windows exist, this function returns immediately. For synchronization 2833 * of threads in applications that do not create windows, use your threading 2834 * library of choice. 2835 * 2836 * Event processing is not required for joystick input to work. 2837 * 2838 * @param[in] timeout The maximum amount of time, in seconds, to wait. 2839 * 2840 * @reentrancy This function must not be called from a callback. 2841 * 2842 * @thread_safety This function must only be called from the main thread. 2843 * 2844 * @sa @ref events 2845 * @sa glfwPollEvents 2846 * @sa glfwWaitEvents 2847 * 2848 * @since Added in version 3.2. 2849 * 2850 * @ingroup window 2851 */ 2852 GLFWAPI void glfwWaitEventsTimeout(double timeout); 2853 2854 /*! @brief Posts an empty event to the event queue. 2855 * 2856 * This function posts an empty event from the current thread to the event 2857 * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return. 2858 * 2859 * If no windows exist, this function returns immediately. For synchronization 2860 * of threads in applications that do not create windows, use your threading 2861 * library of choice. 2862 * 2863 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2864 * GLFW_PLATFORM_ERROR. 2865 * 2866 * @thread_safety This function may be called from any thread. 2867 * 2868 * @sa @ref events 2869 * @sa glfwWaitEvents 2870 * @sa glfwWaitEventsTimeout 2871 * 2872 * @since Added in version 3.1. 2873 * 2874 * @ingroup window 2875 */ 2876 GLFWAPI void glfwPostEmptyEvent(void); 2877 2878 /*! @brief Returns the value of an input option for the specified window. 2879 * 2880 * This function returns the value of an input option for the specified window. 2881 * The mode must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or 2882 * `GLFW_STICKY_MOUSE_BUTTONS`. 2883 * 2884 * @param[in] window The window to query. 2885 * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or 2886 * `GLFW_STICKY_MOUSE_BUTTONS`. 2887 * 2888 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2889 * GLFW_INVALID_ENUM. 2890 * 2891 * @thread_safety This function must only be called from the main thread. 2892 * 2893 * @sa glfwSetInputMode 2894 * 2895 * @since Added in version 3.0. 2896 * 2897 * @ingroup input 2898 */ 2899 GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); 2900 2901 /*! @brief Sets an input option for the specified window. 2902 * 2903 * This function sets an input mode option for the specified window. The mode 2904 * must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or 2905 * `GLFW_STICKY_MOUSE_BUTTONS`. 2906 * 2907 * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor 2908 * modes: 2909 * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. 2910 * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the client 2911 * area of the window but does not restrict the cursor from leaving. 2912 * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual 2913 * and unlimited cursor movement. This is useful for implementing for 2914 * example 3D camera controls. 2915 * 2916 * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to 2917 * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are 2918 * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS` 2919 * the next time it is called even if the key had been released before the 2920 * call. This is useful when you are only interested in whether keys have been 2921 * pressed but not when or in which order. 2922 * 2923 * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either 2924 * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it. 2925 * If sticky mouse buttons are enabled, a mouse button press will ensure that 2926 * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even 2927 * if the mouse button had been released before the call. This is useful when 2928 * you are only interested in whether mouse buttons have been pressed but not 2929 * when or in which order. 2930 * 2931 * @param[in] window The window whose input mode to set. 2932 * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or 2933 * `GLFW_STICKY_MOUSE_BUTTONS`. 2934 * @param[in] value The new value of the specified input mode. 2935 * 2936 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 2937 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 2938 * 2939 * @thread_safety This function must only be called from the main thread. 2940 * 2941 * @sa glfwGetInputMode 2942 * 2943 * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. 2944 * 2945 * @ingroup input 2946 */ 2947 GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); 2948 2949 /*! @brief Returns the localized name of the specified printable key. 2950 * 2951 * This function returns the localized name of the specified printable key. 2952 * This is intended for displaying key bindings to the user. 2953 * 2954 * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used instead, otherwise 2955 * the scancode is ignored. If a non-printable key or (if the key is 2956 * `GLFW_KEY_UNKNOWN`) a scancode that maps to a non-printable key is 2957 * specified, this function returns `NULL`. 2958 * 2959 * This behavior allows you to pass in the arguments passed to the 2960 * [key callback](@ref input_key) without modification. 2961 * 2962 * The printable keys are: 2963 * - `GLFW_KEY_APOSTROPHE` 2964 * - `GLFW_KEY_COMMA` 2965 * - `GLFW_KEY_MINUS` 2966 * - `GLFW_KEY_PERIOD` 2967 * - `GLFW_KEY_SLASH` 2968 * - `GLFW_KEY_SEMICOLON` 2969 * - `GLFW_KEY_EQUAL` 2970 * - `GLFW_KEY_LEFT_BRACKET` 2971 * - `GLFW_KEY_RIGHT_BRACKET` 2972 * - `GLFW_KEY_BACKSLASH` 2973 * - `GLFW_KEY_WORLD_1` 2974 * - `GLFW_KEY_WORLD_2` 2975 * - `GLFW_KEY_0` to `GLFW_KEY_9` 2976 * - `GLFW_KEY_A` to `GLFW_KEY_Z` 2977 * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` 2978 * - `GLFW_KEY_KP_DECIMAL` 2979 * - `GLFW_KEY_KP_DIVIDE` 2980 * - `GLFW_KEY_KP_MULTIPLY` 2981 * - `GLFW_KEY_KP_SUBTRACT` 2982 * - `GLFW_KEY_KP_ADD` 2983 * - `GLFW_KEY_KP_EQUAL` 2984 * 2985 * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. 2986 * @param[in] scancode The scancode of the key to query. 2987 * @return The localized name of the key, or `NULL`. 2988 * 2989 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 2990 * GLFW_PLATFORM_ERROR. 2991 * 2992 * @pointer_lifetime The returned string is allocated and freed by GLFW. You 2993 * should not free it yourself. It is valid until the next call to @ref 2994 * glfwGetKeyName, or until the library is terminated. 2995 * 2996 * @thread_safety This function must only be called from the main thread. 2997 * 2998 * @sa @ref input_key_name 2999 * 3000 * @since Added in version 3.2. 3001 * 3002 * @ingroup input 3003 */ 3004 GLFWAPI const char* glfwGetKeyName(int key, int scancode); 3005 3006 /*! @brief Returns the last reported state of a keyboard key for the specified 3007 * window. 3008 * 3009 * This function returns the last state reported for the specified key to the 3010 * specified window. The returned state is one of `GLFW_PRESS` or 3011 * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to 3012 * the key callback. 3013 * 3014 * If the `GLFW_STICKY_KEYS` input mode is enabled, this function returns 3015 * `GLFW_PRESS` the first time you call it for a key that was pressed, even if 3016 * that key has already been released. 3017 * 3018 * The key functions deal with physical keys, with [key tokens](@ref keys) 3019 * named after their use on the standard US keyboard layout. If you want to 3020 * input text, use the Unicode character callback instead. 3021 * 3022 * The [modifier key bit masks](@ref mods) are not key tokens and cannot be 3023 * used with this function. 3024 * 3025 * __Do not use this function__ to implement [text input](@ref input_char). 3026 * 3027 * @param[in] window The desired window. 3028 * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is 3029 * not a valid key for this function. 3030 * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. 3031 * 3032 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3033 * GLFW_INVALID_ENUM. 3034 * 3035 * @thread_safety This function must only be called from the main thread. 3036 * 3037 * @sa @ref input_key 3038 * 3039 * @since Added in version 1.0. 3040 * @glfw3 Added window handle parameter. 3041 * 3042 * @ingroup input 3043 */ 3044 GLFWAPI int glfwGetKey(GLFWwindow* window, int key); 3045 3046 /*! @brief Returns the last reported state of a mouse button for the specified 3047 * window. 3048 * 3049 * This function returns the last state reported for the specified mouse button 3050 * to the specified window. The returned state is one of `GLFW_PRESS` or 3051 * `GLFW_RELEASE`. 3052 * 3053 * If the `GLFW_STICKY_MOUSE_BUTTONS` input mode is enabled, this function 3054 * `GLFW_PRESS` the first time you call it for a mouse button that was pressed, 3055 * even if that mouse button has already been released. 3056 * 3057 * @param[in] window The desired window. 3058 * @param[in] button The desired [mouse button](@ref buttons). 3059 * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. 3060 * 3061 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3062 * GLFW_INVALID_ENUM. 3063 * 3064 * @thread_safety This function must only be called from the main thread. 3065 * 3066 * @sa @ref input_mouse_button 3067 * 3068 * @since Added in version 1.0. 3069 * @glfw3 Added window handle parameter. 3070 * 3071 * @ingroup input 3072 */ 3073 GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); 3074 3075 /*! @brief Retrieves the position of the cursor relative to the client area of 3076 * the window. 3077 * 3078 * This function returns the position of the cursor, in screen coordinates, 3079 * relative to the upper-left corner of the client area of the specified 3080 * window. 3081 * 3082 * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor 3083 * position is unbounded and limited only by the minimum and maximum values of 3084 * a `double`. 3085 * 3086 * The coordinate can be converted to their integer equivalents with the 3087 * `floor` function. Casting directly to an integer type works for positive 3088 * coordinates, but fails for negative ones. 3089 * 3090 * Any or all of the position arguments may be `NULL`. If an error occurs, all 3091 * non-`NULL` position arguments will be set to zero. 3092 * 3093 * @param[in] window The desired window. 3094 * @param[out] xpos Where to store the cursor x-coordinate, relative to the 3095 * left edge of the client area, or `NULL`. 3096 * @param[out] ypos Where to store the cursor y-coordinate, relative to the to 3097 * top edge of the client area, or `NULL`. 3098 * 3099 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3100 * GLFW_PLATFORM_ERROR. 3101 * 3102 * @thread_safety This function must only be called from the main thread. 3103 * 3104 * @sa @ref cursor_pos 3105 * @sa glfwSetCursorPos 3106 * 3107 * @since Added in version 3.0. Replaces `glfwGetMousePos`. 3108 * 3109 * @ingroup input 3110 */ 3111 GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); 3112 3113 /*! @brief Sets the position of the cursor, relative to the client area of the 3114 * window. 3115 * 3116 * This function sets the position, in screen coordinates, of the cursor 3117 * relative to the upper-left corner of the client area of the specified 3118 * window. The window must have input focus. If the window does not have 3119 * input focus when this function is called, it fails silently. 3120 * 3121 * __Do not use this function__ to implement things like camera controls. GLFW 3122 * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the 3123 * cursor, transparently re-centers it and provides unconstrained cursor 3124 * motion. See @ref glfwSetInputMode for more information. 3125 * 3126 * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is 3127 * unconstrained and limited only by the minimum and maximum values of 3128 * a `double`. 3129 * 3130 * @param[in] window The desired window. 3131 * @param[in] xpos The desired x-coordinate, relative to the left edge of the 3132 * client area. 3133 * @param[in] ypos The desired y-coordinate, relative to the top edge of the 3134 * client area. 3135 * 3136 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3137 * GLFW_PLATFORM_ERROR. 3138 * 3139 * @thread_safety This function must only be called from the main thread. 3140 * 3141 * @sa @ref cursor_pos 3142 * @sa glfwGetCursorPos 3143 * 3144 * @since Added in version 3.0. Replaces `glfwSetMousePos`. 3145 * 3146 * @ingroup input 3147 */ 3148 GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); 3149 3150 /*! @brief Creates a custom cursor. 3151 * 3152 * Creates a new custom cursor image that can be set for a window with @ref 3153 * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor. 3154 * Any remaining cursors are destroyed by @ref glfwTerminate. 3155 * 3156 * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight 3157 * bits per channel. They are arranged canonically as packed sequential rows, 3158 * starting from the top-left corner. 3159 * 3160 * The cursor hotspot is specified in pixels, relative to the upper-left corner 3161 * of the cursor image. Like all other coordinate systems in GLFW, the X-axis 3162 * points to the right and the Y-axis points down. 3163 * 3164 * @param[in] image The desired cursor image. 3165 * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. 3166 * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. 3167 * @return The handle of the created cursor, or `NULL` if an 3168 * [error](@ref error_handling) occurred. 3169 * 3170 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3171 * GLFW_PLATFORM_ERROR. 3172 * 3173 * @pointer_lifetime The specified image data is copied before this function 3174 * returns. 3175 * 3176 * @reentrancy This function must not be called from a callback. 3177 * 3178 * @thread_safety This function must only be called from the main thread. 3179 * 3180 * @sa @ref cursor_object 3181 * @sa glfwDestroyCursor 3182 * @sa glfwCreateStandardCursor 3183 * 3184 * @since Added in version 3.1. 3185 * 3186 * @ingroup input 3187 */ 3188 GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot); 3189 3190 /*! @brief Creates a cursor with a standard shape. 3191 * 3192 * Returns a cursor with a [standard shape](@ref shapes), that can be set for 3193 * a window with @ref glfwSetCursor. 3194 * 3195 * @param[in] shape One of the [standard shapes](@ref shapes). 3196 * @return A new cursor ready to use or `NULL` if an 3197 * [error](@ref error_handling) occurred. 3198 * 3199 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3200 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 3201 * 3202 * @reentrancy This function must not be called from a callback. 3203 * 3204 * @thread_safety This function must only be called from the main thread. 3205 * 3206 * @sa @ref cursor_object 3207 * @sa glfwCreateCursor 3208 * 3209 * @since Added in version 3.1. 3210 * 3211 * @ingroup input 3212 */ 3213 GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); 3214 3215 /*! @brief Destroys a cursor. 3216 * 3217 * This function destroys a cursor previously created with @ref 3218 * glfwCreateCursor. Any remaining cursors will be destroyed by @ref 3219 * glfwTerminate. 3220 * 3221 * @param[in] cursor The cursor object to destroy. 3222 * 3223 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3224 * GLFW_PLATFORM_ERROR. 3225 * 3226 * @reentrancy This function must not be called from a callback. 3227 * 3228 * @thread_safety This function must only be called from the main thread. 3229 * 3230 * @sa @ref cursor_object 3231 * @sa glfwCreateCursor 3232 * 3233 * @since Added in version 3.1. 3234 * 3235 * @ingroup input 3236 */ 3237 GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); 3238 3239 /*! @brief Sets the cursor for the window. 3240 * 3241 * This function sets the cursor image to be used when the cursor is over the 3242 * client area of the specified window. The set cursor will only be visible 3243 * when the [cursor mode](@ref cursor_mode) of the window is 3244 * `GLFW_CURSOR_NORMAL`. 3245 * 3246 * On some platforms, the set cursor may not be visible unless the window also 3247 * has input focus. 3248 * 3249 * @param[in] window The window to set the cursor for. 3250 * @param[in] cursor The cursor to set, or `NULL` to switch back to the default 3251 * arrow cursor. 3252 * 3253 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3254 * GLFW_PLATFORM_ERROR. 3255 * 3256 * @thread_safety This function must only be called from the main thread. 3257 * 3258 * @sa @ref cursor_object 3259 * 3260 * @since Added in version 3.1. 3261 * 3262 * @ingroup input 3263 */ 3264 GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); 3265 3266 /*! @brief Sets the key callback. 3267 * 3268 * This function sets the key callback of the specified window, which is called 3269 * when a key is pressed, repeated or released. 3270 * 3271 * The key functions deal with physical keys, with layout independent 3272 * [key tokens](@ref keys) named after their values in the standard US keyboard 3273 * layout. If you want to input text, use the 3274 * [character callback](@ref glfwSetCharCallback) instead. 3275 * 3276 * When a window loses input focus, it will generate synthetic key release 3277 * events for all pressed keys. You can tell these events from user-generated 3278 * events by the fact that the synthetic ones are generated after the focus 3279 * loss event has been processed, i.e. after the 3280 * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. 3281 * 3282 * The scancode of a key is specific to that platform or sometimes even to that 3283 * machine. Scancodes are intended to allow users to bind keys that don't have 3284 * a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their 3285 * state is not saved and so it cannot be queried with @ref glfwGetKey. 3286 * 3287 * Sometimes GLFW needs to generate synthetic key events, in which case the 3288 * scancode may be zero. 3289 * 3290 * @param[in] window The window whose callback to set. 3291 * @param[in] cbfun The new key callback, or `NULL` to remove the currently 3292 * set callback. 3293 * @return The previously set callback, or `NULL` if no callback was set or the 3294 * library had not been [initialized](@ref intro_init). 3295 * 3296 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3297 * 3298 * @thread_safety This function must only be called from the main thread. 3299 * 3300 * @sa @ref input_key 3301 * 3302 * @since Added in version 1.0. 3303 * @glfw3 Added window handle parameter and return value. 3304 * 3305 * @ingroup input 3306 */ 3307 GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); 3308 3309 /*! @brief Sets the Unicode character callback. 3310 * 3311 * This function sets the character callback of the specified window, which is 3312 * called when a Unicode character is input. 3313 * 3314 * The character callback is intended for Unicode text input. As it deals with 3315 * characters, it is keyboard layout dependent, whereas the 3316 * [key callback](@ref glfwSetKeyCallback) is not. Characters do not map 1:1 3317 * to physical keys, as a key may produce zero, one or more characters. If you 3318 * want to know whether a specific physical key was pressed or released, see 3319 * the key callback instead. 3320 * 3321 * The character callback behaves as system text input normally does and will 3322 * not be called if modifier keys are held down that would prevent normal text 3323 * input on that platform, for example a Super (Command) key on OS X or Alt key 3324 * on Windows. There is a 3325 * [character with modifiers callback](@ref glfwSetCharModsCallback) that 3326 * receives these events. 3327 * 3328 * @param[in] window The window whose callback to set. 3329 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 3330 * callback. 3331 * @return The previously set callback, or `NULL` if no callback was set or the 3332 * library had not been [initialized](@ref intro_init). 3333 * 3334 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3335 * 3336 * @thread_safety This function must only be called from the main thread. 3337 * 3338 * @sa @ref input_char 3339 * 3340 * @since Added in version 2.4. 3341 * @glfw3 Added window handle parameter and return value. 3342 * 3343 * @ingroup input 3344 */ 3345 GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); 3346 3347 /*! @brief Sets the Unicode character with modifiers callback. 3348 * 3349 * This function sets the character with modifiers callback of the specified 3350 * window, which is called when a Unicode character is input regardless of what 3351 * modifier keys are used. 3352 * 3353 * The character with modifiers callback is intended for implementing custom 3354 * Unicode character input. For regular Unicode text input, see the 3355 * [character callback](@ref glfwSetCharCallback). Like the character 3356 * callback, the character with modifiers callback deals with characters and is 3357 * keyboard layout dependent. Characters do not map 1:1 to physical keys, as 3358 * a key may produce zero, one or more characters. If you want to know whether 3359 * a specific physical key was pressed or released, see the 3360 * [key callback](@ref glfwSetKeyCallback) instead. 3361 * 3362 * @param[in] window The window whose callback to set. 3363 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 3364 * callback. 3365 * @return The previously set callback, or `NULL` if no callback was set or an 3366 * [error](@ref error_handling) occurred. 3367 * 3368 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3369 * 3370 * @thread_safety This function must only be called from the main thread. 3371 * 3372 * @sa @ref input_char 3373 * 3374 * @since Added in version 3.1. 3375 * 3376 * @ingroup input 3377 */ 3378 GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun cbfun); 3379 3380 /*! @brief Sets the mouse button callback. 3381 * 3382 * This function sets the mouse button callback of the specified window, which 3383 * is called when a mouse button is pressed or released. 3384 * 3385 * When a window loses input focus, it will generate synthetic mouse button 3386 * release events for all pressed mouse buttons. You can tell these events 3387 * from user-generated events by the fact that the synthetic ones are generated 3388 * after the focus loss event has been processed, i.e. after the 3389 * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. 3390 * 3391 * @param[in] window The window whose callback to set. 3392 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 3393 * callback. 3394 * @return The previously set callback, or `NULL` if no callback was set or the 3395 * library had not been [initialized](@ref intro_init). 3396 * 3397 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3398 * 3399 * @thread_safety This function must only be called from the main thread. 3400 * 3401 * @sa @ref input_mouse_button 3402 * 3403 * @since Added in version 1.0. 3404 * @glfw3 Added window handle parameter and return value. 3405 * 3406 * @ingroup input 3407 */ 3408 GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun cbfun); 3409 3410 /*! @brief Sets the cursor position callback. 3411 * 3412 * This function sets the cursor position callback of the specified window, 3413 * which is called when the cursor is moved. The callback is provided with the 3414 * position, in screen coordinates, relative to the upper-left corner of the 3415 * client area of the window. 3416 * 3417 * @param[in] window The window whose callback to set. 3418 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 3419 * callback. 3420 * @return The previously set callback, or `NULL` if no callback was set or the 3421 * library had not been [initialized](@ref intro_init). 3422 * 3423 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3424 * 3425 * @thread_safety This function must only be called from the main thread. 3426 * 3427 * @sa @ref cursor_pos 3428 * 3429 * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`. 3430 * 3431 * @ingroup input 3432 */ 3433 GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun cbfun); 3434 3435 /*! @brief Sets the cursor enter/exit callback. 3436 * 3437 * This function sets the cursor boundary crossing callback of the specified 3438 * window, which is called when the cursor enters or leaves the client area of 3439 * the window. 3440 * 3441 * @param[in] window The window whose callback to set. 3442 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 3443 * callback. 3444 * @return The previously set callback, or `NULL` if no callback was set or the 3445 * library had not been [initialized](@ref intro_init). 3446 * 3447 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3448 * 3449 * @thread_safety This function must only be called from the main thread. 3450 * 3451 * @sa @ref cursor_enter 3452 * 3453 * @since Added in version 3.0. 3454 * 3455 * @ingroup input 3456 */ 3457 GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun cbfun); 3458 3459 /*! @brief Sets the scroll callback. 3460 * 3461 * This function sets the scroll callback of the specified window, which is 3462 * called when a scrolling device is used, such as a mouse wheel or scrolling 3463 * area of a touchpad. 3464 * 3465 * The scroll callback receives all scrolling input, like that from a mouse 3466 * wheel or a touchpad scrolling area. 3467 * 3468 * @param[in] window The window whose callback to set. 3469 * @param[in] cbfun The new scroll callback, or `NULL` to remove the currently 3470 * set callback. 3471 * @return The previously set callback, or `NULL` if no callback was set or the 3472 * library had not been [initialized](@ref intro_init). 3473 * 3474 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3475 * 3476 * @thread_safety This function must only be called from the main thread. 3477 * 3478 * @sa @ref scrolling 3479 * 3480 * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. 3481 * 3482 * @ingroup input 3483 */ 3484 GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cbfun); 3485 3486 /*! @brief Sets the file drop callback. 3487 * 3488 * This function sets the file drop callback of the specified window, which is 3489 * called when one or more dragged files are dropped on the window. 3490 * 3491 * Because the path array and its strings may have been generated specifically 3492 * for that event, they are not guaranteed to be valid after the callback has 3493 * returned. If you wish to use them after the callback returns, you need to 3494 * make a deep copy. 3495 * 3496 * @param[in] window The window whose callback to set. 3497 * @param[in] cbfun The new file drop callback, or `NULL` to remove the 3498 * currently set callback. 3499 * @return The previously set callback, or `NULL` if no callback was set or the 3500 * library had not been [initialized](@ref intro_init). 3501 * 3502 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3503 * 3504 * @thread_safety This function must only be called from the main thread. 3505 * 3506 * @sa @ref path_drop 3507 * 3508 * @since Added in version 3.1. 3509 * 3510 * @ingroup input 3511 */ 3512 GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun); 3513 3514 /*! @brief Returns whether the specified joystick is present. 3515 * 3516 * This function returns whether the specified joystick is present. 3517 * 3518 * @param[in] joy The [joystick](@ref joysticks) to query. 3519 * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. 3520 * 3521 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3522 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 3523 * 3524 * @thread_safety This function must only be called from the main thread. 3525 * 3526 * @sa @ref joystick 3527 * 3528 * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. 3529 * 3530 * @ingroup input 3531 */ 3532 GLFWAPI int glfwJoystickPresent(int joy); 3533 3534 /*! @brief Returns the values of all axes of the specified joystick. 3535 * 3536 * This function returns the values of all axes of the specified joystick. 3537 * Each element in the array is a value between -1.0 and 1.0. 3538 * 3539 * Querying a joystick slot with no device present is not an error, but will 3540 * cause this function to return `NULL`. Call @ref glfwJoystickPresent to 3541 * check device presence. 3542 * 3543 * @param[in] joy The [joystick](@ref joysticks) to query. 3544 * @param[out] count Where to store the number of axis values in the returned 3545 * array. This is set to zero if the joystick is not present or an error 3546 * occurred. 3547 * @return An array of axis values, or `NULL` if the joystick is not present or 3548 * an [error](@ref error_handling) occurred. 3549 * 3550 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3551 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 3552 * 3553 * @pointer_lifetime The returned array is allocated and freed by GLFW. You 3554 * should not free it yourself. It is valid until the specified joystick is 3555 * disconnected, this function is called again for that joystick or the library 3556 * is terminated. 3557 * 3558 * @thread_safety This function must only be called from the main thread. 3559 * 3560 * @sa @ref joystick_axis 3561 * 3562 * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. 3563 * 3564 * @ingroup input 3565 */ 3566 GLFWAPI const float* glfwGetJoystickAxes(int joy, int* count); 3567 3568 /*! @brief Returns the state of all buttons of the specified joystick. 3569 * 3570 * This function returns the state of all buttons of the specified joystick. 3571 * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. 3572 * 3573 * Querying a joystick slot with no device present is not an error, but will 3574 * cause this function to return `NULL`. Call @ref glfwJoystickPresent to 3575 * check device presence. 3576 * 3577 * @param[in] joy The [joystick](@ref joysticks) to query. 3578 * @param[out] count Where to store the number of button states in the returned 3579 * array. This is set to zero if the joystick is not present or an error 3580 * occurred. 3581 * @return An array of button states, or `NULL` if the joystick is not present 3582 * or an [error](@ref error_handling) occurred. 3583 * 3584 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3585 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 3586 * 3587 * @pointer_lifetime The returned array is allocated and freed by GLFW. You 3588 * should not free it yourself. It is valid until the specified joystick is 3589 * disconnected, this function is called again for that joystick or the library 3590 * is terminated. 3591 * 3592 * @thread_safety This function must only be called from the main thread. 3593 * 3594 * @sa @ref joystick_button 3595 * 3596 * @since Added in version 2.2. 3597 * @glfw3 Changed to return a dynamic array. 3598 * 3599 * @ingroup input 3600 */ 3601 GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count); 3602 3603 /*! @brief Returns the name of the specified joystick. 3604 * 3605 * This function returns the name, encoded as UTF-8, of the specified joystick. 3606 * The returned string is allocated and freed by GLFW. You should not free it 3607 * yourself. 3608 * 3609 * Querying a joystick slot with no device present is not an error, but will 3610 * cause this function to return `NULL`. Call @ref glfwJoystickPresent to 3611 * check device presence. 3612 * 3613 * @param[in] joy The [joystick](@ref joysticks) to query. 3614 * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick 3615 * is not present or an [error](@ref error_handling) occurred. 3616 * 3617 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3618 * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. 3619 * 3620 * @pointer_lifetime The returned string is allocated and freed by GLFW. You 3621 * should not free it yourself. It is valid until the specified joystick is 3622 * disconnected, this function is called again for that joystick or the library 3623 * is terminated. 3624 * 3625 * @thread_safety This function must only be called from the main thread. 3626 * 3627 * @sa @ref joystick_name 3628 * 3629 * @since Added in version 3.0. 3630 * 3631 * @ingroup input 3632 */ 3633 GLFWAPI const char* glfwGetJoystickName(int joy); 3634 3635 /*! @brief Sets the joystick configuration callback. 3636 * 3637 * This function sets the joystick configuration callback, or removes the 3638 * currently set callback. This is called when a joystick is connected to or 3639 * disconnected from the system. 3640 * 3641 * @param[in] cbfun The new callback, or `NULL` to remove the currently set 3642 * callback. 3643 * @return The previously set callback, or `NULL` if no callback was set or the 3644 * library had not been [initialized](@ref intro_init). 3645 * 3646 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3647 * 3648 * @thread_safety This function must only be called from the main thread. 3649 * 3650 * @sa @ref joystick_event 3651 * 3652 * @since Added in version 3.2. 3653 * 3654 * @ingroup input 3655 */ 3656 GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun); 3657 3658 /*! @brief Sets the clipboard to the specified string. 3659 * 3660 * This function sets the system clipboard to the specified, UTF-8 encoded 3661 * string. 3662 * 3663 * @param[in] window The window that will own the clipboard contents. 3664 * @param[in] string A UTF-8 encoded string. 3665 * 3666 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3667 * GLFW_PLATFORM_ERROR. 3668 * 3669 * @pointer_lifetime The specified string is copied before this function 3670 * returns. 3671 * 3672 * @thread_safety This function must only be called from the main thread. 3673 * 3674 * @sa @ref clipboard 3675 * @sa glfwGetClipboardString 3676 * 3677 * @since Added in version 3.0. 3678 * 3679 * @ingroup input 3680 */ 3681 GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); 3682 3683 /*! @brief Returns the contents of the clipboard as a string. 3684 * 3685 * This function returns the contents of the system clipboard, if it contains 3686 * or is convertible to a UTF-8 encoded string. If the clipboard is empty or 3687 * if its contents cannot be converted, `NULL` is returned and a @ref 3688 * GLFW_FORMAT_UNAVAILABLE error is generated. 3689 * 3690 * @param[in] window The window that will request the clipboard contents. 3691 * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` 3692 * if an [error](@ref error_handling) occurred. 3693 * 3694 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3695 * GLFW_PLATFORM_ERROR. 3696 * 3697 * @pointer_lifetime The returned string is allocated and freed by GLFW. You 3698 * should not free it yourself. It is valid until the next call to @ref 3699 * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library 3700 * is terminated. 3701 * 3702 * @thread_safety This function must only be called from the main thread. 3703 * 3704 * @sa @ref clipboard 3705 * @sa glfwSetClipboardString 3706 * 3707 * @since Added in version 3.0. 3708 * 3709 * @ingroup input 3710 */ 3711 GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); 3712 3713 /*! @brief Returns the value of the GLFW timer. 3714 * 3715 * This function returns the value of the GLFW timer. Unless the timer has 3716 * been set using @ref glfwSetTime, the timer measures time elapsed since GLFW 3717 * was initialized. 3718 * 3719 * The resolution of the timer is system dependent, but is usually on the order 3720 * of a few micro- or nanoseconds. It uses the highest-resolution monotonic 3721 * time source on each supported platform. 3722 * 3723 * @return The current value, in seconds, or zero if an 3724 * [error](@ref error_handling) occurred. 3725 * 3726 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3727 * 3728 * @thread_safety This function may be called from any thread. Reading and 3729 * writing of the internal timer offset is not atomic, so it needs to be 3730 * externally synchronized with calls to @ref glfwSetTime. 3731 * 3732 * @sa @ref time 3733 * 3734 * @since Added in version 1.0. 3735 * 3736 * @ingroup input 3737 */ 3738 GLFWAPI double glfwGetTime(void); 3739 3740 /*! @brief Sets the GLFW timer. 3741 * 3742 * This function sets the value of the GLFW timer. It then continues to count 3743 * up from that value. The value must be a positive finite number less than 3744 * or equal to 18446744073.0, which is approximately 584.5 years. 3745 * 3746 * @param[in] time The new value, in seconds. 3747 * 3748 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 3749 * GLFW_INVALID_VALUE. 3750 * 3751 * @remark The upper limit of the timer is calculated as 3752 * floor((2<sup>64</sup> - 1) / 10<sup>9</sup>) and is due to implementations 3753 * storing nanoseconds in 64 bits. The limit may be increased in the future. 3754 * 3755 * @thread_safety This function may be called from any thread. Reading and 3756 * writing of the internal timer offset is not atomic, so it needs to be 3757 * externally synchronized with calls to @ref glfwGetTime. 3758 * 3759 * @sa @ref time 3760 * 3761 * @since Added in version 2.2. 3762 * 3763 * @ingroup input 3764 */ 3765 GLFWAPI void glfwSetTime(double time); 3766 3767 /*! @brief Returns the current value of the raw timer. 3768 * 3769 * This function returns the current value of the raw timer, measured in 3770 * 1 / frequency seconds. To get the frequency, call @ref 3771 * glfwGetTimerFrequency. 3772 * 3773 * @return The value of the timer, or zero if an 3774 * [error](@ref error_handling) occurred. 3775 * 3776 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3777 * 3778 * @thread_safety This function may be called from any thread. 3779 * 3780 * @sa @ref time 3781 * @sa glfwGetTimerFrequency 3782 * 3783 * @since Added in version 3.2. 3784 * 3785 * @ingroup input 3786 */ 3787 GLFWAPI uint64_t glfwGetTimerValue(void); 3788 3789 /*! @brief Returns the frequency, in Hz, of the raw timer. 3790 * 3791 * This function returns the frequency, in Hz, of the raw timer. 3792 * 3793 * @return The frequency of the timer, in Hz, or zero if an 3794 * [error](@ref error_handling) occurred. 3795 * 3796 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3797 * 3798 * @thread_safety This function may be called from any thread. 3799 * 3800 * @sa @ref time 3801 * @sa glfwGetTimerValue 3802 * 3803 * @since Added in version 3.2. 3804 * 3805 * @ingroup input 3806 */ 3807 GLFWAPI uint64_t glfwGetTimerFrequency(void); 3808 3809 /*! @brief Makes the context of the specified window current for the calling 3810 * thread. 3811 * 3812 * This function makes the OpenGL or OpenGL ES context of the specified window 3813 * current on the calling thread. A context can only be made current on 3814 * a single thread at a time and each thread can have only a single current 3815 * context at a time. 3816 * 3817 * By default, making a context non-current implicitly forces a pipeline flush. 3818 * On machines that support `GL_KHR_context_flush_control`, you can control 3819 * whether a context performs this flush by setting the 3820 * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref window_hints_ctx) window hint. 3821 * 3822 * The specified window must have an OpenGL or OpenGL ES context. Specifying 3823 * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT 3824 * error. 3825 * 3826 * @param[in] window The window whose context to make current, or `NULL` to 3827 * detach the current context. 3828 * 3829 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3830 * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. 3831 * 3832 * @thread_safety This function may be called from any thread. 3833 * 3834 * @sa @ref context_current 3835 * @sa glfwGetCurrentContext 3836 * 3837 * @since Added in version 3.0. 3838 * 3839 * @ingroup context 3840 */ 3841 GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); 3842 3843 /*! @brief Returns the window whose context is current on the calling thread. 3844 * 3845 * This function returns the window whose OpenGL or OpenGL ES context is 3846 * current on the calling thread. 3847 * 3848 * @return The window whose context is current, or `NULL` if no window's 3849 * context is current. 3850 * 3851 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 3852 * 3853 * @thread_safety This function may be called from any thread. 3854 * 3855 * @sa @ref context_current 3856 * @sa glfwMakeContextCurrent 3857 * 3858 * @since Added in version 3.0. 3859 * 3860 * @ingroup context 3861 */ 3862 GLFWAPI GLFWwindow* glfwGetCurrentContext(void); 3863 3864 /*! @brief Swaps the front and back buffers of the specified window. 3865 * 3866 * This function swaps the front and back buffers of the specified window when 3867 * rendering with OpenGL or OpenGL ES. If the swap interval is greater than 3868 * zero, the GPU driver waits the specified number of screen updates before 3869 * swapping the buffers. 3870 * 3871 * The specified window must have an OpenGL or OpenGL ES context. Specifying 3872 * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT 3873 * error. 3874 * 3875 * This function does not apply to Vulkan. If you are rendering with Vulkan, 3876 * see `vkQueuePresentKHR` instead. 3877 * 3878 * @param[in] window The window whose buffers to swap. 3879 * 3880 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3881 * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. 3882 * 3883 * @remark __EGL:__ The context of the specified window must be current on the 3884 * calling thread. 3885 * 3886 * @thread_safety This function may be called from any thread. 3887 * 3888 * @sa @ref buffer_swap 3889 * @sa glfwSwapInterval 3890 * 3891 * @since Added in version 1.0. 3892 * @glfw3 Added window handle parameter. 3893 * 3894 * @ingroup window 3895 */ 3896 GLFWAPI void glfwSwapBuffers(GLFWwindow* window); 3897 3898 /*! @brief Sets the swap interval for the current context. 3899 * 3900 * This function sets the swap interval for the current OpenGL or OpenGL ES 3901 * context, i.e. the number of screen updates to wait from the time @ref 3902 * glfwSwapBuffers was called before swapping the buffers and returning. This 3903 * is sometimes called _vertical synchronization_, _vertical retrace 3904 * synchronization_ or just _vsync_. 3905 * 3906 * Contexts that support either of the `WGL_EXT_swap_control_tear` and 3907 * `GLX_EXT_swap_control_tear` extensions also accept negative swap intervals, 3908 * which allow the driver to swap even if a frame arrives a little bit late. 3909 * You can check for the presence of these extensions using @ref 3910 * glfwExtensionSupported. For more information about swap tearing, see the 3911 * extension specifications. 3912 * 3913 * A context must be current on the calling thread. Calling this function 3914 * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. 3915 * 3916 * This function does not apply to Vulkan. If you are rendering with Vulkan, 3917 * see the present mode of your swapchain instead. 3918 * 3919 * @param[in] interval The minimum number of screen updates to wait for 3920 * until the buffers are swapped by @ref glfwSwapBuffers. 3921 * 3922 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3923 * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. 3924 * 3925 * @remark This function is not called during context creation, leaving the 3926 * swap interval set to whatever is the default on that platform. This is done 3927 * because some swap interval extensions used by GLFW do not allow the swap 3928 * interval to be reset to zero once it has been set to a non-zero value. 3929 * 3930 * @remark Some GPU drivers do not honor the requested swap interval, either 3931 * because of a user setting that overrides the application's request or due to 3932 * bugs in the driver. 3933 * 3934 * @thread_safety This function may be called from any thread. 3935 * 3936 * @sa @ref buffer_swap 3937 * @sa glfwSwapBuffers 3938 * 3939 * @since Added in version 1.0. 3940 * 3941 * @ingroup context 3942 */ 3943 GLFWAPI void glfwSwapInterval(int interval); 3944 3945 /*! @brief Returns whether the specified extension is available. 3946 * 3947 * This function returns whether the specified 3948 * [API extension](@ref context_glext) is supported by the current OpenGL or 3949 * OpenGL ES context. It searches both for client API extension and context 3950 * creation API extensions. 3951 * 3952 * A context must be current on the calling thread. Calling this function 3953 * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. 3954 * 3955 * As this functions retrieves and searches one or more extension strings each 3956 * call, it is recommended that you cache its results if it is going to be used 3957 * frequently. The extension strings will not change during the lifetime of 3958 * a context, so there is no danger in doing this. 3959 * 3960 * This function does not apply to Vulkan. If you are using Vulkan, see @ref 3961 * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` 3962 * and `vkEnumerateDeviceExtensionProperties` instead. 3963 * 3964 * @param[in] extension The ASCII encoded name of the extension. 3965 * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE` 3966 * otherwise. 3967 * 3968 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 3969 * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref 3970 * GLFW_PLATFORM_ERROR. 3971 * 3972 * @thread_safety This function may be called from any thread. 3973 * 3974 * @sa @ref context_glext 3975 * @sa glfwGetProcAddress 3976 * 3977 * @since Added in version 1.0. 3978 * 3979 * @ingroup context 3980 */ 3981 GLFWAPI int glfwExtensionSupported(const char* extension); 3982 3983 /*! @brief Returns the address of the specified function for the current 3984 * context. 3985 * 3986 * This function returns the address of the specified OpenGL or OpenGL ES 3987 * [core or extension function](@ref context_glext), if it is supported 3988 * by the current context. 3989 * 3990 * A context must be current on the calling thread. Calling this function 3991 * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. 3992 * 3993 * This function does not apply to Vulkan. If you are rendering with Vulkan, 3994 * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and 3995 * `vkGetDeviceProcAddr` instead. 3996 * 3997 * @param[in] procname The ASCII encoded name of the function. 3998 * @return The address of the function, or `NULL` if an 3999 * [error](@ref error_handling) occurred. 4000 * 4001 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 4002 * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. 4003 * 4004 * @remark The address of a given function is not guaranteed to be the same 4005 * between contexts. 4006 * 4007 * @remark This function may return a non-`NULL` address despite the 4008 * associated version or extension not being available. Always check the 4009 * context version or extension string first. 4010 * 4011 * @pointer_lifetime The returned function pointer is valid until the context 4012 * is destroyed or the library is terminated. 4013 * 4014 * @thread_safety This function may be called from any thread. 4015 * 4016 * @sa @ref context_glext 4017 * @sa glfwExtensionSupported 4018 * 4019 * @since Added in version 1.0. 4020 * 4021 * @ingroup context 4022 */ 4023 GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); 4024 4025 /*! @brief Returns whether the Vulkan loader has been found. 4026 * 4027 * This function returns whether the Vulkan loader has been found. This check 4028 * is performed by @ref glfwInit. 4029 * 4030 * The availability of a Vulkan loader does not by itself guarantee that window 4031 * surface creation or even device creation is possible. Call @ref 4032 * glfwGetRequiredInstanceExtensions to check whether the extensions necessary 4033 * for Vulkan surface creation are available and @ref 4034 * glfwGetPhysicalDevicePresentationSupport to check whether a queue family of 4035 * a physical device supports image presentation. 4036 * 4037 * @return `GLFW_TRUE` if Vulkan is available, or `GLFW_FALSE` otherwise. 4038 * 4039 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 4040 * 4041 * @thread_safety This function may be called from any thread. 4042 * 4043 * @sa @ref vulkan_support 4044 * 4045 * @since Added in version 3.2. 4046 * 4047 * @ingroup vulkan 4048 */ 4049 GLFWAPI int glfwVulkanSupported(void); 4050 4051 /*! @brief Returns the Vulkan instance extensions required by GLFW. 4052 * 4053 * This function returns an array of names of Vulkan instance extensions required 4054 * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the 4055 * list will always contains `VK_KHR_surface`, so if you don't require any 4056 * additional extensions you can pass this list directly to the 4057 * `VkInstanceCreateInfo` struct. 4058 * 4059 * If Vulkan is not available on the machine, this function returns `NULL` and 4060 * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported 4061 * to check whether Vulkan is available. 4062 * 4063 * If Vulkan is available but no set of extensions allowing window surface 4064 * creation was found, this function returns `NULL`. You may still use Vulkan 4065 * for off-screen rendering and compute work. 4066 * 4067 * @param[out] count Where to store the number of extensions in the returned 4068 * array. This is set to zero if an error occurred. 4069 * @return An array of ASCII encoded extension names, or `NULL` if an 4070 * [error](@ref error_handling) occurred. 4071 * 4072 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 4073 * GLFW_API_UNAVAILABLE. 4074 * 4075 * @remarks Additional extensions may be required by future versions of GLFW. 4076 * You should check if any extensions you wish to enable are already in the 4077 * returned array, as it is an error to specify an extension more than once in 4078 * the `VkInstanceCreateInfo` struct. 4079 * 4080 * @pointer_lifetime The returned array is allocated and freed by GLFW. You 4081 * should not free it yourself. It is guaranteed to be valid only until the 4082 * library is terminated. 4083 * 4084 * @thread_safety This function may be called from any thread. 4085 * 4086 * @sa @ref vulkan_ext 4087 * @sa glfwCreateWindowSurface 4088 * 4089 * @since Added in version 3.2. 4090 * 4091 * @ingroup vulkan 4092 */ 4093 GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); 4094 4095 #if defined(VK_VERSION_1_0) 4096 4097 /*! @brief Returns the address of the specified Vulkan instance function. 4098 * 4099 * This function returns the address of the specified Vulkan core or extension 4100 * function for the specified instance. If instance is set to `NULL` it can 4101 * return any function exported from the Vulkan loader, including at least the 4102 * following functions: 4103 * 4104 * - `vkEnumerateInstanceExtensionProperties` 4105 * - `vkEnumerateInstanceLayerProperties` 4106 * - `vkCreateInstance` 4107 * - `vkGetInstanceProcAddr` 4108 * 4109 * If Vulkan is not available on the machine, this function returns `NULL` and 4110 * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported 4111 * to check whether Vulkan is available. 4112 * 4113 * This function is equivalent to calling `vkGetInstanceProcAddr` with 4114 * a platform-specific query of the Vulkan loader as a fallback. 4115 * 4116 * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve 4117 * functions related to instance creation. 4118 * @param[in] procname The ASCII encoded name of the function. 4119 * @return The address of the function, or `NULL` if an 4120 * [error](@ref error_handling) occurred. 4121 * 4122 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 4123 * GLFW_API_UNAVAILABLE. 4124 * 4125 * @pointer_lifetime The returned function pointer is valid until the library 4126 * is terminated. 4127 * 4128 * @thread_safety This function may be called from any thread. 4129 * 4130 * @sa @ref vulkan_proc 4131 * 4132 * @since Added in version 3.2. 4133 * 4134 * @ingroup vulkan 4135 */ 4136 GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname); 4137 4138 /*! @brief Returns whether the specified queue family can present images. 4139 * 4140 * This function returns whether the specified queue family of the specified 4141 * physical device supports presentation to the platform GLFW was built for. 4142 * 4143 * If Vulkan or the required window surface creation instance extensions are 4144 * not available on the machine, or if the specified instance was not created 4145 * with the required extensions, this function returns `GLFW_FALSE` and 4146 * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported 4147 * to check whether Vulkan is available and @ref 4148 * glfwGetRequiredInstanceExtensions to check what instance extensions are 4149 * required. 4150 * 4151 * @param[in] instance The instance that the physical device belongs to. 4152 * @param[in] device The physical device that the queue family belongs to. 4153 * @param[in] queuefamily The index of the queue family to query. 4154 * @return `GLFW_TRUE` if the queue family supports presentation, or 4155 * `GLFW_FALSE` otherwise. 4156 * 4157 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 4158 * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. 4159 * 4160 * @thread_safety This function may be called from any thread. For 4161 * synchronization details of Vulkan objects, see the Vulkan specification. 4162 * 4163 * @sa @ref vulkan_present 4164 * 4165 * @since Added in version 3.2. 4166 * 4167 * @ingroup vulkan 4168 */ 4169 GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); 4170 4171 /*! @brief Creates a Vulkan surface for the specified window. 4172 * 4173 * This function creates a Vulkan surface for the specified window. 4174 * 4175 * If the Vulkan loader was not found at initialization, this function returns 4176 * `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref GLFW_API_UNAVAILABLE 4177 * error. Call @ref glfwVulkanSupported to check whether the Vulkan loader was 4178 * found. 4179 * 4180 * If the required window surface creation instance extensions are not 4181 * available or if the specified instance was not created with these extensions 4182 * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and 4183 * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref 4184 * glfwGetRequiredInstanceExtensions to check what instance extensions are 4185 * required. 4186 * 4187 * The window surface must be destroyed before the specified Vulkan instance. 4188 * It is the responsibility of the caller to destroy the window surface. GLFW 4189 * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the 4190 * surface. 4191 * 4192 * @param[in] instance The Vulkan instance to create the surface in. 4193 * @param[in] window The window to create the surface for. 4194 * @param[in] allocator The allocator to use, or `NULL` to use the default 4195 * allocator. 4196 * @param[out] surface Where to store the handle of the surface. This is set 4197 * to `VK_NULL_HANDLE` if an error occurred. 4198 * @return `VK_SUCCESS` if successful, or a Vulkan error code if an 4199 * [error](@ref error_handling) occurred. 4200 * 4201 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref 4202 * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. 4203 * 4204 * @remarks If an error occurs before the creation call is made, GLFW returns 4205 * the Vulkan error code most appropriate for the error. Appropriate use of 4206 * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should 4207 * eliminate almost all occurrences of these errors. 4208 * 4209 * @thread_safety This function may be called from any thread. For 4210 * synchronization details of Vulkan objects, see the Vulkan specification. 4211 * 4212 * @sa @ref vulkan_surface 4213 * @sa glfwGetRequiredInstanceExtensions 4214 * 4215 * @since Added in version 3.2. 4216 * 4217 * @ingroup vulkan 4218 */ 4219 GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); 4220 4221 #endif /*VK_VERSION_1_0*/ 4222 4223 4224 /************************************************************************* 4225 * Global definition cleanup 4226 *************************************************************************/ 4227 4228 /* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ 4229 4230 #ifdef GLFW_WINGDIAPI_DEFINED 4231 #undef WINGDIAPI 4232 #undef GLFW_WINGDIAPI_DEFINED 4233 #endif 4234 4235 #ifdef GLFW_CALLBACK_DEFINED 4236 #undef CALLBACK 4237 #undef GLFW_CALLBACK_DEFINED 4238 #endif 4239 4240 /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ 4241 4242 4243 #ifdef __cplusplus 4244 } 4245 #endif 4246 4247 #endif /* _glfw3_h_ */ 4248 4249