github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/raylib/external/glfw/include/GLFW/glfw3native.h (about) 1 /************************************************************************* 2 * GLFW 3.4 - www.glfw.org 3 * A library for OpenGL, window and input 4 *------------------------------------------------------------------------ 5 * Copyright (c) 2002-2006 Marcus Geelnard 6 * Copyright (c) 2006-2018 Camilla Löwy <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_native_h_ 30 #define _glfw3_native_h_ 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 37 /************************************************************************* 38 * Doxygen documentation 39 *************************************************************************/ 40 41 /*! @file glfw3native.h 42 * @brief The header of the native access functions. 43 * 44 * This is the header file of the native access functions. See @ref native for 45 * more information. 46 */ 47 /*! @defgroup native Native access 48 * @brief Functions related to accessing native handles. 49 * 50 * **By using the native access functions you assert that you know what you're 51 * doing and how to fix problems caused by using them. If you don't, you 52 * shouldn't be using them.** 53 * 54 * Before the inclusion of @ref glfw3native.h, you may define zero or more 55 * window system API macro and zero or more context creation API macros. 56 * 57 * The chosen backends must match those the library was compiled for. Failure 58 * to do this will cause a link-time error. 59 * 60 * The available window API macros are: 61 * * `GLFW_EXPOSE_NATIVE_WIN32` 62 * * `GLFW_EXPOSE_NATIVE_COCOA` 63 * * `GLFW_EXPOSE_NATIVE_X11` 64 * * `GLFW_EXPOSE_NATIVE_WAYLAND` 65 * 66 * The available context API macros are: 67 * * `GLFW_EXPOSE_NATIVE_WGL` 68 * * `GLFW_EXPOSE_NATIVE_NSGL` 69 * * `GLFW_EXPOSE_NATIVE_GLX` 70 * * `GLFW_EXPOSE_NATIVE_EGL` 71 * * `GLFW_EXPOSE_NATIVE_OSMESA` 72 * 73 * These macros select which of the native access functions that are declared 74 * and which platform-specific headers to include. It is then up your (by 75 * definition platform-specific) code to handle which of these should be 76 * defined. 77 * 78 * If you do not want the platform-specific headers to be included, define 79 * `GLFW_NATIVE_INCLUDE_NONE` before including the @ref glfw3native.h header. 80 * 81 * @code 82 * #define GLFW_EXPOSE_NATIVE_WIN32 83 * #define GLFW_EXPOSE_NATIVE_WGL 84 * #define GLFW_NATIVE_INCLUDE_NONE 85 * #include <GLFW/glfw3native.h> 86 * @endcode 87 */ 88 89 90 /************************************************************************* 91 * System headers and types 92 *************************************************************************/ 93 94 #if !defined(GLFW_NATIVE_INCLUDE_NONE) 95 96 #if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) 97 /* This is a workaround for the fact that glfw3.h needs to export APIENTRY (for 98 * example to allow applications to correctly declare a GL_KHR_debug callback) 99 * but windows.h assumes no one will define APIENTRY before it does 100 */ 101 #if defined(GLFW_APIENTRY_DEFINED) 102 #undef APIENTRY 103 #undef GLFW_APIENTRY_DEFINED 104 #endif 105 #include <windows.h> 106 #endif 107 108 #if defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) 109 #if defined(__OBJC__) 110 #import <Cocoa/Cocoa.h> 111 #else 112 #include <ApplicationServices/ApplicationServices.h> 113 #include <objc/objc.h> 114 #endif 115 #endif 116 117 #if defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) 118 #include <X11/Xlib.h> 119 #include <X11/extensions/Xrandr.h> 120 #endif 121 122 #if defined(GLFW_EXPOSE_NATIVE_WAYLAND) 123 #include <wayland-client.h> 124 #endif 125 126 #if defined(GLFW_EXPOSE_NATIVE_WGL) 127 /* WGL is declared by windows.h */ 128 #endif 129 #if defined(GLFW_EXPOSE_NATIVE_NSGL) 130 /* NSGL is declared by Cocoa.h */ 131 #endif 132 #if defined(GLFW_EXPOSE_NATIVE_GLX) 133 /* This is a workaround for the fact that glfw3.h defines GLAPIENTRY because by 134 * default it also acts as an OpenGL header 135 * However, glx.h will include gl.h, which will define it unconditionally 136 */ 137 #if defined(GLFW_GLAPIENTRY_DEFINED) 138 #undef GLAPIENTRY 139 #undef GLFW_GLAPIENTRY_DEFINED 140 #endif 141 #include <GL/glx.h> 142 #endif 143 #if defined(GLFW_EXPOSE_NATIVE_EGL) 144 #include <EGL/egl.h> 145 #endif 146 #if defined(GLFW_EXPOSE_NATIVE_OSMESA) 147 /* This is a workaround for the fact that glfw3.h defines GLAPIENTRY because by 148 * default it also acts as an OpenGL header 149 * However, osmesa.h will include gl.h, which will define it unconditionally 150 */ 151 #if defined(GLFW_GLAPIENTRY_DEFINED) 152 #undef GLAPIENTRY 153 #undef GLFW_GLAPIENTRY_DEFINED 154 #endif 155 #include <GL/osmesa.h> 156 #endif 157 158 #endif /*GLFW_NATIVE_INCLUDE_NONE*/ 159 160 161 /************************************************************************* 162 * Functions 163 *************************************************************************/ 164 165 #if defined(GLFW_EXPOSE_NATIVE_WIN32) 166 /*! @brief Returns the adapter device name of the specified monitor. 167 * 168 * @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`) 169 * of the specified monitor, or `NULL` if an [error](@ref error_handling) 170 * occurred. 171 * 172 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 173 * 174 * @thread_safety This function may be called from any thread. Access is not 175 * synchronized. 176 * 177 * @since Added in version 3.1. 178 * 179 * @ingroup native 180 */ 181 GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); 182 183 /*! @brief Returns the display device name of the specified monitor. 184 * 185 * @return The UTF-8 encoded display device name (for example 186 * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an 187 * [error](@ref error_handling) occurred. 188 * 189 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 190 * 191 * @thread_safety This function may be called from any thread. Access is not 192 * synchronized. 193 * 194 * @since Added in version 3.1. 195 * 196 * @ingroup native 197 */ 198 GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); 199 200 /*! @brief Returns the `HWND` of the specified window. 201 * 202 * @return The `HWND` of the specified window, or `NULL` if an 203 * [error](@ref error_handling) occurred. 204 * 205 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 206 * 207 * @remark The `HDC` associated with the window can be queried with the 208 * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) 209 * function. 210 * @code 211 * HDC dc = GetDC(glfwGetWin32Window(window)); 212 * @endcode 213 * This DC is private and does not need to be released. 214 * 215 * @thread_safety This function may be called from any thread. Access is not 216 * synchronized. 217 * 218 * @since Added in version 3.0. 219 * 220 * @ingroup native 221 */ 222 GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); 223 #endif 224 225 #if defined(GLFW_EXPOSE_NATIVE_WGL) 226 /*! @brief Returns the `HGLRC` of the specified window. 227 * 228 * @return The `HGLRC` of the specified window, or `NULL` if an 229 * [error](@ref error_handling) occurred. 230 * 231 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 232 * GLFW_NOT_INITIALIZED. 233 * 234 * @remark The `HDC` associated with the window can be queried with the 235 * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) 236 * function. 237 * @code 238 * HDC dc = GetDC(glfwGetWin32Window(window)); 239 * @endcode 240 * This DC is private and does not need to be released. 241 * 242 * @thread_safety This function may be called from any thread. Access is not 243 * synchronized. 244 * 245 * @since Added in version 3.0. 246 * 247 * @ingroup native 248 */ 249 GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); 250 #endif 251 252 #if defined(GLFW_EXPOSE_NATIVE_COCOA) 253 /*! @brief Returns the `CGDirectDisplayID` of the specified monitor. 254 * 255 * @return The `CGDirectDisplayID` of the specified monitor, or 256 * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. 257 * 258 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 259 * 260 * @thread_safety This function may be called from any thread. Access is not 261 * synchronized. 262 * 263 * @since Added in version 3.1. 264 * 265 * @ingroup native 266 */ 267 GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); 268 269 /*! @brief Returns the `NSWindow` of the specified window. 270 * 271 * @return The `NSWindow` of the specified window, or `nil` if an 272 * [error](@ref error_handling) occurred. 273 * 274 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 275 * 276 * @thread_safety This function may be called from any thread. Access is not 277 * synchronized. 278 * 279 * @since Added in version 3.0. 280 * 281 * @ingroup native 282 */ 283 GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); 284 #endif 285 286 #if defined(GLFW_EXPOSE_NATIVE_NSGL) 287 /*! @brief Returns the `NSOpenGLContext` of the specified window. 288 * 289 * @return The `NSOpenGLContext` of the specified window, or `nil` if an 290 * [error](@ref error_handling) occurred. 291 * 292 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 293 * GLFW_NOT_INITIALIZED. 294 * 295 * @thread_safety This function may be called from any thread. Access is not 296 * synchronized. 297 * 298 * @since Added in version 3.0. 299 * 300 * @ingroup native 301 */ 302 GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); 303 #endif 304 305 #if defined(GLFW_EXPOSE_NATIVE_X11) 306 /*! @brief Returns the `Display` used by GLFW. 307 * 308 * @return The `Display` used by GLFW, or `NULL` if an 309 * [error](@ref error_handling) occurred. 310 * 311 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 312 * 313 * @thread_safety This function may be called from any thread. Access is not 314 * synchronized. 315 * 316 * @since Added in version 3.0. 317 * 318 * @ingroup native 319 */ 320 GLFWAPI Display* glfwGetX11Display(void); 321 322 /*! @brief Returns the `RRCrtc` of the specified monitor. 323 * 324 * @return The `RRCrtc` of the specified monitor, or `None` if an 325 * [error](@ref error_handling) occurred. 326 * 327 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 328 * 329 * @thread_safety This function may be called from any thread. Access is not 330 * synchronized. 331 * 332 * @since Added in version 3.1. 333 * 334 * @ingroup native 335 */ 336 GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); 337 338 /*! @brief Returns the `RROutput` of the specified monitor. 339 * 340 * @return The `RROutput` of the specified monitor, or `None` if an 341 * [error](@ref error_handling) occurred. 342 * 343 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 344 * 345 * @thread_safety This function may be called from any thread. Access is not 346 * synchronized. 347 * 348 * @since Added in version 3.1. 349 * 350 * @ingroup native 351 */ 352 GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); 353 354 /*! @brief Returns the `Window` of the specified window. 355 * 356 * @return The `Window` of the specified window, or `None` if an 357 * [error](@ref error_handling) occurred. 358 * 359 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 360 * 361 * @thread_safety This function may be called from any thread. Access is not 362 * synchronized. 363 * 364 * @since Added in version 3.0. 365 * 366 * @ingroup native 367 */ 368 GLFWAPI Window glfwGetX11Window(GLFWwindow* window); 369 370 /*! @brief Sets the current primary selection to the specified string. 371 * 372 * @param[in] string A UTF-8 encoded string. 373 * 374 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 375 * GLFW_PLATFORM_ERROR. 376 * 377 * @pointer_lifetime The specified string is copied before this function 378 * returns. 379 * 380 * @thread_safety This function must only be called from the main thread. 381 * 382 * @sa @ref clipboard 383 * @sa glfwGetX11SelectionString 384 * @sa glfwSetClipboardString 385 * 386 * @since Added in version 3.3. 387 * 388 * @ingroup native 389 */ 390 GLFWAPI void glfwSetX11SelectionString(const char* string); 391 392 /*! @brief Returns the contents of the current primary selection as a string. 393 * 394 * If the selection is empty or if its contents cannot be converted, `NULL` 395 * is returned and a @ref GLFW_FORMAT_UNAVAILABLE error is generated. 396 * 397 * @return The contents of the selection as a UTF-8 encoded string, or `NULL` 398 * if an [error](@ref error_handling) occurred. 399 * 400 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref 401 * GLFW_PLATFORM_ERROR. 402 * 403 * @pointer_lifetime The returned string is allocated and freed by GLFW. You 404 * should not free it yourself. It is valid until the next call to @ref 405 * glfwGetX11SelectionString or @ref glfwSetX11SelectionString, or until the 406 * library is terminated. 407 * 408 * @thread_safety This function must only be called from the main thread. 409 * 410 * @sa @ref clipboard 411 * @sa glfwSetX11SelectionString 412 * @sa glfwGetClipboardString 413 * 414 * @since Added in version 3.3. 415 * 416 * @ingroup native 417 */ 418 GLFWAPI const char* glfwGetX11SelectionString(void); 419 #endif 420 421 #if defined(GLFW_EXPOSE_NATIVE_GLX) 422 /*! @brief Returns the `GLXContext` of the specified window. 423 * 424 * @return The `GLXContext` of the specified window, or `NULL` if an 425 * [error](@ref error_handling) occurred. 426 * 427 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 428 * GLFW_NOT_INITIALIZED. 429 * 430 * @thread_safety This function may be called from any thread. Access is not 431 * synchronized. 432 * 433 * @since Added in version 3.0. 434 * 435 * @ingroup native 436 */ 437 GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); 438 439 /*! @brief Returns the `GLXWindow` of the specified window. 440 * 441 * @return The `GLXWindow` of the specified window, or `None` if an 442 * [error](@ref error_handling) occurred. 443 * 444 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 445 * GLFW_NOT_INITIALIZED. 446 * 447 * @thread_safety This function may be called from any thread. Access is not 448 * synchronized. 449 * 450 * @since Added in version 3.2. 451 * 452 * @ingroup native 453 */ 454 GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); 455 #endif 456 457 #if defined(GLFW_EXPOSE_NATIVE_WAYLAND) 458 /*! @brief Returns the `struct wl_display*` used by GLFW. 459 * 460 * @return The `struct wl_display*` used by GLFW, or `NULL` if an 461 * [error](@ref error_handling) occurred. 462 * 463 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 464 * 465 * @thread_safety This function may be called from any thread. Access is not 466 * synchronized. 467 * 468 * @since Added in version 3.2. 469 * 470 * @ingroup native 471 */ 472 GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); 473 474 /*! @brief Returns the `struct wl_output*` of the specified monitor. 475 * 476 * @return The `struct wl_output*` of the specified monitor, or `NULL` if an 477 * [error](@ref error_handling) occurred. 478 * 479 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 480 * 481 * @thread_safety This function may be called from any thread. Access is not 482 * synchronized. 483 * 484 * @since Added in version 3.2. 485 * 486 * @ingroup native 487 */ 488 GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); 489 490 /*! @brief Returns the main `struct wl_surface*` of the specified window. 491 * 492 * @return The main `struct wl_surface*` of the specified window, or `NULL` if 493 * an [error](@ref error_handling) occurred. 494 * 495 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 496 * 497 * @thread_safety This function may be called from any thread. Access is not 498 * synchronized. 499 * 500 * @since Added in version 3.2. 501 * 502 * @ingroup native 503 */ 504 GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); 505 #endif 506 507 #if defined(GLFW_EXPOSE_NATIVE_EGL) 508 /*! @brief Returns the `EGLDisplay` used by GLFW. 509 * 510 * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an 511 * [error](@ref error_handling) occurred. 512 * 513 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. 514 * 515 * @remark Because EGL is initialized on demand, this function will return 516 * `EGL_NO_DISPLAY` until the first context has been created via EGL. 517 * 518 * @thread_safety This function may be called from any thread. Access is not 519 * synchronized. 520 * 521 * @since Added in version 3.0. 522 * 523 * @ingroup native 524 */ 525 GLFWAPI EGLDisplay glfwGetEGLDisplay(void); 526 527 /*! @brief Returns the `EGLContext` of the specified window. 528 * 529 * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an 530 * [error](@ref error_handling) occurred. 531 * 532 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 533 * GLFW_NOT_INITIALIZED. 534 * 535 * @thread_safety This function may be called from any thread. Access is not 536 * synchronized. 537 * 538 * @since Added in version 3.0. 539 * 540 * @ingroup native 541 */ 542 GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); 543 544 /*! @brief Returns the `EGLSurface` of the specified window. 545 * 546 * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an 547 * [error](@ref error_handling) occurred. 548 * 549 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 550 * GLFW_NOT_INITIALIZED. 551 * 552 * @thread_safety This function may be called from any thread. Access is not 553 * synchronized. 554 * 555 * @since Added in version 3.0. 556 * 557 * @ingroup native 558 */ 559 GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); 560 #endif 561 562 #if defined(GLFW_EXPOSE_NATIVE_OSMESA) 563 /*! @brief Retrieves the color buffer associated with the specified window. 564 * 565 * @param[in] window The window whose color buffer to retrieve. 566 * @param[out] width Where to store the width of the color buffer, or `NULL`. 567 * @param[out] height Where to store the height of the color buffer, or `NULL`. 568 * @param[out] format Where to store the OSMesa pixel format of the color 569 * buffer, or `NULL`. 570 * @param[out] buffer Where to store the address of the color buffer, or 571 * `NULL`. 572 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an 573 * [error](@ref error_handling) occurred. 574 * 575 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 576 * GLFW_NOT_INITIALIZED. 577 * 578 * @thread_safety This function may be called from any thread. Access is not 579 * synchronized. 580 * 581 * @since Added in version 3.3. 582 * 583 * @ingroup native 584 */ 585 GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer); 586 587 /*! @brief Retrieves the depth buffer associated with the specified window. 588 * 589 * @param[in] window The window whose depth buffer to retrieve. 590 * @param[out] width Where to store the width of the depth buffer, or `NULL`. 591 * @param[out] height Where to store the height of the depth buffer, or `NULL`. 592 * @param[out] bytesPerValue Where to store the number of bytes per depth 593 * buffer element, or `NULL`. 594 * @param[out] buffer Where to store the address of the depth buffer, or 595 * `NULL`. 596 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an 597 * [error](@ref error_handling) occurred. 598 * 599 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 600 * GLFW_NOT_INITIALIZED. 601 * 602 * @thread_safety This function may be called from any thread. Access is not 603 * synchronized. 604 * 605 * @since Added in version 3.3. 606 * 607 * @ingroup native 608 */ 609 GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer); 610 611 /*! @brief Returns the `OSMesaContext` of the specified window. 612 * 613 * @return The `OSMesaContext` of the specified window, or `NULL` if an 614 * [error](@ref error_handling) occurred. 615 * 616 * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref 617 * GLFW_NOT_INITIALIZED. 618 * 619 * @thread_safety This function may be called from any thread. Access is not 620 * synchronized. 621 * 622 * @since Added in version 3.3. 623 * 624 * @ingroup native 625 */ 626 GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window); 627 #endif 628 629 #ifdef __cplusplus 630 } 631 #endif 632 633 #endif /* _glfw3_native_h_ */ 634