master
ブランチ master
VulkanExample / dep / include / GLFW / glfw3native.h
23.1 KB、709行 生 Blame 履歴
1/*************************************************************************
2 * GLFW 3.5 - 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
33extern "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 and @ref
173 * GLFW_PLATFORM_UNAVAILABLE.
174 *
175 * @thread_safety This function may be called from any thread. Access is not
176 * synchronized.
177 *
178 * @since Added in version 3.1.
179 *
180 * @ingroup native
181 */
182GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor);
183
184/*! @brief Returns the display device name of the specified monitor.
185 *
186 * @return The UTF-8 encoded display device name (for example
187 * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an
188 * [error](@ref error_handling) occurred.
189 *
190 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
191 * GLFW_PLATFORM_UNAVAILABLE.
192 *
193 * @thread_safety This function may be called from any thread. Access is not
194 * synchronized.
195 *
196 * @since Added in version 3.1.
197 *
198 * @ingroup native
199 */
200GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor);
201
202/*! @brief Returns the `HWND` of the specified window.
203 *
204 * @return The `HWND` of the specified window, or `NULL` if an
205 * [error](@ref error_handling) occurred.
206 *
207 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
208 * GLFW_PLATFORM_UNAVAILABLE.
209 *
210 * @remark The `HDC` associated with the window can be queried with the
211 * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc)
212 * function.
213 * @code
214 * HDC dc = GetDC(glfwGetWin32Window(window));
215 * @endcode
216 * This DC is private and does not need to be released.
217 *
218 * @thread_safety This function may be called from any thread. Access is not
219 * synchronized.
220 *
221 * @since Added in version 3.0.
222 *
223 * @ingroup native
224 */
225GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window);
226#endif
227
228#if defined(GLFW_EXPOSE_NATIVE_WGL)
229/*! @brief Returns the `HGLRC` of the specified window.
230 *
231 * @return The `HGLRC` of the specified window, or `NULL` if an
232 * [error](@ref error_handling) occurred.
233 *
234 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
235 * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_NO_WINDOW_CONTEXT.
236 *
237 * @remark The `HDC` associated with the window can be queried with the
238 * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc)
239 * function.
240 * @code
241 * HDC dc = GetDC(glfwGetWin32Window(window));
242 * @endcode
243 * This DC is private and does not need to be released.
244 *
245 * @thread_safety This function may be called from any thread. Access is not
246 * synchronized.
247 *
248 * @since Added in version 3.0.
249 *
250 * @ingroup native
251 */
252GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window);
253#endif
254
255#if defined(GLFW_EXPOSE_NATIVE_COCOA)
256/*! @brief Returns the `CGDirectDisplayID` of the specified monitor.
257 *
258 * @return The `CGDirectDisplayID` of the specified monitor, or
259 * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred.
260 *
261 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
262 * GLFW_PLATFORM_UNAVAILABLE.
263 *
264 * @thread_safety This function may be called from any thread. Access is not
265 * synchronized.
266 *
267 * @since Added in version 3.1.
268 *
269 * @ingroup native
270 */
271GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
272
273/*! @brief Returns the `NSWindow` of the specified window.
274 *
275 * @return The `NSWindow` of the specified window, or `nil` if an
276 * [error](@ref error_handling) occurred.
277 *
278 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
279 * GLFW_PLATFORM_UNAVAILABLE.
280 *
281 * @thread_safety This function may be called from any thread. Access is not
282 * synchronized.
283 *
284 * @since Added in version 3.0.
285 *
286 * @ingroup native
287 */
288GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window);
289
290/*! @brief Returns the `NSView` of the specified window.
291 *
292 * @return The `NSView` of the specified window, or `nil` if an
293 * [error](@ref error_handling) occurred.
294 *
295 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
296 * GLFW_PLATFORM_UNAVAILABLE.
297 *
298 * @thread_safety This function may be called from any thread. Access is not
299 * synchronized.
300 *
301 * @since Added in version 3.4.
302 *
303 * @ingroup native
304 */
305GLFWAPI id glfwGetCocoaView(GLFWwindow* window);
306#endif
307
308#if defined(GLFW_EXPOSE_NATIVE_NSGL)
309/*! @brief Returns the `NSOpenGLContext` of the specified window.
310 *
311 * @return The `NSOpenGLContext` of the specified window, or `nil` if an
312 * [error](@ref error_handling) occurred.
313 *
314 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
315 * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_NO_WINDOW_CONTEXT.
316 *
317 * @thread_safety This function may be called from any thread. Access is not
318 * synchronized.
319 *
320 * @since Added in version 3.0.
321 *
322 * @ingroup native
323 */
324GLFWAPI id glfwGetNSGLContext(GLFWwindow* window);
325#endif
326
327#if defined(GLFW_EXPOSE_NATIVE_X11)
328/*! @brief Returns the `Display` used by GLFW.
329 *
330 * @return The `Display` used by GLFW, or `NULL` if an
331 * [error](@ref error_handling) occurred.
332 *
333 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
334 * GLFW_PLATFORM_UNAVAILABLE.
335 *
336 * @thread_safety This function may be called from any thread. Access is not
337 * synchronized.
338 *
339 * @since Added in version 3.0.
340 *
341 * @ingroup native
342 */
343GLFWAPI Display* glfwGetX11Display(void);
344
345/*! @brief Returns the `RRCrtc` of the specified monitor.
346 *
347 * @return The `RRCrtc` of the specified monitor, or `None` if an
348 * [error](@ref error_handling) occurred.
349 *
350 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
351 * GLFW_PLATFORM_UNAVAILABLE.
352 *
353 * @thread_safety This function may be called from any thread. Access is not
354 * synchronized.
355 *
356 * @since Added in version 3.1.
357 *
358 * @ingroup native
359 */
360GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
361
362/*! @brief Returns the `RROutput` of the specified monitor.
363 *
364 * @return The `RROutput` of the specified monitor, or `None` if an
365 * [error](@ref error_handling) occurred.
366 *
367 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
368 * GLFW_PLATFORM_UNAVAILABLE.
369 *
370 * @thread_safety This function may be called from any thread. Access is not
371 * synchronized.
372 *
373 * @since Added in version 3.1.
374 *
375 * @ingroup native
376 */
377GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
378
379/*! @brief Returns the `Window` of the specified window.
380 *
381 * @return The `Window` of the specified window, or `None` if an
382 * [error](@ref error_handling) occurred.
383 *
384 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
385 * GLFW_PLATFORM_UNAVAILABLE.
386 *
387 * @thread_safety This function may be called from any thread. Access is not
388 * synchronized.
389 *
390 * @since Added in version 3.0.
391 *
392 * @ingroup native
393 */
394GLFWAPI Window glfwGetX11Window(GLFWwindow* window);
395
396/*! @brief Sets the current primary selection to the specified string.
397 *
398 * @param[in] string A UTF-8 encoded string.
399 *
400 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
401 * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR.
402 *
403 * @pointer_lifetime The specified string is copied before this function
404 * returns.
405 *
406 * @thread_safety This function must only be called from the main thread.
407 *
408 * @sa @ref clipboard
409 * @sa glfwGetX11SelectionString
410 * @sa glfwSetClipboardString
411 *
412 * @since Added in version 3.3.
413 *
414 * @ingroup native
415 */
416GLFWAPI void glfwSetX11SelectionString(const char* string);
417
418/*! @brief Returns the contents of the current primary selection as a string.
419 *
420 * If the selection is empty or if its contents cannot be converted, `NULL`
421 * is returned and a @ref GLFW_FORMAT_UNAVAILABLE error is generated.
422 *
423 * @return The contents of the selection as a UTF-8 encoded string, or `NULL`
424 * if an [error](@ref error_handling) occurred.
425 *
426 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
427 * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR.
428 *
429 * @pointer_lifetime The returned string is allocated and freed by GLFW. You
430 * should not free it yourself. It is valid until the next call to @ref
431 * glfwGetX11SelectionString or @ref glfwSetX11SelectionString, or until the
432 * library is terminated.
433 *
434 * @thread_safety This function must only be called from the main thread.
435 *
436 * @sa @ref clipboard
437 * @sa glfwSetX11SelectionString
438 * @sa glfwGetClipboardString
439 *
440 * @since Added in version 3.3.
441 *
442 * @ingroup native
443 */
444GLFWAPI const char* glfwGetX11SelectionString(void);
445#endif
446
447#if defined(GLFW_EXPOSE_NATIVE_GLX)
448/*! @brief Returns the `GLXContext` of the specified window.
449 *
450 * @return The `GLXContext` of the specified window, or `NULL` if an
451 * [error](@ref error_handling) occurred.
452 *
453 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
454 * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_UNAVAILABLE.
455 *
456 * @thread_safety This function may be called from any thread. Access is not
457 * synchronized.
458 *
459 * @since Added in version 3.0.
460 *
461 * @ingroup native
462 */
463GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window);
464
465/*! @brief Returns the `GLXWindow` of the specified window.
466 *
467 * @return The `GLXWindow` of the specified window, or `None` if an
468 * [error](@ref error_handling) occurred.
469 *
470 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
471 * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_UNAVAILABLE.
472 *
473 * @thread_safety This function may be called from any thread. Access is not
474 * synchronized.
475 *
476 * @since Added in version 3.2.
477 *
478 * @ingroup native
479 */
480GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window);
481
482/*! @brief Retrieves the `GLXFBConfig` of the specified window's `GLXWindow`.
483 *
484 * @param[in] window The window whose `GLXWindow` to query.
485 * @param[out] config The `GLXFBConfig` of the window `GLXWindow`, if available.
486 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
487 * [error](@ref error_handling) occurred.
488 *
489 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
490 * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_UNAVAILABLE.
491 *
492 * @remark `GLXFBConfig` is an opaque type. Unlike other GLFW functions, the
493 * @p config out parameter is not cleared on error, as core GLX does not define
494 * any invalid value.
495 *
496 * @thread_safety This function may be called from any thread. Access is not
497 * synchronized.
498 *
499 * @since Added in version 3.5
500 *
501 * @ingroup native
502 */
503GLFWAPI int glfwGetGLXFBConfig(GLFWwindow* window, GLXFBConfig* config);
504#endif
505
506#if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
507/*! @brief Returns the `struct wl_display*` used by GLFW.
508 *
509 * @return The `struct wl_display*` used by GLFW, or `NULL` if an
510 * [error](@ref error_handling) occurred.
511 *
512 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
513 * GLFW_PLATFORM_UNAVAILABLE.
514 *
515 * @thread_safety This function may be called from any thread. Access is not
516 * synchronized.
517 *
518 * @since Added in version 3.2.
519 *
520 * @ingroup native
521 */
522GLFWAPI struct wl_display* glfwGetWaylandDisplay(void);
523
524/*! @brief Returns the `struct wl_output*` of the specified monitor.
525 *
526 * @return The `struct wl_output*` of the specified monitor, or `NULL` if an
527 * [error](@ref error_handling) occurred.
528 *
529 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
530 * GLFW_PLATFORM_UNAVAILABLE.
531 *
532 * @thread_safety This function may be called from any thread. Access is not
533 * synchronized.
534 *
535 * @since Added in version 3.2.
536 *
537 * @ingroup native
538 */
539GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
540
541/*! @brief Returns the main `struct wl_surface*` of the specified window.
542 *
543 * @return The main `struct wl_surface*` of the specified window, or `NULL` if
544 * an [error](@ref error_handling) occurred.
545 *
546 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
547 * GLFW_PLATFORM_UNAVAILABLE.
548 *
549 * @thread_safety This function may be called from any thread. Access is not
550 * synchronized.
551 *
552 * @since Added in version 3.2.
553 *
554 * @ingroup native
555 */
556GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
557#endif
558
559#if defined(GLFW_EXPOSE_NATIVE_EGL)
560/*! @brief Returns the `EGLDisplay` used by GLFW.
561 *
562 * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an
563 * [error](@ref error_handling) occurred.
564 *
565 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
566 *
567 * @remark Because EGL is initialized on demand, this function will return
568 * `EGL_NO_DISPLAY` until the first context has been created via EGL.
569 *
570 * @thread_safety This function may be called from any thread. Access is not
571 * synchronized.
572 *
573 * @since Added in version 3.0.
574 *
575 * @ingroup native
576 */
577GLFWAPI EGLDisplay glfwGetEGLDisplay(void);
578
579/*! @brief Returns the `EGLContext` of the specified window.
580 *
581 * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an
582 * [error](@ref error_handling) occurred.
583 *
584 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
585 * GLFW_NO_WINDOW_CONTEXT.
586 *
587 * @thread_safety This function may be called from any thread. Access is not
588 * synchronized.
589 *
590 * @since Added in version 3.0.
591 *
592 * @ingroup native
593 */
594GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window);
595
596/*! @brief Returns the `EGLSurface` of the specified window.
597 *
598 * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an
599 * [error](@ref error_handling) occurred.
600 *
601 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
602 * GLFW_NO_WINDOW_CONTEXT.
603 *
604 * @thread_safety This function may be called from any thread. Access is not
605 * synchronized.
606 *
607 * @since Added in version 3.0.
608 *
609 * @ingroup native
610 */
611GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window);
612
613/*! @brief Retrieves the `EGLConfig` of the specified window's `EGLSurface`.
614 *
615 * @param[in] window The window whose `EGLSurface` to query.
616 * @param[out] config The `EGLConfig` of the window `EGLSurface`, if available.
617 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
618 * [error](@ref error_handling) occurred.
619 *
620 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
621 * GLFW_NO_WINDOW_CONTEXT.
622 *
623 * @remark `EGLConfig` is an opaque type. Unlike other GLFW functions, the @p
624 * config out parameter is not cleared on error, as core EGL does not define
625 * any invalid value.
626 *
627 * @thread_safety This function may be called from any thread. Access is not
628 * synchronized.
629 *
630 * @since Added in version 3.5.
631 *
632 * @ingroup native
633 */
634GLFWAPI int glfwGetEGLConfig(GLFWwindow* window, EGLConfig* config);
635#endif
636
637#if defined(GLFW_EXPOSE_NATIVE_OSMESA)
638/*! @brief Retrieves the color buffer associated with the specified window.
639 *
640 * @param[in] window The window whose color buffer to retrieve.
641 * @param[out] width Where to store the width of the color buffer, or `NULL`.
642 * @param[out] height Where to store the height of the color buffer, or `NULL`.
643 * @param[out] format Where to store the OSMesa pixel format of the color
644 * buffer, or `NULL`.
645 * @param[out] buffer Where to store the address of the color buffer, or
646 * `NULL`.
647 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
648 * [error](@ref error_handling) occurred.
649 *
650 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
651 * GLFW_NO_WINDOW_CONTEXT.
652 *
653 * @thread_safety This function may be called from any thread. Access is not
654 * synchronized.
655 *
656 * @since Added in version 3.3.
657 *
658 * @ingroup native
659 */
660GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer);
661
662/*! @brief Retrieves the depth buffer associated with the specified window.
663 *
664 * @param[in] window The window whose depth buffer to retrieve.
665 * @param[out] width Where to store the width of the depth buffer, or `NULL`.
666 * @param[out] height Where to store the height of the depth buffer, or `NULL`.
667 * @param[out] bytesPerValue Where to store the number of bytes per depth
668 * buffer element, or `NULL`.
669 * @param[out] buffer Where to store the address of the depth buffer, or
670 * `NULL`.
671 * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
672 * [error](@ref error_handling) occurred.
673 *
674 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
675 * GLFW_NO_WINDOW_CONTEXT.
676 *
677 * @thread_safety This function may be called from any thread. Access is not
678 * synchronized.
679 *
680 * @since Added in version 3.3.
681 *
682 * @ingroup native
683 */
684GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer);
685
686/*! @brief Returns the `OSMesaContext` of the specified window.
687 *
688 * @return The `OSMesaContext` of the specified window, or `NULL` if an
689 * [error](@ref error_handling) occurred.
690 *
691 * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
692 * GLFW_NO_WINDOW_CONTEXT.
693 *
694 * @thread_safety This function may be called from any thread. Access is not
695 * synchronized.
696 *
697 * @since Added in version 3.3.
698 *
699 * @ingroup native
700 */
701GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window);
702#endif
703
704#ifdef __cplusplus
705}
706#endif
707
708#endif /* _glfw3_native_h_ */
709