• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
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 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  */
182 GLFWAPI 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  */
200 GLFWAPI 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  */
225 GLFWAPI 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  */
252 GLFWAPI 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  */
271 GLFWAPI 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  */
288 GLFWAPI 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  */
305 GLFWAPI 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  */
324 GLFWAPI 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  */
343 GLFWAPI 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  */
360 GLFWAPI 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  */
377 GLFWAPI 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  */
394 GLFWAPI 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  */
416 GLFWAPI 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  */
444 GLFWAPI 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  */
463 GLFWAPI 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  */
480 GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window);
481 #endif
482 
483 #if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
484 /*! @brief Returns the `struct wl_display*` used by GLFW.
485  *
486  *  @return The `struct wl_display*` used by GLFW, or `NULL` if an
487  *  [error](@ref error_handling) occurred.
488  *
489  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
490  *  GLFW_PLATFORM_UNAVAILABLE.
491  *
492  *  @thread_safety This function may be called from any thread.  Access is not
493  *  synchronized.
494  *
495  *  @since Added in version 3.2.
496  *
497  *  @ingroup native
498  */
499 GLFWAPI struct wl_display* glfwGetWaylandDisplay(void);
500 
501 /*! @brief Returns the `struct wl_output*` of the specified monitor.
502  *
503  *  @return The `struct wl_output*` of the specified monitor, or `NULL` if an
504  *  [error](@ref error_handling) occurred.
505  *
506  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
507  *  GLFW_PLATFORM_UNAVAILABLE.
508  *
509  *  @thread_safety This function may be called from any thread.  Access is not
510  *  synchronized.
511  *
512  *  @since Added in version 3.2.
513  *
514  *  @ingroup native
515  */
516 GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
517 
518 /*! @brief Returns the main `struct wl_surface*` of the specified window.
519  *
520  *  @return The main `struct wl_surface*` of the specified window, or `NULL` if
521  *  an [error](@ref error_handling) occurred.
522  *
523  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
524  *  GLFW_PLATFORM_UNAVAILABLE.
525  *
526  *  @thread_safety This function may be called from any thread.  Access is not
527  *  synchronized.
528  *
529  *  @since Added in version 3.2.
530  *
531  *  @ingroup native
532  */
533 GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
534 #endif
535 
536 #if defined(GLFW_EXPOSE_NATIVE_EGL)
537 /*! @brief Returns the `EGLDisplay` used by GLFW.
538  *
539  *  @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an
540  *  [error](@ref error_handling) occurred.
541  *
542  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED.
543  *
544  *  @remark Because EGL is initialized on demand, this function will return
545  *  `EGL_NO_DISPLAY` until the first context has been created via EGL.
546  *
547  *  @thread_safety This function may be called from any thread.  Access is not
548  *  synchronized.
549  *
550  *  @since Added in version 3.0.
551  *
552  *  @ingroup native
553  */
554 GLFWAPI EGLDisplay glfwGetEGLDisplay(void);
555 
556 /*! @brief Returns the `EGLContext` of the specified window.
557  *
558  *  @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an
559  *  [error](@ref error_handling) occurred.
560  *
561  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
562  *  GLFW_NO_WINDOW_CONTEXT.
563  *
564  *  @thread_safety This function may be called from any thread.  Access is not
565  *  synchronized.
566  *
567  *  @since Added in version 3.0.
568  *
569  *  @ingroup native
570  */
571 GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window);
572 
573 /*! @brief Returns the `EGLSurface` of the specified window.
574  *
575  *  @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an
576  *  [error](@ref error_handling) occurred.
577  *
578  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
579  *  GLFW_NO_WINDOW_CONTEXT.
580  *
581  *  @thread_safety This function may be called from any thread.  Access is not
582  *  synchronized.
583  *
584  *  @since Added in version 3.0.
585  *
586  *  @ingroup native
587  */
588 GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window);
589 #endif
590 
591 #if defined(GLFW_EXPOSE_NATIVE_OSMESA)
592 /*! @brief Retrieves the color buffer associated with the specified window.
593  *
594  *  @param[in] window The window whose color buffer to retrieve.
595  *  @param[out] width Where to store the width of the color buffer, or `NULL`.
596  *  @param[out] height Where to store the height of the color buffer, or `NULL`.
597  *  @param[out] format Where to store the OSMesa pixel format of the color
598  *  buffer, or `NULL`.
599  *  @param[out] buffer Where to store the address of the color buffer, or
600  *  `NULL`.
601  *  @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
602  *  [error](@ref error_handling) occurred.
603  *
604  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
605  *  GLFW_NO_WINDOW_CONTEXT.
606  *
607  *  @thread_safety This function may be called from any thread.  Access is not
608  *  synchronized.
609  *
610  *  @since Added in version 3.3.
611  *
612  *  @ingroup native
613  */
614 GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer);
615 
616 /*! @brief Retrieves the depth buffer associated with the specified window.
617  *
618  *  @param[in] window The window whose depth buffer to retrieve.
619  *  @param[out] width Where to store the width of the depth buffer, or `NULL`.
620  *  @param[out] height Where to store the height of the depth buffer, or `NULL`.
621  *  @param[out] bytesPerValue Where to store the number of bytes per depth
622  *  buffer element, or `NULL`.
623  *  @param[out] buffer Where to store the address of the depth buffer, or
624  *  `NULL`.
625  *  @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an
626  *  [error](@ref error_handling) occurred.
627  *
628  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
629  *  GLFW_NO_WINDOW_CONTEXT.
630  *
631  *  @thread_safety This function may be called from any thread.  Access is not
632  *  synchronized.
633  *
634  *  @since Added in version 3.3.
635  *
636  *  @ingroup native
637  */
638 GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer);
639 
640 /*! @brief Returns the `OSMesaContext` of the specified window.
641  *
642  *  @return The `OSMesaContext` of the specified window, or `NULL` if an
643  *  [error](@ref error_handling) occurred.
644  *
645  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref
646  *  GLFW_NO_WINDOW_CONTEXT.
647  *
648  *  @thread_safety This function may be called from any thread.  Access is not
649  *  synchronized.
650  *
651  *  @since Added in version 3.3.
652  *
653  *  @ingroup native
654  */
655 GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window);
656 #endif
657 
658 #ifdef __cplusplus
659 }
660 #endif
661 
662 #endif /* _glfw3_native_h_ */
663 
664