native_audio 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/assets/include/GL/glew.h +26427 -0
  3. data/assets/include/GLES2/gl2.h +656 -0
  4. data/assets/include/GLES2/gl2ext.h +3949 -0
  5. data/assets/include/GLES2/gl2ext_angle.h +701 -0
  6. data/assets/include/GLES2/gl2platform.h +27 -0
  7. data/assets/include/GLES3/gl3.h +1192 -0
  8. data/assets/include/GLES3/gl31.h +1507 -0
  9. data/assets/include/GLES3/gl32.h +1808 -0
  10. data/assets/include/GLES3/gl3platform.h +27 -0
  11. data/assets/include/KHR/khrplatform.h +290 -0
  12. data/assets/include/SDL2/SDL.h +233 -0
  13. data/assets/include/SDL2/SDL_assert.h +326 -0
  14. data/assets/include/SDL2/SDL_atomic.h +415 -0
  15. data/assets/include/SDL2/SDL_audio.h +1500 -0
  16. data/assets/include/SDL2/SDL_bits.h +126 -0
  17. data/assets/include/SDL2/SDL_blendmode.h +198 -0
  18. data/assets/include/SDL2/SDL_clipboard.h +141 -0
  19. data/assets/include/SDL2/SDL_config.h +61 -0
  20. data/assets/include/SDL2/SDL_config_android.h +194 -0
  21. data/assets/include/SDL2/SDL_config_emscripten.h +218 -0
  22. data/assets/include/SDL2/SDL_config_iphoneos.h +217 -0
  23. data/assets/include/SDL2/SDL_config_macosx.h +277 -0
  24. data/assets/include/SDL2/SDL_config_minimal.h +95 -0
  25. data/assets/include/SDL2/SDL_config_ngage.h +89 -0
  26. data/assets/include/SDL2/SDL_config_os2.h +207 -0
  27. data/assets/include/SDL2/SDL_config_pandora.h +141 -0
  28. data/assets/include/SDL2/SDL_config_windows.h +331 -0
  29. data/assets/include/SDL2/SDL_config_wingdk.h +253 -0
  30. data/assets/include/SDL2/SDL_config_winrt.h +220 -0
  31. data/assets/include/SDL2/SDL_config_xbox.h +235 -0
  32. data/assets/include/SDL2/SDL_copying.h +20 -0
  33. data/assets/include/SDL2/SDL_cpuinfo.h +594 -0
  34. data/assets/include/SDL2/SDL_egl.h +2352 -0
  35. data/assets/include/SDL2/SDL_endian.h +348 -0
  36. data/assets/include/SDL2/SDL_error.h +163 -0
  37. data/assets/include/SDL2/SDL_events.h +1166 -0
  38. data/assets/include/SDL2/SDL_filesystem.h +149 -0
  39. data/assets/include/SDL2/SDL_gamecontroller.h +1074 -0
  40. data/assets/include/SDL2/SDL_gesture.h +117 -0
  41. data/assets/include/SDL2/SDL_guid.h +100 -0
  42. data/assets/include/SDL2/SDL_haptic.h +1341 -0
  43. data/assets/include/SDL2/SDL_hidapi.h +451 -0
  44. data/assets/include/SDL2/SDL_hints.h +2569 -0
  45. data/assets/include/SDL2/SDL_image.h +2173 -0
  46. data/assets/include/SDL2/SDL_joystick.h +1066 -0
  47. data/assets/include/SDL2/SDL_keyboard.h +353 -0
  48. data/assets/include/SDL2/SDL_keycode.h +358 -0
  49. data/assets/include/SDL2/SDL_loadso.h +115 -0
  50. data/assets/include/SDL2/SDL_locale.h +103 -0
  51. data/assets/include/SDL2/SDL_log.h +404 -0
  52. data/assets/include/SDL2/SDL_main.h +275 -0
  53. data/assets/include/SDL2/SDL_messagebox.h +193 -0
  54. data/assets/include/SDL2/SDL_metal.h +113 -0
  55. data/assets/include/SDL2/SDL_misc.h +79 -0
  56. data/assets/include/SDL2/SDL_mixer.h +2784 -0
  57. data/assets/include/SDL2/SDL_mouse.h +465 -0
  58. data/assets/include/SDL2/SDL_mutex.h +471 -0
  59. data/assets/include/SDL2/SDL_name.h +33 -0
  60. data/assets/include/SDL2/SDL_opengl.h +2132 -0
  61. data/assets/include/SDL2/SDL_opengl_glext.h +13209 -0
  62. data/assets/include/SDL2/SDL_opengles.h +39 -0
  63. data/assets/include/SDL2/SDL_opengles2.h +52 -0
  64. data/assets/include/SDL2/SDL_opengles2_gl2.h +656 -0
  65. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +4033 -0
  66. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +27 -0
  67. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +311 -0
  68. data/assets/include/SDL2/SDL_pixels.h +644 -0
  69. data/assets/include/SDL2/SDL_platform.h +261 -0
  70. data/assets/include/SDL2/SDL_power.h +88 -0
  71. data/assets/include/SDL2/SDL_quit.h +58 -0
  72. data/assets/include/SDL2/SDL_rect.h +376 -0
  73. data/assets/include/SDL2/SDL_render.h +1919 -0
  74. data/assets/include/SDL2/SDL_revision.h +6 -0
  75. data/assets/include/SDL2/SDL_rwops.h +841 -0
  76. data/assets/include/SDL2/SDL_scancode.h +438 -0
  77. data/assets/include/SDL2/SDL_sensor.h +322 -0
  78. data/assets/include/SDL2/SDL_shape.h +155 -0
  79. data/assets/include/SDL2/SDL_stdinc.h +830 -0
  80. data/assets/include/SDL2/SDL_surface.h +997 -0
  81. data/assets/include/SDL2/SDL_system.h +623 -0
  82. data/assets/include/SDL2/SDL_syswm.h +386 -0
  83. data/assets/include/SDL2/SDL_test.h +69 -0
  84. data/assets/include/SDL2/SDL_test_assert.h +105 -0
  85. data/assets/include/SDL2/SDL_test_common.h +236 -0
  86. data/assets/include/SDL2/SDL_test_compare.h +69 -0
  87. data/assets/include/SDL2/SDL_test_crc32.h +124 -0
  88. data/assets/include/SDL2/SDL_test_font.h +168 -0
  89. data/assets/include/SDL2/SDL_test_fuzzer.h +386 -0
  90. data/assets/include/SDL2/SDL_test_harness.h +134 -0
  91. data/assets/include/SDL2/SDL_test_images.h +78 -0
  92. data/assets/include/SDL2/SDL_test_log.h +67 -0
  93. data/assets/include/SDL2/SDL_test_md5.h +129 -0
  94. data/assets/include/SDL2/SDL_test_memory.h +63 -0
  95. data/assets/include/SDL2/SDL_test_random.h +115 -0
  96. data/assets/include/SDL2/SDL_thread.h +464 -0
  97. data/assets/include/SDL2/SDL_timer.h +222 -0
  98. data/assets/include/SDL2/SDL_touch.h +150 -0
  99. data/assets/include/SDL2/SDL_ttf.h +2316 -0
  100. data/assets/include/SDL2/SDL_types.h +29 -0
  101. data/assets/include/SDL2/SDL_version.h +204 -0
  102. data/assets/include/SDL2/SDL_video.h +2150 -0
  103. data/assets/include/SDL2/SDL_vulkan.h +215 -0
  104. data/assets/include/SDL2/begin_code.h +187 -0
  105. data/assets/include/SDL2/close_code.h +40 -0
  106. data/assets/macos/universal/lib/libFLAC.a +0 -0
  107. data/assets/macos/universal/lib/libSDL2.a +0 -0
  108. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  109. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  110. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  111. data/assets/macos/universal/lib/libmodplug.a +0 -0
  112. data/assets/macos/universal/lib/libmpg123.a +0 -0
  113. data/assets/macos/universal/lib/libogg.a +0 -0
  114. data/assets/macos/universal/lib/libvorbis.a +0 -0
  115. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  116. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  117. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  118. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  119. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  120. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  121. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  122. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  123. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  124. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  125. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  126. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +1 -0
  127. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  128. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  129. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  130. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  131. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  132. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  133. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  134. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  135. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  136. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  137. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  138. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  139. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  140. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  141. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  142. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +1 -0
  143. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  144. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  145. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  146. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  147. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  148. data/ext/Makefile +270 -0
  149. data/ext/audio.c +80 -0
  150. data/ext/audio.o +0 -0
  151. data/ext/extconf.h +3 -0
  152. data/ext/extconf.rb +177 -0
  153. data/ext/mkmf.log +7 -0
  154. data/lib/audio.bundle +0 -0
  155. data/lib/native_audio.rb +50 -0
  156. metadata +198 -0
@@ -0,0 +1,2150 @@
1
+ /*
2
+ Simple DirectMedia Layer
3
+ Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
4
+
5
+ This software is provided 'as-is', without any express or implied
6
+ warranty. In no event will the authors be held liable for any damages
7
+ arising from the use of this software.
8
+
9
+ Permission is granted to anyone to use this software for any purpose,
10
+ including commercial applications, and to alter it and redistribute it
11
+ freely, subject to the following restrictions:
12
+
13
+ 1. The origin of this software must not be misrepresented; you must not
14
+ claim that you wrote the original software. If you use this software
15
+ in a product, an acknowledgment in the product documentation would be
16
+ appreciated but is not required.
17
+ 2. Altered source versions must be plainly marked as such, and must not be
18
+ misrepresented as being the original software.
19
+ 3. This notice may not be removed or altered from any source distribution.
20
+ */
21
+
22
+ /**
23
+ * \file SDL_video.h
24
+ *
25
+ * Header file for SDL video functions.
26
+ */
27
+
28
+ #ifndef SDL_video_h_
29
+ #define SDL_video_h_
30
+
31
+ #include "SDL_stdinc.h"
32
+ #include "SDL_pixels.h"
33
+ #include "SDL_rect.h"
34
+ #include "SDL_surface.h"
35
+
36
+ #include "begin_code.h"
37
+ /* Set up for C function definitions, even when using C++ */
38
+ #ifdef __cplusplus
39
+ extern "C" {
40
+ #endif
41
+
42
+ /**
43
+ * \brief The structure that defines a display mode
44
+ *
45
+ * \sa SDL_GetNumDisplayModes()
46
+ * \sa SDL_GetDisplayMode()
47
+ * \sa SDL_GetDesktopDisplayMode()
48
+ * \sa SDL_GetCurrentDisplayMode()
49
+ * \sa SDL_GetClosestDisplayMode()
50
+ * \sa SDL_SetWindowDisplayMode()
51
+ * \sa SDL_GetWindowDisplayMode()
52
+ */
53
+ typedef struct
54
+ {
55
+ Uint32 format; /**< pixel format */
56
+ int w; /**< width, in screen coordinates */
57
+ int h; /**< height, in screen coordinates */
58
+ int refresh_rate; /**< refresh rate (or zero for unspecified) */
59
+ void *driverdata; /**< driver-specific data, initialize to 0 */
60
+ } SDL_DisplayMode;
61
+
62
+ /**
63
+ * \brief The type used to identify a window
64
+ *
65
+ * \sa SDL_CreateWindow()
66
+ * \sa SDL_CreateWindowFrom()
67
+ * \sa SDL_DestroyWindow()
68
+ * \sa SDL_FlashWindow()
69
+ * \sa SDL_GetWindowData()
70
+ * \sa SDL_GetWindowFlags()
71
+ * \sa SDL_GetWindowGrab()
72
+ * \sa SDL_GetWindowKeyboardGrab()
73
+ * \sa SDL_GetWindowMouseGrab()
74
+ * \sa SDL_GetWindowPosition()
75
+ * \sa SDL_GetWindowSize()
76
+ * \sa SDL_GetWindowTitle()
77
+ * \sa SDL_HideWindow()
78
+ * \sa SDL_MaximizeWindow()
79
+ * \sa SDL_MinimizeWindow()
80
+ * \sa SDL_RaiseWindow()
81
+ * \sa SDL_RestoreWindow()
82
+ * \sa SDL_SetWindowData()
83
+ * \sa SDL_SetWindowFullscreen()
84
+ * \sa SDL_SetWindowGrab()
85
+ * \sa SDL_SetWindowKeyboardGrab()
86
+ * \sa SDL_SetWindowMouseGrab()
87
+ * \sa SDL_SetWindowIcon()
88
+ * \sa SDL_SetWindowPosition()
89
+ * \sa SDL_SetWindowSize()
90
+ * \sa SDL_SetWindowBordered()
91
+ * \sa SDL_SetWindowResizable()
92
+ * \sa SDL_SetWindowTitle()
93
+ * \sa SDL_ShowWindow()
94
+ */
95
+ typedef struct SDL_Window SDL_Window;
96
+
97
+ /**
98
+ * \brief The flags on a window
99
+ *
100
+ * \sa SDL_GetWindowFlags()
101
+ */
102
+ typedef enum
103
+ {
104
+ SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */
105
+ SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */
106
+ SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */
107
+ SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */
108
+ SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */
109
+ SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */
110
+ SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */
111
+ SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */
112
+ SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */
113
+ SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */
114
+ SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */
115
+ SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ),
116
+ SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */
117
+ SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported.
118
+ On macOS NSHighResolutionCapable must be set true in the
119
+ application's Info.plist for this to have any effect. */
120
+ SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */
121
+ SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */
122
+ SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */
123
+ SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */
124
+ SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */
125
+ SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */
126
+ SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */
127
+ SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */
128
+ SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */
129
+
130
+ SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */
131
+ } SDL_WindowFlags;
132
+
133
+ /**
134
+ * \brief Used to indicate that you don't care what the window position is.
135
+ */
136
+ #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u
137
+ #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
138
+ #define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0)
139
+ #define SDL_WINDOWPOS_ISUNDEFINED(X) \
140
+ (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
141
+
142
+ /**
143
+ * \brief Used to indicate that the window position should be centered.
144
+ */
145
+ #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u
146
+ #define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X))
147
+ #define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0)
148
+ #define SDL_WINDOWPOS_ISCENTERED(X) \
149
+ (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
150
+
151
+ /**
152
+ * \brief Event subtype for window events
153
+ */
154
+ typedef enum
155
+ {
156
+ SDL_WINDOWEVENT_NONE, /**< Never used */
157
+ SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */
158
+ SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */
159
+ SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be
160
+ redrawn */
161
+ SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2
162
+ */
163
+ SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */
164
+ SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as
165
+ a result of an API call or through the
166
+ system or user changing the window size. */
167
+ SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */
168
+ SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */
169
+ SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size
170
+ and position */
171
+ SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */
172
+ SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */
173
+ SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */
174
+ SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */
175
+ SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */
176
+ SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */
177
+ SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */
178
+ SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */
179
+ SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */
180
+ } SDL_WindowEventID;
181
+
182
+ /**
183
+ * \brief Event subtype for display events
184
+ */
185
+ typedef enum
186
+ {
187
+ SDL_DISPLAYEVENT_NONE, /**< Never used */
188
+ SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */
189
+ SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */
190
+ SDL_DISPLAYEVENT_DISCONNECTED /**< Display has been removed from the system */
191
+ } SDL_DisplayEventID;
192
+
193
+ /**
194
+ * \brief Display orientation
195
+ */
196
+ typedef enum
197
+ {
198
+ SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */
199
+ SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */
200
+ SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */
201
+ SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */
202
+ SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */
203
+ } SDL_DisplayOrientation;
204
+
205
+ /**
206
+ * \brief Window flash operation
207
+ */
208
+ typedef enum
209
+ {
210
+ SDL_FLASH_CANCEL, /**< Cancel any window flash state */
211
+ SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */
212
+ SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */
213
+ } SDL_FlashOperation;
214
+
215
+ /**
216
+ * \brief An opaque handle to an OpenGL context.
217
+ */
218
+ typedef void *SDL_GLContext;
219
+
220
+ /**
221
+ * \brief OpenGL configuration attributes
222
+ */
223
+ typedef enum
224
+ {
225
+ SDL_GL_RED_SIZE,
226
+ SDL_GL_GREEN_SIZE,
227
+ SDL_GL_BLUE_SIZE,
228
+ SDL_GL_ALPHA_SIZE,
229
+ SDL_GL_BUFFER_SIZE,
230
+ SDL_GL_DOUBLEBUFFER,
231
+ SDL_GL_DEPTH_SIZE,
232
+ SDL_GL_STENCIL_SIZE,
233
+ SDL_GL_ACCUM_RED_SIZE,
234
+ SDL_GL_ACCUM_GREEN_SIZE,
235
+ SDL_GL_ACCUM_BLUE_SIZE,
236
+ SDL_GL_ACCUM_ALPHA_SIZE,
237
+ SDL_GL_STEREO,
238
+ SDL_GL_MULTISAMPLEBUFFERS,
239
+ SDL_GL_MULTISAMPLESAMPLES,
240
+ SDL_GL_ACCELERATED_VISUAL,
241
+ SDL_GL_RETAINED_BACKING,
242
+ SDL_GL_CONTEXT_MAJOR_VERSION,
243
+ SDL_GL_CONTEXT_MINOR_VERSION,
244
+ SDL_GL_CONTEXT_EGL,
245
+ SDL_GL_CONTEXT_FLAGS,
246
+ SDL_GL_CONTEXT_PROFILE_MASK,
247
+ SDL_GL_SHARE_WITH_CURRENT_CONTEXT,
248
+ SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
249
+ SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
250
+ SDL_GL_CONTEXT_RESET_NOTIFICATION,
251
+ SDL_GL_CONTEXT_NO_ERROR,
252
+ SDL_GL_FLOATBUFFERS
253
+ } SDL_GLattr;
254
+
255
+ typedef enum
256
+ {
257
+ SDL_GL_CONTEXT_PROFILE_CORE = 0x0001,
258
+ SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002,
259
+ SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
260
+ } SDL_GLprofile;
261
+
262
+ typedef enum
263
+ {
264
+ SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001,
265
+ SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002,
266
+ SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004,
267
+ SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008
268
+ } SDL_GLcontextFlag;
269
+
270
+ typedef enum
271
+ {
272
+ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000,
273
+ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001
274
+ } SDL_GLcontextReleaseFlag;
275
+
276
+ typedef enum
277
+ {
278
+ SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000,
279
+ SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001
280
+ } SDL_GLContextResetNotification;
281
+
282
+ /* Function prototypes */
283
+
284
+ /**
285
+ * Get the number of video drivers compiled into SDL.
286
+ *
287
+ * \returns a number >= 1 on success or a negative error code on failure; call
288
+ * SDL_GetError() for more information.
289
+ *
290
+ * \since This function is available since SDL 2.0.0.
291
+ *
292
+ * \sa SDL_GetVideoDriver
293
+ */
294
+ extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void);
295
+
296
+ /**
297
+ * Get the name of a built in video driver.
298
+ *
299
+ * The video drivers are presented in the order in which they are normally
300
+ * checked during initialization.
301
+ *
302
+ * \param index the index of a video driver
303
+ * \returns the name of the video driver with the given **index**.
304
+ *
305
+ * \since This function is available since SDL 2.0.0.
306
+ *
307
+ * \sa SDL_GetNumVideoDrivers
308
+ */
309
+ extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index);
310
+
311
+ /**
312
+ * Initialize the video subsystem, optionally specifying a video driver.
313
+ *
314
+ * This function initializes the video subsystem, setting up a connection to
315
+ * the window manager, etc, and determines the available display modes and
316
+ * pixel formats, but does not initialize a window or graphics mode.
317
+ *
318
+ * If you use this function and you haven't used the SDL_INIT_VIDEO flag with
319
+ * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit()
320
+ * before calling SDL_Quit().
321
+ *
322
+ * It is safe to call this function multiple times. SDL_VideoInit() will call
323
+ * SDL_VideoQuit() itself if the video subsystem has already been initialized.
324
+ *
325
+ * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a
326
+ * specific `driver_name`.
327
+ *
328
+ * \param driver_name the name of a video driver to initialize, or NULL for
329
+ * the default driver
330
+ * \returns 0 on success or a negative error code on failure; call
331
+ * SDL_GetError() for more information.
332
+ *
333
+ * \since This function is available since SDL 2.0.0.
334
+ *
335
+ * \sa SDL_GetNumVideoDrivers
336
+ * \sa SDL_GetVideoDriver
337
+ * \sa SDL_InitSubSystem
338
+ * \sa SDL_VideoQuit
339
+ */
340
+ extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name);
341
+
342
+ /**
343
+ * Shut down the video subsystem, if initialized with SDL_VideoInit().
344
+ *
345
+ * This function closes all windows, and restores the original video mode.
346
+ *
347
+ * \since This function is available since SDL 2.0.0.
348
+ *
349
+ * \sa SDL_VideoInit
350
+ */
351
+ extern DECLSPEC void SDLCALL SDL_VideoQuit(void);
352
+
353
+ /**
354
+ * Get the name of the currently initialized video driver.
355
+ *
356
+ * \returns the name of the current video driver or NULL if no driver has been
357
+ * initialized.
358
+ *
359
+ * \since This function is available since SDL 2.0.0.
360
+ *
361
+ * \sa SDL_GetNumVideoDrivers
362
+ * \sa SDL_GetVideoDriver
363
+ */
364
+ extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void);
365
+
366
+ /**
367
+ * Get the number of available video displays.
368
+ *
369
+ * \returns a number >= 1 or a negative error code on failure; call
370
+ * SDL_GetError() for more information.
371
+ *
372
+ * \since This function is available since SDL 2.0.0.
373
+ *
374
+ * \sa SDL_GetDisplayBounds
375
+ */
376
+ extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void);
377
+
378
+ /**
379
+ * Get the name of a display in UTF-8 encoding.
380
+ *
381
+ * \param displayIndex the index of display from which the name should be
382
+ * queried
383
+ * \returns the name of a display or NULL for an invalid display index or
384
+ * failure; call SDL_GetError() for more information.
385
+ *
386
+ * \since This function is available since SDL 2.0.0.
387
+ *
388
+ * \sa SDL_GetNumVideoDisplays
389
+ */
390
+ extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex);
391
+
392
+ /**
393
+ * Get the desktop area represented by a display.
394
+ *
395
+ * The primary display (`displayIndex` zero) is always located at 0,0.
396
+ *
397
+ * \param displayIndex the index of the display to query
398
+ * \param rect the SDL_Rect structure filled in with the display bounds
399
+ * \returns 0 on success or a negative error code on failure; call
400
+ * SDL_GetError() for more information.
401
+ *
402
+ * \since This function is available since SDL 2.0.0.
403
+ *
404
+ * \sa SDL_GetNumVideoDisplays
405
+ */
406
+ extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect);
407
+
408
+ /**
409
+ * Get the usable desktop area represented by a display.
410
+ *
411
+ * The primary display (`displayIndex` zero) is always located at 0,0.
412
+ *
413
+ * This is the same area as SDL_GetDisplayBounds() reports, but with portions
414
+ * reserved by the system removed. For example, on Apple's macOS, this
415
+ * subtracts the area occupied by the menu bar and dock.
416
+ *
417
+ * Setting a window to be fullscreen generally bypasses these unusable areas,
418
+ * so these are good guidelines for the maximum space available to a
419
+ * non-fullscreen window.
420
+ *
421
+ * The parameter `rect` is ignored if it is NULL.
422
+ *
423
+ * This function also returns -1 if the parameter `displayIndex` is out of
424
+ * range.
425
+ *
426
+ * \param displayIndex the index of the display to query the usable bounds
427
+ * from
428
+ * \param rect the SDL_Rect structure filled in with the display bounds
429
+ * \returns 0 on success or a negative error code on failure; call
430
+ * SDL_GetError() for more information.
431
+ *
432
+ * \since This function is available since SDL 2.0.5.
433
+ *
434
+ * \sa SDL_GetDisplayBounds
435
+ * \sa SDL_GetNumVideoDisplays
436
+ */
437
+ extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect);
438
+
439
+ /**
440
+ * Get the dots/pixels-per-inch for a display.
441
+ *
442
+ * Diagonal, horizontal and vertical DPI can all be optionally returned if the
443
+ * appropriate parameter is non-NULL.
444
+ *
445
+ * A failure of this function usually means that either no DPI information is
446
+ * available or the `displayIndex` is out of range.
447
+ *
448
+ * **WARNING**: This reports the DPI that the hardware reports, and it is not
449
+ * always reliable! It is almost always better to use SDL_GetWindowSize() to
450
+ * find the window size, which might be in logical points instead of pixels,
451
+ * and then SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(),
452
+ * SDL_Metal_GetDrawableSize(), or SDL_GetRendererOutputSize(), and compare
453
+ * the two values to get an actual scaling value between the two. We will be
454
+ * rethinking how high-dpi details should be managed in SDL3 to make things
455
+ * more consistent, reliable, and clear.
456
+ *
457
+ * \param displayIndex the index of the display from which DPI information
458
+ * should be queried
459
+ * \param ddpi a pointer filled in with the diagonal DPI of the display; may
460
+ * be NULL
461
+ * \param hdpi a pointer filled in with the horizontal DPI of the display; may
462
+ * be NULL
463
+ * \param vdpi a pointer filled in with the vertical DPI of the display; may
464
+ * be NULL
465
+ * \returns 0 on success or a negative error code on failure; call
466
+ * SDL_GetError() for more information.
467
+ *
468
+ * \since This function is available since SDL 2.0.4.
469
+ *
470
+ * \sa SDL_GetNumVideoDisplays
471
+ */
472
+ extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi);
473
+
474
+ /**
475
+ * Get the orientation of a display.
476
+ *
477
+ * \param displayIndex the index of the display to query
478
+ * \returns The SDL_DisplayOrientation enum value of the display, or
479
+ * `SDL_ORIENTATION_UNKNOWN` if it isn't available.
480
+ *
481
+ * \since This function is available since SDL 2.0.9.
482
+ *
483
+ * \sa SDL_GetNumVideoDisplays
484
+ */
485
+ extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex);
486
+
487
+ /**
488
+ * Get the number of available display modes.
489
+ *
490
+ * The `displayIndex` needs to be in the range from 0 to
491
+ * SDL_GetNumVideoDisplays() - 1.
492
+ *
493
+ * \param displayIndex the index of the display to query
494
+ * \returns a number >= 1 on success or a negative error code on failure; call
495
+ * SDL_GetError() for more information.
496
+ *
497
+ * \since This function is available since SDL 2.0.0.
498
+ *
499
+ * \sa SDL_GetDisplayMode
500
+ * \sa SDL_GetNumVideoDisplays
501
+ */
502
+ extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex);
503
+
504
+ /**
505
+ * Get information about a specific display mode.
506
+ *
507
+ * The display modes are sorted in this priority:
508
+ *
509
+ * - width -> largest to smallest
510
+ * - height -> largest to smallest
511
+ * - bits per pixel -> more colors to fewer colors
512
+ * - packed pixel layout -> largest to smallest
513
+ * - refresh rate -> highest to lowest
514
+ *
515
+ * \param displayIndex the index of the display to query
516
+ * \param modeIndex the index of the display mode to query
517
+ * \param mode an SDL_DisplayMode structure filled in with the mode at
518
+ * `modeIndex`
519
+ * \returns 0 on success or a negative error code on failure; call
520
+ * SDL_GetError() for more information.
521
+ *
522
+ * \since This function is available since SDL 2.0.0.
523
+ *
524
+ * \sa SDL_GetNumDisplayModes
525
+ */
526
+ extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex,
527
+ SDL_DisplayMode * mode);
528
+
529
+ /**
530
+ * Get information about the desktop's display mode.
531
+ *
532
+ * There's a difference between this function and SDL_GetCurrentDisplayMode()
533
+ * when SDL runs fullscreen and has changed the resolution. In that case this
534
+ * function will return the previous native display mode, and not the current
535
+ * display mode.
536
+ *
537
+ * \param displayIndex the index of the display to query
538
+ * \param mode an SDL_DisplayMode structure filled in with the current display
539
+ * mode
540
+ * \returns 0 on success or a negative error code on failure; call
541
+ * SDL_GetError() for more information.
542
+ *
543
+ * \since This function is available since SDL 2.0.0.
544
+ *
545
+ * \sa SDL_GetCurrentDisplayMode
546
+ * \sa SDL_GetDisplayMode
547
+ * \sa SDL_SetWindowDisplayMode
548
+ */
549
+ extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode);
550
+
551
+ /**
552
+ * Get information about the current display mode.
553
+ *
554
+ * There's a difference between this function and SDL_GetDesktopDisplayMode()
555
+ * when SDL runs fullscreen and has changed the resolution. In that case this
556
+ * function will return the current display mode, and not the previous native
557
+ * display mode.
558
+ *
559
+ * \param displayIndex the index of the display to query
560
+ * \param mode an SDL_DisplayMode structure filled in with the current display
561
+ * mode
562
+ * \returns 0 on success or a negative error code on failure; call
563
+ * SDL_GetError() for more information.
564
+ *
565
+ * \since This function is available since SDL 2.0.0.
566
+ *
567
+ * \sa SDL_GetDesktopDisplayMode
568
+ * \sa SDL_GetDisplayMode
569
+ * \sa SDL_GetNumVideoDisplays
570
+ * \sa SDL_SetWindowDisplayMode
571
+ */
572
+ extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode);
573
+
574
+
575
+ /**
576
+ * Get the closest match to the requested display mode.
577
+ *
578
+ * The available display modes are scanned and `closest` is filled in with the
579
+ * closest mode matching the requested mode and returned. The mode format and
580
+ * refresh rate default to the desktop mode if they are set to 0. The modes
581
+ * are scanned with size being first priority, format being second priority,
582
+ * and finally checking the refresh rate. If all the available modes are too
583
+ * small, then NULL is returned.
584
+ *
585
+ * \param displayIndex the index of the display to query
586
+ * \param mode an SDL_DisplayMode structure containing the desired display
587
+ * mode
588
+ * \param closest an SDL_DisplayMode structure filled in with the closest
589
+ * match of the available display modes
590
+ * \returns the passed in value `closest` or NULL if no matching video mode
591
+ * was available; call SDL_GetError() for more information.
592
+ *
593
+ * \since This function is available since SDL 2.0.0.
594
+ *
595
+ * \sa SDL_GetDisplayMode
596
+ * \sa SDL_GetNumDisplayModes
597
+ */
598
+ extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest);
599
+
600
+ /**
601
+ * Get the index of the display containing a point
602
+ *
603
+ * \param point the point to query
604
+ * \returns the index of the display containing the point or a negative error
605
+ * code on failure; call SDL_GetError() for more information.
606
+ *
607
+ * \since This function is available since SDL 2.24.0.
608
+ *
609
+ * \sa SDL_GetDisplayBounds
610
+ * \sa SDL_GetNumVideoDisplays
611
+ */
612
+ extern DECLSPEC int SDLCALL SDL_GetPointDisplayIndex(const SDL_Point * point);
613
+
614
+ /**
615
+ * Get the index of the display primarily containing a rect
616
+ *
617
+ * \param rect the rect to query
618
+ * \returns the index of the display entirely containing the rect or closest
619
+ * to the center of the rect on success or a negative error code on
620
+ * failure; call SDL_GetError() for more information.
621
+ *
622
+ * \since This function is available since SDL 2.24.0.
623
+ *
624
+ * \sa SDL_GetDisplayBounds
625
+ * \sa SDL_GetNumVideoDisplays
626
+ */
627
+ extern DECLSPEC int SDLCALL SDL_GetRectDisplayIndex(const SDL_Rect * rect);
628
+
629
+ /**
630
+ * Get the index of the display associated with a window.
631
+ *
632
+ * \param window the window to query
633
+ * \returns the index of the display containing the center of the window on
634
+ * success or a negative error code on failure; call SDL_GetError()
635
+ * for more information.
636
+ *
637
+ * \since This function is available since SDL 2.0.0.
638
+ *
639
+ * \sa SDL_GetDisplayBounds
640
+ * \sa SDL_GetNumVideoDisplays
641
+ */
642
+ extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window);
643
+
644
+ /**
645
+ * Set the display mode to use when a window is visible at fullscreen.
646
+ *
647
+ * This only affects the display mode used when the window is fullscreen. To
648
+ * change the window size when the window is not fullscreen, use
649
+ * SDL_SetWindowSize().
650
+ *
651
+ * \param window the window to affect
652
+ * \param mode the SDL_DisplayMode structure representing the mode to use, or
653
+ * NULL to use the window's dimensions and the desktop's format
654
+ * and refresh rate
655
+ * \returns 0 on success or a negative error code on failure; call
656
+ * SDL_GetError() for more information.
657
+ *
658
+ * \since This function is available since SDL 2.0.0.
659
+ *
660
+ * \sa SDL_GetWindowDisplayMode
661
+ * \sa SDL_SetWindowFullscreen
662
+ */
663
+ extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window,
664
+ const SDL_DisplayMode * mode);
665
+
666
+ /**
667
+ * Query the display mode to use when a window is visible at fullscreen.
668
+ *
669
+ * \param window the window to query
670
+ * \param mode an SDL_DisplayMode structure filled in with the fullscreen
671
+ * display mode
672
+ * \returns 0 on success or a negative error code on failure; call
673
+ * SDL_GetError() for more information.
674
+ *
675
+ * \since This function is available since SDL 2.0.0.
676
+ *
677
+ * \sa SDL_SetWindowDisplayMode
678
+ * \sa SDL_SetWindowFullscreen
679
+ */
680
+ extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window,
681
+ SDL_DisplayMode * mode);
682
+
683
+ /**
684
+ * Get the raw ICC profile data for the screen the window is currently on.
685
+ *
686
+ * Data returned should be freed with SDL_free.
687
+ *
688
+ * \param window the window to query
689
+ * \param size the size of the ICC profile
690
+ * \returns the raw ICC profile data on success or NULL on failure; call
691
+ * SDL_GetError() for more information.
692
+ *
693
+ * \since This function is available since SDL 2.0.18.
694
+ */
695
+ extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size);
696
+
697
+ /**
698
+ * Get the pixel format associated with the window.
699
+ *
700
+ * \param window the window to query
701
+ * \returns the pixel format of the window on success or
702
+ * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more
703
+ * information.
704
+ *
705
+ * \since This function is available since SDL 2.0.0.
706
+ */
707
+ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window);
708
+
709
+ /**
710
+ * Create a window with the specified position, dimensions, and flags.
711
+ *
712
+ * `flags` may be any of the following OR'd together:
713
+ *
714
+ * - `SDL_WINDOW_FULLSCREEN`: fullscreen window
715
+ * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution
716
+ * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context
717
+ * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance
718
+ * - `SDL_WINDOW_METAL`: window usable with a Metal instance
719
+ * - `SDL_WINDOW_HIDDEN`: window is not visible
720
+ * - `SDL_WINDOW_BORDERLESS`: no window decoration
721
+ * - `SDL_WINDOW_RESIZABLE`: window can be resized
722
+ * - `SDL_WINDOW_MINIMIZED`: window is minimized
723
+ * - `SDL_WINDOW_MAXIMIZED`: window is maximized
724
+ * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus
725
+ * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if
726
+ * supported (>= SDL 2.0.1)
727
+ *
728
+ * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is
729
+ * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be
730
+ * queried later using SDL_GetWindowFlags().
731
+ *
732
+ * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist
733
+ * property to YES, otherwise you will not receive a High-DPI OpenGL canvas.
734
+ *
735
+ * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size
736
+ * in pixels may differ from its size in screen coordinates on platforms with
737
+ * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the
738
+ * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or
739
+ * SDL_GetRendererOutputSize() to query the drawable size in pixels. Note that
740
+ * when this flag is set, the drawable size can vary after the window is
741
+ * created and should be queried after major window events such as when the
742
+ * window is resized or moved between displays.
743
+ *
744
+ * If the window is set fullscreen, the width and height parameters `w` and
745
+ * `h` will not be used. However, invalid size parameters (e.g. too large) may
746
+ * still fail. Window size is actually limited to 16384 x 16384 for all
747
+ * platforms at window creation.
748
+ *
749
+ * If the window is created with any of the SDL_WINDOW_OPENGL or
750
+ * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function
751
+ * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the
752
+ * corresponding UnloadLibrary function is called by SDL_DestroyWindow().
753
+ *
754
+ * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver,
755
+ * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail.
756
+ *
757
+ * If SDL_WINDOW_METAL is specified on an OS that does not support Metal,
758
+ * SDL_CreateWindow() will fail.
759
+ *
760
+ * On non-Apple devices, SDL requires you to either not link to the Vulkan
761
+ * loader or link to a dynamic library version. This limitation may be removed
762
+ * in a future version of SDL.
763
+ *
764
+ * \param title the title of the window, in UTF-8 encoding
765
+ * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or
766
+ * `SDL_WINDOWPOS_UNDEFINED`
767
+ * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or
768
+ * `SDL_WINDOWPOS_UNDEFINED`
769
+ * \param w the width of the window, in screen coordinates
770
+ * \param h the height of the window, in screen coordinates
771
+ * \param flags 0, or one or more SDL_WindowFlags OR'd together
772
+ * \returns the window that was created or NULL on failure; call
773
+ * SDL_GetError() for more information.
774
+ *
775
+ * \since This function is available since SDL 2.0.0.
776
+ *
777
+ * \sa SDL_CreateWindowFrom
778
+ * \sa SDL_DestroyWindow
779
+ */
780
+ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title,
781
+ int x, int y, int w,
782
+ int h, Uint32 flags);
783
+
784
+ /**
785
+ * Create an SDL window from an existing native window.
786
+ *
787
+ * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows)
788
+ * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured
789
+ * before using SDL_CreateWindowFrom().
790
+ *
791
+ * \param data a pointer to driver-dependent window creation data, typically
792
+ * your native window cast to a void*
793
+ * \returns the window that was created or NULL on failure; call
794
+ * SDL_GetError() for more information.
795
+ *
796
+ * \since This function is available since SDL 2.0.0.
797
+ *
798
+ * \sa SDL_CreateWindow
799
+ * \sa SDL_DestroyWindow
800
+ */
801
+ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data);
802
+
803
+ /**
804
+ * Get the numeric ID of a window.
805
+ *
806
+ * The numeric ID is what SDL_WindowEvent references, and is necessary to map
807
+ * these events to specific SDL_Window objects.
808
+ *
809
+ * \param window the window to query
810
+ * \returns the ID of the window on success or 0 on failure; call
811
+ * SDL_GetError() for more information.
812
+ *
813
+ * \since This function is available since SDL 2.0.0.
814
+ *
815
+ * \sa SDL_GetWindowFromID
816
+ */
817
+ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window);
818
+
819
+ /**
820
+ * Get a window from a stored ID.
821
+ *
822
+ * The numeric ID is what SDL_WindowEvent references, and is necessary to map
823
+ * these events to specific SDL_Window objects.
824
+ *
825
+ * \param id the ID of the window
826
+ * \returns the window associated with `id` or NULL if it doesn't exist; call
827
+ * SDL_GetError() for more information.
828
+ *
829
+ * \since This function is available since SDL 2.0.0.
830
+ *
831
+ * \sa SDL_GetWindowID
832
+ */
833
+ extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id);
834
+
835
+ /**
836
+ * Get the window flags.
837
+ *
838
+ * \param window the window to query
839
+ * \returns a mask of the SDL_WindowFlags associated with `window`
840
+ *
841
+ * \since This function is available since SDL 2.0.0.
842
+ *
843
+ * \sa SDL_CreateWindow
844
+ * \sa SDL_HideWindow
845
+ * \sa SDL_MaximizeWindow
846
+ * \sa SDL_MinimizeWindow
847
+ * \sa SDL_SetWindowFullscreen
848
+ * \sa SDL_SetWindowGrab
849
+ * \sa SDL_ShowWindow
850
+ */
851
+ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window);
852
+
853
+ /**
854
+ * Set the title of a window.
855
+ *
856
+ * This string is expected to be in UTF-8 encoding.
857
+ *
858
+ * \param window the window to change
859
+ * \param title the desired window title in UTF-8 format
860
+ *
861
+ * \since This function is available since SDL 2.0.0.
862
+ *
863
+ * \sa SDL_GetWindowTitle
864
+ */
865
+ extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window,
866
+ const char *title);
867
+
868
+ /**
869
+ * Get the title of a window.
870
+ *
871
+ * \param window the window to query
872
+ * \returns the title of the window in UTF-8 format or "" if there is no
873
+ * title.
874
+ *
875
+ * \since This function is available since SDL 2.0.0.
876
+ *
877
+ * \sa SDL_SetWindowTitle
878
+ */
879
+ extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window);
880
+
881
+ /**
882
+ * Set the icon for a window.
883
+ *
884
+ * \param window the window to change
885
+ * \param icon an SDL_Surface structure containing the icon for the window
886
+ *
887
+ * \since This function is available since SDL 2.0.0.
888
+ */
889
+ extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window,
890
+ SDL_Surface * icon);
891
+
892
+ /**
893
+ * Associate an arbitrary named pointer with a window.
894
+ *
895
+ * `name` is case-sensitive.
896
+ *
897
+ * \param window the window to associate with the pointer
898
+ * \param name the name of the pointer
899
+ * \param userdata the associated pointer
900
+ * \returns the previous value associated with `name`.
901
+ *
902
+ * \since This function is available since SDL 2.0.0.
903
+ *
904
+ * \sa SDL_GetWindowData
905
+ */
906
+ extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window,
907
+ const char *name,
908
+ void *userdata);
909
+
910
+ /**
911
+ * Retrieve the data pointer associated with a window.
912
+ *
913
+ * \param window the window to query
914
+ * \param name the name of the pointer
915
+ * \returns the value associated with `name`.
916
+ *
917
+ * \since This function is available since SDL 2.0.0.
918
+ *
919
+ * \sa SDL_SetWindowData
920
+ */
921
+ extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window,
922
+ const char *name);
923
+
924
+ /**
925
+ * Set the position of a window.
926
+ *
927
+ * The window coordinate origin is the upper left of the display.
928
+ *
929
+ * \param window the window to reposition
930
+ * \param x the x coordinate of the window in screen coordinates, or
931
+ * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`
932
+ * \param y the y coordinate of the window in screen coordinates, or
933
+ * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`
934
+ *
935
+ * \since This function is available since SDL 2.0.0.
936
+ *
937
+ * \sa SDL_GetWindowPosition
938
+ */
939
+ extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window,
940
+ int x, int y);
941
+
942
+ /**
943
+ * Get the position of a window.
944
+ *
945
+ * If you do not need the value for one of the positions a NULL may be passed
946
+ * in the `x` or `y` parameter.
947
+ *
948
+ * \param window the window to query
949
+ * \param x a pointer filled in with the x position of the window, in screen
950
+ * coordinates, may be NULL
951
+ * \param y a pointer filled in with the y position of the window, in screen
952
+ * coordinates, may be NULL
953
+ *
954
+ * \since This function is available since SDL 2.0.0.
955
+ *
956
+ * \sa SDL_SetWindowPosition
957
+ */
958
+ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window,
959
+ int *x, int *y);
960
+
961
+ /**
962
+ * Set the size of a window's client area.
963
+ *
964
+ * The window size in screen coordinates may differ from the size in pixels,
965
+ * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform
966
+ * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or
967
+ * SDL_GetRendererOutputSize() to get the real client area size in pixels.
968
+ *
969
+ * Fullscreen windows automatically match the size of the display mode, and
970
+ * you should use SDL_SetWindowDisplayMode() to change their size.
971
+ *
972
+ * \param window the window to change
973
+ * \param w the width of the window in pixels, in screen coordinates, must be
974
+ * > 0
975
+ * \param h the height of the window in pixels, in screen coordinates, must be
976
+ * > 0
977
+ *
978
+ * \since This function is available since SDL 2.0.0.
979
+ *
980
+ * \sa SDL_GetWindowSize
981
+ * \sa SDL_SetWindowDisplayMode
982
+ */
983
+ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
984
+ int h);
985
+
986
+ /**
987
+ * Get the size of a window's client area.
988
+ *
989
+ * NULL can safely be passed as the `w` or `h` parameter if the width or
990
+ * height value is not desired.
991
+ *
992
+ * The window size in screen coordinates may differ from the size in pixels,
993
+ * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform
994
+ * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(),
995
+ * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the
996
+ * real client area size in pixels.
997
+ *
998
+ * \param window the window to query the width and height from
999
+ * \param w a pointer filled in with the width of the window, in screen
1000
+ * coordinates, may be NULL
1001
+ * \param h a pointer filled in with the height of the window, in screen
1002
+ * coordinates, may be NULL
1003
+ *
1004
+ * \since This function is available since SDL 2.0.0.
1005
+ *
1006
+ * \sa SDL_GL_GetDrawableSize
1007
+ * \sa SDL_Vulkan_GetDrawableSize
1008
+ * \sa SDL_SetWindowSize
1009
+ */
1010
+ extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w,
1011
+ int *h);
1012
+
1013
+ /**
1014
+ * Get the size of a window's borders (decorations) around the client area.
1015
+ *
1016
+ * Note: If this function fails (returns -1), the size values will be
1017
+ * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the
1018
+ * window in question was borderless.
1019
+ *
1020
+ * Note: This function may fail on systems where the window has not yet been
1021
+ * decorated by the display server (for example, immediately after calling
1022
+ * SDL_CreateWindow). It is recommended that you wait at least until the
1023
+ * window has been presented and composited, so that the window system has a
1024
+ * chance to decorate the window and provide the border dimensions to SDL.
1025
+ *
1026
+ * This function also returns -1 if getting the information is not supported.
1027
+ *
1028
+ * \param window the window to query the size values of the border
1029
+ * (decorations) from
1030
+ * \param top pointer to variable for storing the size of the top border; NULL
1031
+ * is permitted
1032
+ * \param left pointer to variable for storing the size of the left border;
1033
+ * NULL is permitted
1034
+ * \param bottom pointer to variable for storing the size of the bottom
1035
+ * border; NULL is permitted
1036
+ * \param right pointer to variable for storing the size of the right border;
1037
+ * NULL is permitted
1038
+ * \returns 0 on success or a negative error code on failure; call
1039
+ * SDL_GetError() for more information.
1040
+ *
1041
+ * \since This function is available since SDL 2.0.5.
1042
+ *
1043
+ * \sa SDL_GetWindowSize
1044
+ */
1045
+ extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window,
1046
+ int *top, int *left,
1047
+ int *bottom, int *right);
1048
+
1049
+ /**
1050
+ * Get the size of a window in pixels.
1051
+ *
1052
+ * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI
1053
+ * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a
1054
+ * platform with high-DPI support (Apple calls this "Retina"), and not
1055
+ * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
1056
+ *
1057
+ * \param window the window from which the drawable size should be queried
1058
+ * \param w a pointer to variable for storing the width in pixels, may be NULL
1059
+ * \param h a pointer to variable for storing the height in pixels, may be
1060
+ * NULL
1061
+ *
1062
+ * \since This function is available since SDL 2.26.0.
1063
+ *
1064
+ * \sa SDL_CreateWindow
1065
+ * \sa SDL_GetWindowSize
1066
+ */
1067
+ extern DECLSPEC void SDLCALL SDL_GetWindowSizeInPixels(SDL_Window * window,
1068
+ int *w, int *h);
1069
+
1070
+ /**
1071
+ * Set the minimum size of a window's client area.
1072
+ *
1073
+ * \param window the window to change
1074
+ * \param min_w the minimum width of the window in pixels
1075
+ * \param min_h the minimum height of the window in pixels
1076
+ *
1077
+ * \since This function is available since SDL 2.0.0.
1078
+ *
1079
+ * \sa SDL_GetWindowMinimumSize
1080
+ * \sa SDL_SetWindowMaximumSize
1081
+ */
1082
+ extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window,
1083
+ int min_w, int min_h);
1084
+
1085
+ /**
1086
+ * Get the minimum size of a window's client area.
1087
+ *
1088
+ * \param window the window to query
1089
+ * \param w a pointer filled in with the minimum width of the window, may be
1090
+ * NULL
1091
+ * \param h a pointer filled in with the minimum height of the window, may be
1092
+ * NULL
1093
+ *
1094
+ * \since This function is available since SDL 2.0.0.
1095
+ *
1096
+ * \sa SDL_GetWindowMaximumSize
1097
+ * \sa SDL_SetWindowMinimumSize
1098
+ */
1099
+ extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window,
1100
+ int *w, int *h);
1101
+
1102
+ /**
1103
+ * Set the maximum size of a window's client area.
1104
+ *
1105
+ * \param window the window to change
1106
+ * \param max_w the maximum width of the window in pixels
1107
+ * \param max_h the maximum height of the window in pixels
1108
+ *
1109
+ * \since This function is available since SDL 2.0.0.
1110
+ *
1111
+ * \sa SDL_GetWindowMaximumSize
1112
+ * \sa SDL_SetWindowMinimumSize
1113
+ */
1114
+ extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window,
1115
+ int max_w, int max_h);
1116
+
1117
+ /**
1118
+ * Get the maximum size of a window's client area.
1119
+ *
1120
+ * \param window the window to query
1121
+ * \param w a pointer filled in with the maximum width of the window, may be
1122
+ * NULL
1123
+ * \param h a pointer filled in with the maximum height of the window, may be
1124
+ * NULL
1125
+ *
1126
+ * \since This function is available since SDL 2.0.0.
1127
+ *
1128
+ * \sa SDL_GetWindowMinimumSize
1129
+ * \sa SDL_SetWindowMaximumSize
1130
+ */
1131
+ extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window,
1132
+ int *w, int *h);
1133
+
1134
+ /**
1135
+ * Set the border state of a window.
1136
+ *
1137
+ * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add
1138
+ * or remove the border from the actual window. This is a no-op if the
1139
+ * window's border already matches the requested state.
1140
+ *
1141
+ * You can't change the border state of a fullscreen window.
1142
+ *
1143
+ * \param window the window of which to change the border state
1144
+ * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border
1145
+ *
1146
+ * \since This function is available since SDL 2.0.0.
1147
+ *
1148
+ * \sa SDL_GetWindowFlags
1149
+ */
1150
+ extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window,
1151
+ SDL_bool bordered);
1152
+
1153
+ /**
1154
+ * Set the user-resizable state of a window.
1155
+ *
1156
+ * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and
1157
+ * allow/disallow user resizing of the window. This is a no-op if the window's
1158
+ * resizable state already matches the requested state.
1159
+ *
1160
+ * You can't change the resizable state of a fullscreen window.
1161
+ *
1162
+ * \param window the window of which to change the resizable state
1163
+ * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow
1164
+ *
1165
+ * \since This function is available since SDL 2.0.5.
1166
+ *
1167
+ * \sa SDL_GetWindowFlags
1168
+ */
1169
+ extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window,
1170
+ SDL_bool resizable);
1171
+
1172
+ /**
1173
+ * Set the window to always be above the others.
1174
+ *
1175
+ * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This
1176
+ * will bring the window to the front and keep the window above the rest.
1177
+ *
1178
+ * \param window The window of which to change the always on top state
1179
+ * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to
1180
+ * disable
1181
+ *
1182
+ * \since This function is available since SDL 2.0.16.
1183
+ *
1184
+ * \sa SDL_GetWindowFlags
1185
+ */
1186
+ extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window,
1187
+ SDL_bool on_top);
1188
+
1189
+ /**
1190
+ * Show a window.
1191
+ *
1192
+ * \param window the window to show
1193
+ *
1194
+ * \since This function is available since SDL 2.0.0.
1195
+ *
1196
+ * \sa SDL_HideWindow
1197
+ * \sa SDL_RaiseWindow
1198
+ */
1199
+ extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window);
1200
+
1201
+ /**
1202
+ * Hide a window.
1203
+ *
1204
+ * \param window the window to hide
1205
+ *
1206
+ * \since This function is available since SDL 2.0.0.
1207
+ *
1208
+ * \sa SDL_ShowWindow
1209
+ */
1210
+ extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window);
1211
+
1212
+ /**
1213
+ * Raise a window above other windows and set the input focus.
1214
+ *
1215
+ * \param window the window to raise
1216
+ *
1217
+ * \since This function is available since SDL 2.0.0.
1218
+ */
1219
+ extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window);
1220
+
1221
+ /**
1222
+ * Make a window as large as possible.
1223
+ *
1224
+ * \param window the window to maximize
1225
+ *
1226
+ * \since This function is available since SDL 2.0.0.
1227
+ *
1228
+ * \sa SDL_MinimizeWindow
1229
+ * \sa SDL_RestoreWindow
1230
+ */
1231
+ extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window);
1232
+
1233
+ /**
1234
+ * Minimize a window to an iconic representation.
1235
+ *
1236
+ * \param window the window to minimize
1237
+ *
1238
+ * \since This function is available since SDL 2.0.0.
1239
+ *
1240
+ * \sa SDL_MaximizeWindow
1241
+ * \sa SDL_RestoreWindow
1242
+ */
1243
+ extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window);
1244
+
1245
+ /**
1246
+ * Restore the size and position of a minimized or maximized window.
1247
+ *
1248
+ * \param window the window to restore
1249
+ *
1250
+ * \since This function is available since SDL 2.0.0.
1251
+ *
1252
+ * \sa SDL_MaximizeWindow
1253
+ * \sa SDL_MinimizeWindow
1254
+ */
1255
+ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window);
1256
+
1257
+ /**
1258
+ * Set a window's fullscreen state.
1259
+ *
1260
+ * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a
1261
+ * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen
1262
+ * that takes the size of the desktop; and 0 for windowed mode.
1263
+ *
1264
+ * \param window the window to change
1265
+ * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0
1266
+ * \returns 0 on success or a negative error code on failure; call
1267
+ * SDL_GetError() for more information.
1268
+ *
1269
+ * \since This function is available since SDL 2.0.0.
1270
+ *
1271
+ * \sa SDL_GetWindowDisplayMode
1272
+ * \sa SDL_SetWindowDisplayMode
1273
+ */
1274
+ extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window,
1275
+ Uint32 flags);
1276
+
1277
+ /**
1278
+ * Get the SDL surface associated with the window.
1279
+ *
1280
+ * A new surface will be created with the optimal format for the window, if
1281
+ * necessary. This surface will be freed when the window is destroyed. Do not
1282
+ * free this surface.
1283
+ *
1284
+ * This surface will be invalidated if the window is resized. After resizing a
1285
+ * window this function must be called again to return a valid surface.
1286
+ *
1287
+ * You may not combine this with 3D or the rendering API on this window.
1288
+ *
1289
+ * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`.
1290
+ *
1291
+ * \param window the window to query
1292
+ * \returns the surface associated with the window, or NULL on failure; call
1293
+ * SDL_GetError() for more information.
1294
+ *
1295
+ * \since This function is available since SDL 2.0.0.
1296
+ *
1297
+ * \sa SDL_UpdateWindowSurface
1298
+ * \sa SDL_UpdateWindowSurfaceRects
1299
+ */
1300
+ extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window);
1301
+
1302
+ /**
1303
+ * Copy the window surface to the screen.
1304
+ *
1305
+ * This is the function you use to reflect any changes to the surface on the
1306
+ * screen.
1307
+ *
1308
+ * This function is equivalent to the SDL 1.2 API SDL_Flip().
1309
+ *
1310
+ * \param window the window to update
1311
+ * \returns 0 on success or a negative error code on failure; call
1312
+ * SDL_GetError() for more information.
1313
+ *
1314
+ * \since This function is available since SDL 2.0.0.
1315
+ *
1316
+ * \sa SDL_GetWindowSurface
1317
+ * \sa SDL_UpdateWindowSurfaceRects
1318
+ */
1319
+ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window);
1320
+
1321
+ /**
1322
+ * Copy areas of the window surface to the screen.
1323
+ *
1324
+ * This is the function you use to reflect changes to portions of the surface
1325
+ * on the screen.
1326
+ *
1327
+ * This function is equivalent to the SDL 1.2 API SDL_UpdateRects().
1328
+ *
1329
+ * \param window the window to update
1330
+ * \param rects an array of SDL_Rect structures representing areas of the
1331
+ * surface to copy
1332
+ * \param numrects the number of rectangles
1333
+ * \returns 0 on success or a negative error code on failure; call
1334
+ * SDL_GetError() for more information.
1335
+ *
1336
+ * \since This function is available since SDL 2.0.0.
1337
+ *
1338
+ * \sa SDL_GetWindowSurface
1339
+ * \sa SDL_UpdateWindowSurface
1340
+ */
1341
+ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window,
1342
+ const SDL_Rect * rects,
1343
+ int numrects);
1344
+
1345
+ /**
1346
+ * Set a window's input grab mode.
1347
+ *
1348
+ * When input is grabbed, the mouse is confined to the window. This function
1349
+ * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the
1350
+ * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab().
1351
+ *
1352
+ * If the caller enables a grab while another window is currently grabbed, the
1353
+ * other window loses its grab in favor of the caller's window.
1354
+ *
1355
+ * \param window the window for which the input grab mode should be set
1356
+ * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input
1357
+ *
1358
+ * \since This function is available since SDL 2.0.0.
1359
+ *
1360
+ * \sa SDL_GetGrabbedWindow
1361
+ * \sa SDL_GetWindowGrab
1362
+ */
1363
+ extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window,
1364
+ SDL_bool grabbed);
1365
+
1366
+ /**
1367
+ * Set a window's keyboard grab mode.
1368
+ *
1369
+ * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or
1370
+ * the Meta/Super key. Note that not all system keyboard shortcuts can be
1371
+ * captured by applications (one example is Ctrl+Alt+Del on Windows).
1372
+ *
1373
+ * This is primarily intended for specialized applications such as VNC clients
1374
+ * or VM frontends. Normal games should not use keyboard grab.
1375
+ *
1376
+ * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the
1377
+ * window is full-screen to ensure the user is not trapped in your
1378
+ * application. If you have a custom keyboard shortcut to exit fullscreen
1379
+ * mode, you may suppress this behavior with
1380
+ * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`.
1381
+ *
1382
+ * If the caller enables a grab while another window is currently grabbed, the
1383
+ * other window loses its grab in favor of the caller's window.
1384
+ *
1385
+ * \param window The window for which the keyboard grab mode should be set.
1386
+ * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release.
1387
+ *
1388
+ * \since This function is available since SDL 2.0.16.
1389
+ *
1390
+ * \sa SDL_GetWindowKeyboardGrab
1391
+ * \sa SDL_SetWindowMouseGrab
1392
+ * \sa SDL_SetWindowGrab
1393
+ */
1394
+ extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window,
1395
+ SDL_bool grabbed);
1396
+
1397
+ /**
1398
+ * Set a window's mouse grab mode.
1399
+ *
1400
+ * Mouse grab confines the mouse cursor to the window.
1401
+ *
1402
+ * \param window The window for which the mouse grab mode should be set.
1403
+ * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release.
1404
+ *
1405
+ * \since This function is available since SDL 2.0.16.
1406
+ *
1407
+ * \sa SDL_GetWindowMouseGrab
1408
+ * \sa SDL_SetWindowKeyboardGrab
1409
+ * \sa SDL_SetWindowGrab
1410
+ */
1411
+ extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window,
1412
+ SDL_bool grabbed);
1413
+
1414
+ /**
1415
+ * Get a window's input grab mode.
1416
+ *
1417
+ * \param window the window to query
1418
+ * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise.
1419
+ *
1420
+ * \since This function is available since SDL 2.0.0.
1421
+ *
1422
+ * \sa SDL_SetWindowGrab
1423
+ */
1424
+ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window);
1425
+
1426
+ /**
1427
+ * Get a window's keyboard grab mode.
1428
+ *
1429
+ * \param window the window to query
1430
+ * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise.
1431
+ *
1432
+ * \since This function is available since SDL 2.0.16.
1433
+ *
1434
+ * \sa SDL_SetWindowKeyboardGrab
1435
+ * \sa SDL_GetWindowGrab
1436
+ */
1437
+ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window);
1438
+
1439
+ /**
1440
+ * Get a window's mouse grab mode.
1441
+ *
1442
+ * \param window the window to query
1443
+ * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise.
1444
+ *
1445
+ * \since This function is available since SDL 2.0.16.
1446
+ *
1447
+ * \sa SDL_SetWindowKeyboardGrab
1448
+ * \sa SDL_GetWindowGrab
1449
+ */
1450
+ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window);
1451
+
1452
+ /**
1453
+ * Get the window that currently has an input grab enabled.
1454
+ *
1455
+ * \returns the window if input is grabbed or NULL otherwise.
1456
+ *
1457
+ * \since This function is available since SDL 2.0.4.
1458
+ *
1459
+ * \sa SDL_GetWindowGrab
1460
+ * \sa SDL_SetWindowGrab
1461
+ */
1462
+ extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void);
1463
+
1464
+ /**
1465
+ * Confines the cursor to the specified area of a window.
1466
+ *
1467
+ * Note that this does NOT grab the cursor, it only defines the area a cursor
1468
+ * is restricted to when the window has mouse focus.
1469
+ *
1470
+ * \param window The window that will be associated with the barrier.
1471
+ * \param rect A rectangle area in window-relative coordinates. If NULL the
1472
+ * barrier for the specified window will be destroyed.
1473
+ * \returns 0 on success or a negative error code on failure; call
1474
+ * SDL_GetError() for more information.
1475
+ *
1476
+ * \since This function is available since SDL 2.0.18.
1477
+ *
1478
+ * \sa SDL_GetWindowMouseRect
1479
+ * \sa SDL_SetWindowMouseGrab
1480
+ */
1481
+ extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect);
1482
+
1483
+ /**
1484
+ * Get the mouse confinement rectangle of a window.
1485
+ *
1486
+ * \param window The window to query
1487
+ * \returns A pointer to the mouse confinement rectangle of a window, or NULL
1488
+ * if there isn't one.
1489
+ *
1490
+ * \since This function is available since SDL 2.0.18.
1491
+ *
1492
+ * \sa SDL_SetWindowMouseRect
1493
+ */
1494
+ extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window);
1495
+
1496
+ /**
1497
+ * Set the brightness (gamma multiplier) for a given window's display.
1498
+ *
1499
+ * Despite the name and signature, this method sets the brightness of the
1500
+ * entire display, not an individual window. A window is considered to be
1501
+ * owned by the display that contains the window's center pixel. (The index of
1502
+ * this display can be retrieved using SDL_GetWindowDisplayIndex().) The
1503
+ * brightness set will not follow the window if it is moved to another
1504
+ * display.
1505
+ *
1506
+ * Many platforms will refuse to set the display brightness in modern times.
1507
+ * You are better off using a shader to adjust gamma during rendering, or
1508
+ * something similar.
1509
+ *
1510
+ * \param window the window used to select the display whose brightness will
1511
+ * be changed
1512
+ * \param brightness the brightness (gamma multiplier) value to set where 0.0
1513
+ * is completely dark and 1.0 is normal brightness
1514
+ * \returns 0 on success or a negative error code on failure; call
1515
+ * SDL_GetError() for more information.
1516
+ *
1517
+ * \since This function is available since SDL 2.0.0.
1518
+ *
1519
+ * \sa SDL_GetWindowBrightness
1520
+ * \sa SDL_SetWindowGammaRamp
1521
+ */
1522
+ extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness);
1523
+
1524
+ /**
1525
+ * Get the brightness (gamma multiplier) for a given window's display.
1526
+ *
1527
+ * Despite the name and signature, this method retrieves the brightness of the
1528
+ * entire display, not an individual window. A window is considered to be
1529
+ * owned by the display that contains the window's center pixel. (The index of
1530
+ * this display can be retrieved using SDL_GetWindowDisplayIndex().)
1531
+ *
1532
+ * \param window the window used to select the display whose brightness will
1533
+ * be queried
1534
+ * \returns the brightness for the display where 0.0 is completely dark and
1535
+ * 1.0 is normal brightness.
1536
+ *
1537
+ * \since This function is available since SDL 2.0.0.
1538
+ *
1539
+ * \sa SDL_SetWindowBrightness
1540
+ */
1541
+ extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window);
1542
+
1543
+ /**
1544
+ * Set the opacity for a window.
1545
+ *
1546
+ * The parameter `opacity` will be clamped internally between 0.0f
1547
+ * (transparent) and 1.0f (opaque).
1548
+ *
1549
+ * This function also returns -1 if setting the opacity isn't supported.
1550
+ *
1551
+ * \param window the window which will be made transparent or opaque
1552
+ * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque)
1553
+ * \returns 0 on success or a negative error code on failure; call
1554
+ * SDL_GetError() for more information.
1555
+ *
1556
+ * \since This function is available since SDL 2.0.5.
1557
+ *
1558
+ * \sa SDL_GetWindowOpacity
1559
+ */
1560
+ extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity);
1561
+
1562
+ /**
1563
+ * Get the opacity of a window.
1564
+ *
1565
+ * If transparency isn't supported on this platform, opacity will be reported
1566
+ * as 1.0f without error.
1567
+ *
1568
+ * The parameter `opacity` is ignored if it is NULL.
1569
+ *
1570
+ * This function also returns -1 if an invalid window was provided.
1571
+ *
1572
+ * \param window the window to get the current opacity value from
1573
+ * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque)
1574
+ * \returns 0 on success or a negative error code on failure; call
1575
+ * SDL_GetError() for more information.
1576
+ *
1577
+ * \since This function is available since SDL 2.0.5.
1578
+ *
1579
+ * \sa SDL_SetWindowOpacity
1580
+ */
1581
+ extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity);
1582
+
1583
+ /**
1584
+ * Set the window as a modal for another window.
1585
+ *
1586
+ * \param modal_window the window that should be set modal
1587
+ * \param parent_window the parent window for the modal window
1588
+ * \returns 0 on success or a negative error code on failure; call
1589
+ * SDL_GetError() for more information.
1590
+ *
1591
+ * \since This function is available since SDL 2.0.5.
1592
+ */
1593
+ extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window);
1594
+
1595
+ /**
1596
+ * Explicitly set input focus to the window.
1597
+ *
1598
+ * You almost certainly want SDL_RaiseWindow() instead of this function. Use
1599
+ * this with caution, as you might give focus to a window that is completely
1600
+ * obscured by other windows.
1601
+ *
1602
+ * \param window the window that should get the input focus
1603
+ * \returns 0 on success or a negative error code on failure; call
1604
+ * SDL_GetError() for more information.
1605
+ *
1606
+ * \since This function is available since SDL 2.0.5.
1607
+ *
1608
+ * \sa SDL_RaiseWindow
1609
+ */
1610
+ extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window);
1611
+
1612
+ /**
1613
+ * Set the gamma ramp for the display that owns a given window.
1614
+ *
1615
+ * Set the gamma translation table for the red, green, and blue channels of
1616
+ * the video hardware. Each table is an array of 256 16-bit quantities,
1617
+ * representing a mapping between the input and output for that channel. The
1618
+ * input is the index into the array, and the output is the 16-bit gamma value
1619
+ * at that index, scaled to the output color precision.
1620
+ *
1621
+ * Despite the name and signature, this method sets the gamma ramp of the
1622
+ * entire display, not an individual window. A window is considered to be
1623
+ * owned by the display that contains the window's center pixel. (The index of
1624
+ * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma
1625
+ * ramp set will not follow the window if it is moved to another display.
1626
+ *
1627
+ * \param window the window used to select the display whose gamma ramp will
1628
+ * be changed
1629
+ * \param red a 256 element array of 16-bit quantities representing the
1630
+ * translation table for the red channel, or NULL
1631
+ * \param green a 256 element array of 16-bit quantities representing the
1632
+ * translation table for the green channel, or NULL
1633
+ * \param blue a 256 element array of 16-bit quantities representing the
1634
+ * translation table for the blue channel, or NULL
1635
+ * \returns 0 on success or a negative error code on failure; call
1636
+ * SDL_GetError() for more information.
1637
+ *
1638
+ * \since This function is available since SDL 2.0.0.
1639
+ *
1640
+ * \sa SDL_GetWindowGammaRamp
1641
+ */
1642
+ extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window,
1643
+ const Uint16 * red,
1644
+ const Uint16 * green,
1645
+ const Uint16 * blue);
1646
+
1647
+ /**
1648
+ * Get the gamma ramp for a given window's display.
1649
+ *
1650
+ * Despite the name and signature, this method retrieves the gamma ramp of the
1651
+ * entire display, not an individual window. A window is considered to be
1652
+ * owned by the display that contains the window's center pixel. (The index of
1653
+ * this display can be retrieved using SDL_GetWindowDisplayIndex().)
1654
+ *
1655
+ * \param window the window used to select the display whose gamma ramp will
1656
+ * be queried
1657
+ * \param red a 256 element array of 16-bit quantities filled in with the
1658
+ * translation table for the red channel, or NULL
1659
+ * \param green a 256 element array of 16-bit quantities filled in with the
1660
+ * translation table for the green channel, or NULL
1661
+ * \param blue a 256 element array of 16-bit quantities filled in with the
1662
+ * translation table for the blue channel, or NULL
1663
+ * \returns 0 on success or a negative error code on failure; call
1664
+ * SDL_GetError() for more information.
1665
+ *
1666
+ * \since This function is available since SDL 2.0.0.
1667
+ *
1668
+ * \sa SDL_SetWindowGammaRamp
1669
+ */
1670
+ extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window,
1671
+ Uint16 * red,
1672
+ Uint16 * green,
1673
+ Uint16 * blue);
1674
+
1675
+ /**
1676
+ * Possible return values from the SDL_HitTest callback.
1677
+ *
1678
+ * \sa SDL_HitTest
1679
+ */
1680
+ typedef enum
1681
+ {
1682
+ SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */
1683
+ SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */
1684
+ SDL_HITTEST_RESIZE_TOPLEFT,
1685
+ SDL_HITTEST_RESIZE_TOP,
1686
+ SDL_HITTEST_RESIZE_TOPRIGHT,
1687
+ SDL_HITTEST_RESIZE_RIGHT,
1688
+ SDL_HITTEST_RESIZE_BOTTOMRIGHT,
1689
+ SDL_HITTEST_RESIZE_BOTTOM,
1690
+ SDL_HITTEST_RESIZE_BOTTOMLEFT,
1691
+ SDL_HITTEST_RESIZE_LEFT
1692
+ } SDL_HitTestResult;
1693
+
1694
+ /**
1695
+ * Callback used for hit-testing.
1696
+ *
1697
+ * \param win the SDL_Window where hit-testing was set on
1698
+ * \param area an SDL_Point which should be hit-tested
1699
+ * \param data what was passed as `callback_data` to SDL_SetWindowHitTest()
1700
+ * \return an SDL_HitTestResult value.
1701
+ *
1702
+ * \sa SDL_SetWindowHitTest
1703
+ */
1704
+ typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win,
1705
+ const SDL_Point *area,
1706
+ void *data);
1707
+
1708
+ /**
1709
+ * Provide a callback that decides if a window region has special properties.
1710
+ *
1711
+ * Normally windows are dragged and resized by decorations provided by the
1712
+ * system window manager (a title bar, borders, etc), but for some apps, it
1713
+ * makes sense to drag them from somewhere else inside the window itself; for
1714
+ * example, one might have a borderless window that wants to be draggable from
1715
+ * any part, or simulate its own title bar, etc.
1716
+ *
1717
+ * This function lets the app provide a callback that designates pieces of a
1718
+ * given window as special. This callback is run during event processing if we
1719
+ * need to tell the OS to treat a region of the window specially; the use of
1720
+ * this callback is known as "hit testing."
1721
+ *
1722
+ * Mouse input may not be delivered to your application if it is within a
1723
+ * special area; the OS will often apply that input to moving the window or
1724
+ * resizing the window and not deliver it to the application.
1725
+ *
1726
+ * Specifying NULL for a callback disables hit-testing. Hit-testing is
1727
+ * disabled by default.
1728
+ *
1729
+ * Platforms that don't support this functionality will return -1
1730
+ * unconditionally, even if you're attempting to disable hit-testing.
1731
+ *
1732
+ * Your callback may fire at any time, and its firing does not indicate any
1733
+ * specific behavior (for example, on Windows, this certainly might fire when
1734
+ * the OS is deciding whether to drag your window, but it fires for lots of
1735
+ * other reasons, too, some unrelated to anything you probably care about _and
1736
+ * when the mouse isn't actually at the location it is testing_). Since this
1737
+ * can fire at any time, you should try to keep your callback efficient,
1738
+ * devoid of allocations, etc.
1739
+ *
1740
+ * \param window the window to set hit-testing on
1741
+ * \param callback the function to call when doing a hit-test
1742
+ * \param callback_data an app-defined void pointer passed to **callback**
1743
+ * \returns 0 on success or -1 on error (including unsupported); call
1744
+ * SDL_GetError() for more information.
1745
+ *
1746
+ * \since This function is available since SDL 2.0.4.
1747
+ */
1748
+ extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window,
1749
+ SDL_HitTest callback,
1750
+ void *callback_data);
1751
+
1752
+ /**
1753
+ * Request a window to demand attention from the user.
1754
+ *
1755
+ * \param window the window to be flashed
1756
+ * \param operation the flash operation
1757
+ * \returns 0 on success or a negative error code on failure; call
1758
+ * SDL_GetError() for more information.
1759
+ *
1760
+ * \since This function is available since SDL 2.0.16.
1761
+ */
1762
+ extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation);
1763
+
1764
+ /**
1765
+ * Destroy a window.
1766
+ *
1767
+ * If `window` is NULL, this function will return immediately after setting
1768
+ * the SDL error message to "Invalid window". See SDL_GetError().
1769
+ *
1770
+ * \param window the window to destroy
1771
+ *
1772
+ * \since This function is available since SDL 2.0.0.
1773
+ *
1774
+ * \sa SDL_CreateWindow
1775
+ * \sa SDL_CreateWindowFrom
1776
+ */
1777
+ extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window);
1778
+
1779
+
1780
+ /**
1781
+ * Check whether the screensaver is currently enabled.
1782
+ *
1783
+ * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2
1784
+ * the screensaver was enabled by default.
1785
+ *
1786
+ * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`.
1787
+ *
1788
+ * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is
1789
+ * disabled.
1790
+ *
1791
+ * \since This function is available since SDL 2.0.0.
1792
+ *
1793
+ * \sa SDL_DisableScreenSaver
1794
+ * \sa SDL_EnableScreenSaver
1795
+ */
1796
+ extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void);
1797
+
1798
+ /**
1799
+ * Allow the screen to be blanked by a screen saver.
1800
+ *
1801
+ * \since This function is available since SDL 2.0.0.
1802
+ *
1803
+ * \sa SDL_DisableScreenSaver
1804
+ * \sa SDL_IsScreenSaverEnabled
1805
+ */
1806
+ extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void);
1807
+
1808
+ /**
1809
+ * Prevent the screen from being blanked by a screen saver.
1810
+ *
1811
+ * If you disable the screensaver, it is automatically re-enabled when SDL
1812
+ * quits.
1813
+ *
1814
+ * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2
1815
+ * the screensaver was enabled by default.
1816
+ *
1817
+ * \since This function is available since SDL 2.0.0.
1818
+ *
1819
+ * \sa SDL_EnableScreenSaver
1820
+ * \sa SDL_IsScreenSaverEnabled
1821
+ */
1822
+ extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void);
1823
+
1824
+
1825
+ /**
1826
+ * \name OpenGL support functions
1827
+ */
1828
+ /* @{ */
1829
+
1830
+ /**
1831
+ * Dynamically load an OpenGL library.
1832
+ *
1833
+ * This should be done after initializing the video driver, but before
1834
+ * creating any OpenGL windows. If no OpenGL library is loaded, the default
1835
+ * library will be loaded upon creation of the first OpenGL window.
1836
+ *
1837
+ * If you do this, you need to retrieve all of the GL functions used in your
1838
+ * program from the dynamic library using SDL_GL_GetProcAddress().
1839
+ *
1840
+ * \param path the platform dependent OpenGL library name, or NULL to open the
1841
+ * default OpenGL library
1842
+ * \returns 0 on success or a negative error code on failure; call
1843
+ * SDL_GetError() for more information.
1844
+ *
1845
+ * \since This function is available since SDL 2.0.0.
1846
+ *
1847
+ * \sa SDL_GL_GetProcAddress
1848
+ * \sa SDL_GL_UnloadLibrary
1849
+ */
1850
+ extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path);
1851
+
1852
+ /**
1853
+ * Get an OpenGL function by name.
1854
+ *
1855
+ * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all
1856
+ * GL functions must be retrieved this way. Usually this is used to retrieve
1857
+ * function pointers to OpenGL extensions.
1858
+ *
1859
+ * There are some quirks to looking up OpenGL functions that require some
1860
+ * extra care from the application. If you code carefully, you can handle
1861
+ * these quirks without any platform-specific code, though:
1862
+ *
1863
+ * - On Windows, function pointers are specific to the current GL context;
1864
+ * this means you need to have created a GL context and made it current
1865
+ * before calling SDL_GL_GetProcAddress(). If you recreate your context or
1866
+ * create a second context, you should assume that any existing function
1867
+ * pointers aren't valid to use with it. This is (currently) a
1868
+ * Windows-specific limitation, and in practice lots of drivers don't suffer
1869
+ * this limitation, but it is still the way the wgl API is documented to
1870
+ * work and you should expect crashes if you don't respect it. Store a copy
1871
+ * of the function pointers that comes and goes with context lifespan.
1872
+ * - On X11, function pointers returned by this function are valid for any
1873
+ * context, and can even be looked up before a context is created at all.
1874
+ * This means that, for at least some common OpenGL implementations, if you
1875
+ * look up a function that doesn't exist, you'll get a non-NULL result that
1876
+ * is _NOT_ safe to call. You must always make sure the function is actually
1877
+ * available for a given GL context before calling it, by checking for the
1878
+ * existence of the appropriate extension with SDL_GL_ExtensionSupported(),
1879
+ * or verifying that the version of OpenGL you're using offers the function
1880
+ * as core functionality.
1881
+ * - Some OpenGL drivers, on all platforms, *will* return NULL if a function
1882
+ * isn't supported, but you can't count on this behavior. Check for
1883
+ * extensions you use, and if you get a NULL anyway, act as if that
1884
+ * extension wasn't available. This is probably a bug in the driver, but you
1885
+ * can code defensively for this scenario anyhow.
1886
+ * - Just because you're on Linux/Unix, don't assume you'll be using X11.
1887
+ * Next-gen display servers are waiting to replace it, and may or may not
1888
+ * make the same promises about function pointers.
1889
+ * - OpenGL function pointers must be declared `APIENTRY` as in the example
1890
+ * code. This will ensure the proper calling convention is followed on
1891
+ * platforms where this matters (Win32) thereby avoiding stack corruption.
1892
+ *
1893
+ * \param proc the name of an OpenGL function
1894
+ * \returns a pointer to the named OpenGL function. The returned pointer
1895
+ * should be cast to the appropriate function signature.
1896
+ *
1897
+ * \since This function is available since SDL 2.0.0.
1898
+ *
1899
+ * \sa SDL_GL_ExtensionSupported
1900
+ * \sa SDL_GL_LoadLibrary
1901
+ * \sa SDL_GL_UnloadLibrary
1902
+ */
1903
+ extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc);
1904
+
1905
+ /**
1906
+ * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
1907
+ *
1908
+ * \since This function is available since SDL 2.0.0.
1909
+ *
1910
+ * \sa SDL_GL_LoadLibrary
1911
+ */
1912
+ extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void);
1913
+
1914
+ /**
1915
+ * Check if an OpenGL extension is supported for the current context.
1916
+ *
1917
+ * This function operates on the current GL context; you must have created a
1918
+ * context and it must be current before calling this function. Do not assume
1919
+ * that all contexts you create will have the same set of extensions
1920
+ * available, or that recreating an existing context will offer the same
1921
+ * extensions again.
1922
+ *
1923
+ * While it's probably not a massive overhead, this function is not an O(1)
1924
+ * operation. Check the extensions you care about after creating the GL
1925
+ * context and save that information somewhere instead of calling the function
1926
+ * every time you need to know.
1927
+ *
1928
+ * \param extension the name of the extension to check
1929
+ * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise.
1930
+ *
1931
+ * \since This function is available since SDL 2.0.0.
1932
+ */
1933
+ extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char
1934
+ *extension);
1935
+
1936
+ /**
1937
+ * Reset all previously set OpenGL context attributes to their default values.
1938
+ *
1939
+ * \since This function is available since SDL 2.0.2.
1940
+ *
1941
+ * \sa SDL_GL_GetAttribute
1942
+ * \sa SDL_GL_SetAttribute
1943
+ */
1944
+ extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);
1945
+
1946
+ /**
1947
+ * Set an OpenGL window attribute before window creation.
1948
+ *
1949
+ * This function sets the OpenGL attribute `attr` to `value`. The requested
1950
+ * attributes should be set before creating an OpenGL window. You should use
1951
+ * SDL_GL_GetAttribute() to check the values after creating the OpenGL
1952
+ * context, since the values obtained can differ from the requested ones.
1953
+ *
1954
+ * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to set
1955
+ * \param value the desired value for the attribute
1956
+ * \returns 0 on success or a negative error code on failure; call
1957
+ * SDL_GetError() for more information.
1958
+ *
1959
+ * \since This function is available since SDL 2.0.0.
1960
+ *
1961
+ * \sa SDL_GL_GetAttribute
1962
+ * \sa SDL_GL_ResetAttributes
1963
+ */
1964
+ extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value);
1965
+
1966
+ /**
1967
+ * Get the actual value for an attribute from the current context.
1968
+ *
1969
+ * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to get
1970
+ * \param value a pointer filled in with the current value of `attr`
1971
+ * \returns 0 on success or a negative error code on failure; call
1972
+ * SDL_GetError() for more information.
1973
+ *
1974
+ * \since This function is available since SDL 2.0.0.
1975
+ *
1976
+ * \sa SDL_GL_ResetAttributes
1977
+ * \sa SDL_GL_SetAttribute
1978
+ */
1979
+ extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);
1980
+
1981
+ /**
1982
+ * Create an OpenGL context for an OpenGL window, and make it current.
1983
+ *
1984
+ * Windows users new to OpenGL should note that, for historical reasons, GL
1985
+ * functions added after OpenGL version 1.1 are not available by default.
1986
+ * Those functions must be loaded at run-time, either with an OpenGL
1987
+ * extension-handling library or with SDL_GL_GetProcAddress() and its related
1988
+ * functions.
1989
+ *
1990
+ * SDL_GLContext is an alias for `void *`. It's opaque to the application.
1991
+ *
1992
+ * \param window the window to associate with the context
1993
+ * \returns the OpenGL context associated with `window` or NULL on error; call
1994
+ * SDL_GetError() for more details.
1995
+ *
1996
+ * \since This function is available since SDL 2.0.0.
1997
+ *
1998
+ * \sa SDL_GL_DeleteContext
1999
+ * \sa SDL_GL_MakeCurrent
2000
+ */
2001
+ extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window *
2002
+ window);
2003
+
2004
+ /**
2005
+ * Set up an OpenGL context for rendering into an OpenGL window.
2006
+ *
2007
+ * The context must have been created with a compatible window.
2008
+ *
2009
+ * \param window the window to associate with the context
2010
+ * \param context the OpenGL context to associate with the window
2011
+ * \returns 0 on success or a negative error code on failure; call
2012
+ * SDL_GetError() for more information.
2013
+ *
2014
+ * \since This function is available since SDL 2.0.0.
2015
+ *
2016
+ * \sa SDL_GL_CreateContext
2017
+ */
2018
+ extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window,
2019
+ SDL_GLContext context);
2020
+
2021
+ /**
2022
+ * Get the currently active OpenGL window.
2023
+ *
2024
+ * \returns the currently active OpenGL window on success or NULL on failure;
2025
+ * call SDL_GetError() for more information.
2026
+ *
2027
+ * \since This function is available since SDL 2.0.0.
2028
+ */
2029
+ extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void);
2030
+
2031
+ /**
2032
+ * Get the currently active OpenGL context.
2033
+ *
2034
+ * \returns the currently active OpenGL context or NULL on failure; call
2035
+ * SDL_GetError() for more information.
2036
+ *
2037
+ * \since This function is available since SDL 2.0.0.
2038
+ *
2039
+ * \sa SDL_GL_MakeCurrent
2040
+ */
2041
+ extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void);
2042
+
2043
+ /**
2044
+ * Get the size of a window's underlying drawable in pixels.
2045
+ *
2046
+ * This returns info useful for calling glViewport().
2047
+ *
2048
+ * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI
2049
+ * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a
2050
+ * platform with high-DPI support (Apple calls this "Retina"), and not
2051
+ * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
2052
+ *
2053
+ * \param window the window from which the drawable size should be queried
2054
+ * \param w a pointer to variable for storing the width in pixels, may be NULL
2055
+ * \param h a pointer to variable for storing the height in pixels, may be
2056
+ * NULL
2057
+ *
2058
+ * \since This function is available since SDL 2.0.1.
2059
+ *
2060
+ * \sa SDL_CreateWindow
2061
+ * \sa SDL_GetWindowSize
2062
+ */
2063
+ extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w,
2064
+ int *h);
2065
+
2066
+ /**
2067
+ * Set the swap interval for the current OpenGL context.
2068
+ *
2069
+ * Some systems allow specifying -1 for the interval, to enable adaptive
2070
+ * vsync. Adaptive vsync works the same as vsync, but if you've already missed
2071
+ * the vertical retrace for a given frame, it swaps buffers immediately, which
2072
+ * might be less jarring for the user during occasional framerate drops. If an
2073
+ * application requests adaptive vsync and the system does not support it,
2074
+ * this function will fail and return -1. In such a case, you should probably
2075
+ * retry the call with 1 for the interval.
2076
+ *
2077
+ * Adaptive vsync is implemented for some glX drivers with
2078
+ * GLX_EXT_swap_control_tear, and for some Windows drivers with
2079
+ * WGL_EXT_swap_control_tear.
2080
+ *
2081
+ * Read more on the Khronos wiki:
2082
+ * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync
2083
+ *
2084
+ * \param interval 0 for immediate updates, 1 for updates synchronized with
2085
+ * the vertical retrace, -1 for adaptive vsync
2086
+ * \returns 0 on success or -1 if setting the swap interval is not supported;
2087
+ * call SDL_GetError() for more information.
2088
+ *
2089
+ * \since This function is available since SDL 2.0.0.
2090
+ *
2091
+ * \sa SDL_GL_GetSwapInterval
2092
+ */
2093
+ extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval);
2094
+
2095
+ /**
2096
+ * Get the swap interval for the current OpenGL context.
2097
+ *
2098
+ * If the system can't determine the swap interval, or there isn't a valid
2099
+ * current context, this function will return 0 as a safe default.
2100
+ *
2101
+ * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer
2102
+ * swap is synchronized with the vertical retrace, and -1 if late
2103
+ * swaps happen immediately instead of waiting for the next retrace;
2104
+ * call SDL_GetError() for more information.
2105
+ *
2106
+ * \since This function is available since SDL 2.0.0.
2107
+ *
2108
+ * \sa SDL_GL_SetSwapInterval
2109
+ */
2110
+ extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void);
2111
+
2112
+ /**
2113
+ * Update a window with OpenGL rendering.
2114
+ *
2115
+ * This is used with double-buffered OpenGL contexts, which are the default.
2116
+ *
2117
+ * On macOS, make sure you bind 0 to the draw framebuffer before swapping the
2118
+ * window, otherwise nothing will happen. If you aren't using
2119
+ * glBindFramebuffer(), this is the default and you won't have to do anything
2120
+ * extra.
2121
+ *
2122
+ * \param window the window to change
2123
+ *
2124
+ * \since This function is available since SDL 2.0.0.
2125
+ */
2126
+ extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window);
2127
+
2128
+ /**
2129
+ * Delete an OpenGL context.
2130
+ *
2131
+ * \param context the OpenGL context to be deleted
2132
+ *
2133
+ * \since This function is available since SDL 2.0.0.
2134
+ *
2135
+ * \sa SDL_GL_CreateContext
2136
+ */
2137
+ extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context);
2138
+
2139
+ /* @} *//* OpenGL support functions */
2140
+
2141
+
2142
+ /* Ends C function definitions when using C++ */
2143
+ #ifdef __cplusplus
2144
+ }
2145
+ #endif
2146
+ #include "close_code.h"
2147
+
2148
+ #endif /* SDL_video_h_ */
2149
+
2150
+ /* vi: set ts=4 sw=4 expandtab: */