1 /+ 2 + Copyright 2022 – 2024 Aya Partridge 3 + Copyright 2018 - 2022 Michael D. Parker 4 + Distributed under the Boost Software License, Version 1.0. 5 + (See accompanying file LICENSE_1_0.txt or copy at 6 + http://www.boost.org/LICENSE_1_0.txt) 7 +/ 8 module sdl.video; 9 10 import bindbc.sdl.config; 11 import bindbc.sdl.codegen; 12 13 import sdl.rect: SDL_Rect; 14 import sdl.stdinc: SDL_bool; 15 import sdl.surface: SDL_Surface; 16 17 struct SDL_DisplayMode{ 18 uint format; 19 int w; 20 int h; 21 int refresh_rate; 22 void* driverdata; 23 } 24 25 struct SDL_Window; 26 27 alias SDL_WindowFlags = uint; 28 enum: SDL_WindowFlags{ 29 SDL_WINDOW_FULLSCREEN = 0x0000_0001, 30 SDL_WINDOW_OPENGL = 0x0000_0002, 31 SDL_WINDOW_SHOWN = 0x0000_0004, 32 SDL_WINDOW_HIDDEN = 0x0000_0008, 33 SDL_WINDOW_BORDERLESS = 0x0000_0010, 34 SDL_WINDOW_RESIZABLE = 0x0000_0020, 35 SDL_WINDOW_MINIMIZED = 0x0000_0040, 36 SDL_WINDOW_MAXIMIZED = 0x0000_0080, 37 SDL_WINDOW_INPUT_GRABBED = 0x0000_0100, 38 SDL_WINDOW_INPUT_FOCUS = 0x0000_0200, 39 SDL_WINDOW_MOUSE_FOCUS = 0x0000_0400, 40 SDL_WINDOW_FULLSCREEN_DESKTOP = 0x0000_1000 | SDL_WINDOW_FULLSCREEN, 41 SDL_WINDOW_FOREIGN = 0x0000_0800, 42 } 43 static if(sdlSupport >= SDLSupport.v2_0_1) 44 enum: SDL_WindowFlags{ 45 SDL_WINDOW_ALLOW_HIGHDPI = 0x0000_2000, 46 } 47 static if(sdlSupport >= SDLSupport.v2_0_4) 48 enum: SDL_WindowFlags{ 49 SDL_WINDOW_MOUSE_CAPTURE = 0x0000_4000, 50 } 51 static if(sdlSupport >= SDLSupport.v2_0_5) 52 enum: SDL_WindowFlags{ 53 SDL_WINDOW_ALWAYS_ON_TOP = 0x0000_8000, 54 SDL_WINDOW_SKIP_TASKBAR = 0x0001_0000, 55 SDL_WINDOW_UTILITY = 0x0002_0000, 56 SDL_WINDOW_TOOLTIP = 0x0004_0000, 57 SDL_WINDOW_POPUP_MENU = 0x0008_0000, 58 } 59 static if(sdlSupport >= SDLSupport.v2_0_6) 60 enum: SDL_WindowFlags{ 61 SDL_WINDOW_VULKAN = 0x1000_0000, 62 } 63 static if(sdlSupport >= SDLSupport.v2_0_6) 64 enum: SDL_WindowFlags{ 65 SDL_WINDOW_METAL = 0x2000_0000, 66 } 67 static if(sdlSupport >= SDLSupport.v2_0_16) 68 enum: SDL_WindowFlags{ 69 SDL_WINDOW_MOUSE_GRABBED = SDL_WINDOW_INPUT_GRABBED, 70 SDL_WINDOW_KEYBOARD_GRABBED = 0x0010_0000, 71 } 72 73 enum: uint{ 74 SDL_WINDOWPOS_UNDEFINED_MASK = 0x1FFF0000, 75 SDL_WINDOWPOS_UNDEFINED = SDL_WINDOWPOS_UNDEFINED_DISPLAY(0), 76 SDL_WINDOWPOS_CENTERED_MASK = 0x2FFF0000, 77 SDL_WINDOWPOS_CENTRED_MASK = SDL_WINDOWPOS_CENTERED_MASK, 78 SDL_WINDOWPOS_CENTERED = SDL_WINDOWPOS_CENTERED_DISPLAY(0), 79 SDL_WINDOWPOS_CENTRED = SDL_WINDOWPOS_CENTERED, 80 } 81 82 pragma(inline, true) nothrow @nogc pure @safe{ 83 uint SDL_WINDOWPOS_UNDEFINED_DISPLAY(uint x){ return SDL_WINDOWPOS_UNDEFINED_MASK | x; } 84 uint SDL_WINDOWPOS_ISUNDEFINED(uint x){ return (x & 0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK; } 85 uint SDL_WINDOWPOS_CENTERED_DISPLAY(uint x){ return SDL_WINDOWPOS_CENTERED_MASK | x; } 86 uint SDL_WINDOWPOS_ISCENTERED(uint x){ return (x & 0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK; } 87 } 88 89 alias SDL_WindowEventID = ubyte; 90 enum: SDL_WindowEventID{ 91 SDL_WINDOWEVENT_NONE = 0, 92 SDL_WINDOWEVENT_SHOWN = 1, 93 SDL_WINDOWEVENT_HIDDEN = 2, 94 SDL_WINDOWEVENT_EXPOSED = 3, 95 SDL_WINDOWEVENT_MOVED = 4, 96 SDL_WINDOWEVENT_RESIZED = 5, 97 SDL_WINDOWEVENT_SIZE_CHANGED = 6, 98 SDL_WINDOWEVENT_MINIMIZED = 7, 99 SDL_WINDOWEVENT_MAXIMIZED = 8, 100 SDL_WINDOWEVENT_RESTORED = 9, 101 SDL_WINDOWEVENT_ENTER = 10, 102 SDL_WINDOWEVENT_LEAVE = 11, 103 SDL_WINDOWEVENT_FOCUS_GAINED = 12, 104 SDL_WINDOWEVENT_FOCUS_LOST = 13, 105 SDL_WINDOWEVENT_CLOSE = 14, 106 } 107 static if(sdlSupport >= SDLSupport.v2_0_5) 108 enum: SDL_WindowEventID{ 109 SDL_WINDOWEVENT_TAKE_FOCUS = 15, 110 SDL_WINDOWEVENT_HIT_TEST = 16, 111 } 112 static if(sdlSupport >= SDLSupport.v2_0_18) 113 enum: SDL_WindowEventID{ 114 SDL_WINDOWEVENT_ICCPROF_CHANGED = 17, 115 SDL_WINDOWEVENT_DISPLAY_CHANGED = 18, 116 } 117 118 static if(sdlSupport >= SDLSupport.v2_0_9){ 119 alias SDL_DisplayEventID = int; 120 enum: SDL_DisplayEventID{ 121 SDL_DISPLAYEVENT_NONE = 0, 122 SDL_DISPLAYEVENT_ORIENTATION = 1, 123 } 124 static if(sdlSupport >= SDLSupport.v2_0_14) 125 enum: SDL_DisplayEventID{ 126 SDL_DISPLAYEVENT_CONNECTED = 2, 127 SDL_DISPLAYEVENT_DISCONNECTED = 3, 128 } 129 static if(sdlSupport >= SDLSupport.v2_28) 130 enum: SDL_DisplayEventID{ 131 SDL_DISPLAYEVENT_MOVED = 4, 132 } 133 } 134 135 static if(sdlSupport >= SDLSupport.v2_0_9){ 136 alias SDL_DisplayOrientation = int; 137 enum: SDL_DisplayOrientation{ 138 SDL_ORIENTATION_UNKNOWN = 0, 139 SDL_ORIENTATION_LANDSCAPE = 1, 140 SDL_ORIENTATION_LANDSCAPE_FLIPPED = 2, 141 SDL_ORIENTATION_PORTRAIT = 3, 142 SDL_ORIENTATION_PORTRAIT_FLIPPED = 4, 143 } 144 } 145 146 static if(sdlSupport >= SDLSupport.v2_0_16){ 147 alias SDL_FlashOperation = int; 148 enum: SDL_FlashOperation{ 149 SDL_FLASH_CANCEL = 0, 150 SDL_FLASH_BRIEFLY = 1, 151 SDL_FLASH_UNTIL_FOCUSED = 2, 152 } 153 } 154 155 alias SDL_GLContext = void*; 156 157 alias SDL_GLattr = int; 158 enum: SDL_GLattr{ 159 SDL_GL_RED_SIZE = 0, 160 SDL_GL_GREEN_SIZE = 1, 161 SDL_GL_BLUE_SIZE = 2, 162 SDL_GL_ALPHA_SIZE = 3, 163 SDL_GL_BUFFER_SIZE = 4, 164 SDL_GL_DOUBLEBUFFER = 5, 165 SDL_GL_DEPTH_SIZE = 6, 166 SDL_GL_STENCIL_SIZE = 7, 167 SDL_GL_ACCUM_RED_SIZE = 8, 168 SDL_GL_ACCUM_GREEN_SIZE = 9, 169 SDL_GL_ACCUM_BLUE_SIZE = 10, 170 SDL_GL_ACCUM_ALPHA_SIZE = 11, 171 SDL_GL_STEREO = 12, 172 SDL_GL_MULTISAMPLEBUFFERS = 13, 173 SDL_GL_MULTISAMPLESAMPLES = 14, 174 SDL_GL_ACCELERATED_VISUAL = 15, 175 SDL_GL_RETAINED_BACKING = 16, 176 SDL_GL_CONTEXT_MAJOR_VERSION = 17, 177 SDL_GL_CONTEXT_MINOR_VERSION = 18, 178 SDL_GL_CONTEXT_EGL = 19, 179 SDL_GL_CONTEXT_FLAGS = 20, 180 SDL_GL_CONTEXT_PROFILE_MASK = 21, 181 SDL_GL_SHARE_WITH_CURRENT_CONTEXT = 22, 182 } 183 static if(sdlSupport >= SDLSupport.v2_0_1) 184 enum: SDL_GLattr{ 185 SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = 23, 186 } 187 static if(sdlSupport >= SDLSupport.v2_0_4) 188 enum: SDL_GLattr{ 189 deprecated("Please use `SDL_GL_CONTEXT_RELEASE_BEHAVIOR` instead") SDL_GL_RELEASE_BEHAVIOR = 24, //NOTE: this name was a typo to begin with 190 SDL_GL_CONTEXT_RELEASE_BEHAVIOR = 24, 191 } 192 static if(sdlSupport >= SDLSupport.v2_0_6) 193 enum: SDL_GLattr{ 194 SDL_GL_CONTEXT_RESET_NOTIFICATION = 25, 195 SDL_GL_CONTEXT_NO_ERROR = 26, 196 } 197 static if(sdlSupport >= SDLSupport.v2_0_6) 198 enum: SDL_GLattr{ 199 SDL_GL_FLOATBUFFERS = 27, 200 } 201 202 alias SDL_GLprofile = int; 203 enum: SDL_GLprofile{ 204 SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, 205 SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, 206 SDL_GL_CONTEXT_PROFILE_ES = 0x0004, 207 } 208 209 alias SDL_GLcontextFlag = int; 210 enum: SDL_GLcontextFlag{ 211 SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, 212 SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, 213 SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, 214 SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008, 215 } 216 217 static if(sdlSupport >= SDLSupport.v2_0_4){ 218 alias SDL_GLcontextReleaseFlag = int; 219 enum: SDL_GLcontextReleaseFlag{ 220 SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, 221 SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001, 222 } 223 224 alias SDL_HitTestResult = int; 225 enum: SDL_HitTestResult{ 226 SDL_HITTEST_NORMAL = 0, 227 SDL_HITTEST_DRAGGABLE = 1, 228 SDL_HITTEST_RESIZE_TOPLEFT = 2, 229 SDL_HITTEST_RESIZE_TOP = 3, 230 SDL_HITTEST_RESIZE_TOPRIGHT = 4, 231 SDL_HITTEST_RESIZE_RIGHT = 5, 232 SDL_HITTEST_RESIZE_BOTTOMRIGHT = 6, 233 SDL_HITTEST_RESIZE_BOTTOM = 7, 234 SDL_HITTEST_RESIZE_BOTTOMLEFT = 8, 235 SDL_HITTEST_RESIZE_LEFT = 9, 236 } 237 238 import sdl.rect: SDL_Point; 239 alias SDL_HitTest = extern(C) SDL_HitTestResult function(SDL_Window* win, const(SDL_Point)* area, void* data) nothrow; 240 } 241 242 static if(sdlSupport >= SDLSupport.v2_0_6){ 243 alias SDL_GLContextResetNotification = int; 244 enum: SDL_GLContextResetNotification{ 245 SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, 246 SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001, 247 } 248 } 249 250 mixin(joinFnBinds((){ 251 FnBind[] ret = [ 252 {q{int}, q{SDL_GetNumVideoDrivers}, q{}}, 253 {q{const(char)*}, q{SDL_GetVideoDriver}, q{int index}}, 254 {q{int}, q{SDL_VideoInit}, q{const(char)* driverName}}, 255 {q{void}, q{SDL_VideoQuit}, q{}}, 256 {q{const(char)*}, q{SDL_GetCurrentVideoDriver}, q{}}, 257 {q{int}, q{SDL_GetNumVideoDisplays}, q{}}, 258 {q{const(char)*}, q{SDL_GetDisplayName}, q{int displayIndex}}, 259 {q{int}, q{SDL_GetDisplayBounds}, q{int displayIndex, SDL_Rect* rect}}, 260 {q{int}, q{SDL_GetNumDisplayModes}, q{int displayIndex}}, 261 {q{int}, q{SDL_GetDisplayMode}, q{int displayIndex, int modeIndex, SDL_DisplayMode* mode}}, 262 {q{int}, q{SDL_GetDesktopDisplayMode}, q{int displayIndex, SDL_DisplayMode* mode}}, 263 {q{int}, q{SDL_GetCurrentDisplayMode}, q{int displayIndex, SDL_DisplayMode* mode}}, 264 {q{SDL_DisplayMode*}, q{SDL_GetClosestDisplayMode}, q{int displayIndex, const(SDL_DisplayMode)* mode, SDL_DisplayMode* closest}}, 265 {q{int}, q{SDL_GetWindowDisplayIndex}, q{SDL_Window* window}}, 266 {q{int}, q{SDL_SetWindowDisplayMode}, q{SDL_Window* window, const(SDL_DisplayMode)* mode}}, 267 {q{int}, q{SDL_GetWindowDisplayMode}, q{SDL_Window* window, SDL_DisplayMode* mode}}, 268 {q{uint}, q{SDL_GetWindowPixelFormat}, q{SDL_Window* window}}, 269 {q{SDL_Window*}, q{SDL_CreateWindow}, q{const(char)* title, int x, int y, int w, int h, SDL_WindowFlags flags}}, 270 {q{SDL_Window*}, q{SDL_CreateWindowFrom}, q{const(void)* data}}, 271 {q{uint}, q{SDL_GetWindowID}, q{SDL_Window* window}}, 272 {q{SDL_Window*}, q{SDL_GetWindowFromID}, q{uint id}}, 273 {q{SDL_WindowFlags}, q{SDL_GetWindowFlags}, q{SDL_Window* window}}, 274 {q{void}, q{SDL_SetWindowTitle}, q{SDL_Window* window, const(char)* title}}, 275 {q{const(char)*}, q{SDL_GetWindowTitle}, q{SDL_Window* window}}, 276 {q{void}, q{SDL_SetWindowIcon}, q{SDL_Window* window, SDL_Surface* icon}}, 277 {q{void*}, q{SDL_SetWindowData}, q{SDL_Window* window, const(char)* name, void* userData}}, 278 {q{void*}, q{SDL_GetWindowData}, q{SDL_Window* window, const(char)* name}}, 279 {q{void}, q{SDL_SetWindowPosition}, q{SDL_Window* window, int x, int y}}, 280 {q{void}, q{SDL_GetWindowPosition}, q{SDL_Window* window, int* x, int* y}}, 281 {q{void}, q{SDL_SetWindowSize}, q{SDL_Window* window, int w, int h}}, 282 {q{void}, q{SDL_GetWindowSize}, q{SDL_Window* window, int* w, int* h}}, 283 {q{void}, q{SDL_SetWindowMinimumSize}, q{SDL_Window* window, int minW, int minH}}, 284 {q{void}, q{SDL_GetWindowMinimumSize}, q{SDL_Window* window, int* w, int* h}}, 285 {q{void}, q{SDL_SetWindowMaximumSize}, q{SDL_Window* window, int maxW, int maxH}}, 286 {q{void}, q{SDL_GetWindowMaximumSize}, q{SDL_Window* window, int* w, int* h}}, 287 {q{void}, q{SDL_SetWindowBordered}, q{SDL_Window* window, SDL_bool bordered}}, 288 {q{void}, q{SDL_ShowWindow}, q{SDL_Window* window}}, 289 {q{void}, q{SDL_HideWindow}, q{SDL_Window* window}}, 290 {q{void}, q{SDL_RaiseWindow}, q{SDL_Window* window}}, 291 {q{void}, q{SDL_MaximizeWindow}, q{SDL_Window* window}}, 292 {q{void}, q{SDL_MinimizeWindow}, q{SDL_Window* window}}, 293 {q{void}, q{SDL_RestoreWindow}, q{SDL_Window* window}}, 294 {q{int}, q{SDL_SetWindowFullscreen}, q{SDL_Window* window, SDL_WindowFlags flags}}, 295 {q{SDL_Surface*}, q{SDL_GetWindowSurface}, q{SDL_Window* window}}, 296 {q{int}, q{SDL_UpdateWindowSurface}, q{SDL_Window* window}}, 297 {q{int}, q{SDL_UpdateWindowSurfaceRects}, q{SDL_Window* window, SDL_Rect* rects, int numRects}}, 298 {q{void}, q{SDL_SetWindowGrab}, q{SDL_Window* window, SDL_bool grabbed}}, 299 {q{SDL_bool}, q{SDL_GetWindowGrab}, q{SDL_Window* window}}, 300 {q{int}, q{SDL_SetWindowBrightness}, q{SDL_Window* window, float brightness}}, 301 {q{float}, q{SDL_GetWindowBrightness}, q{SDL_Window* window}}, 302 {q{int}, q{SDL_SetWindowGammaRamp}, q{SDL_Window* window, const(ushort)* red, const(ushort)* green, const(ushort)* blue}}, 303 {q{int}, q{SDL_GetWindowGammaRamp}, q{SDL_Window* window, ushort* red, ushort* green, ushort* blue}}, 304 {q{void}, q{SDL_DestroyWindow}, q{SDL_Window* window}}, 305 {q{SDL_bool}, q{SDL_IsScreenSaverEnabled}, q{}}, 306 {q{void}, q{SDL_EnableScreenSaver}, q{}}, 307 {q{void}, q{SDL_DisableScreenSaver}, q{}}, 308 {q{int}, q{SDL_GL_LoadLibrary}, q{const(char)* path}}, 309 {q{void*}, q{SDL_GL_GetProcAddress}, q{const(char)* proc}}, 310 {q{void}, q{SDL_GL_UnloadLibrary}, q{}}, 311 {q{SDL_bool}, q{SDL_GL_ExtensionSupported}, q{const(char)* extension}}, 312 {q{int}, q{SDL_GL_SetAttribute}, q{SDL_GLattr attr, int value}}, 313 {q{int}, q{SDL_GL_GetAttribute}, q{SDL_GLattr attr, int* value}}, 314 {q{SDL_GLContext}, q{SDL_GL_CreateContext}, q{SDL_Window* window}}, 315 {q{int}, q{SDL_GL_MakeCurrent}, q{SDL_Window* window, SDL_GLContext context}}, 316 {q{SDL_Window*}, q{SDL_GL_GetCurrentWindow}, q{}}, 317 {q{SDL_GLContext}, q{SDL_GL_GetCurrentContext}, q{}}, 318 {q{int}, q{SDL_GL_SetSwapInterval}, q{int interval}}, 319 {q{int}, q{SDL_GL_GetSwapInterval}, q{}}, 320 {q{void}, q{SDL_GL_SwapWindow}, q{SDL_Window* window}}, 321 {q{void}, q{SDL_GL_DeleteContext}, q{SDL_GLContext context}}, 322 ]; 323 if(sdlSupport >= SDLSupport.v2_0_1){ 324 FnBind[] add = [ 325 {q{void}, q{SDL_GL_GetDrawableSize}, q{SDL_Window* window, int* w, int* h}}, 326 ]; 327 ret ~= add; 328 } 329 if(sdlSupport >= SDLSupport.v2_0_2){ 330 FnBind[] add = [ 331 {q{void}, q{SDL_GL_ResetAttributes}, q{}}, 332 ]; 333 ret ~= add; 334 } 335 if(sdlSupport >= SDLSupport.v2_0_4){ 336 FnBind[] add = [ 337 {q{int}, q{SDL_GetDisplayDPI}, q{int displayIndex, float* ddpi, float* hdpi, float* vdpi}}, 338 {q{SDL_Window*}, q{SDL_GetGrabbedWindow}, q{}}, 339 {q{int}, q{SDL_SetWindowHitTest}, q{SDL_Window* window, SDL_HitTest callback, void* callbackData}}, 340 ]; 341 ret ~= add; 342 } 343 if(sdlSupport >= SDLSupport.v2_0_5){ 344 FnBind[] add = [ 345 {q{int}, q{SDL_GetDisplayUsableBounds}, q{int displayIndex, SDL_Rect* rect}}, 346 {q{int}, q{SDL_GetWindowBordersSize}, q{SDL_Window* window, int* top, int* left, int* bottom, int* right}}, 347 {q{int}, q{SDL_GetWindowOpacity}, q{SDL_Window* window, float* opacity}}, 348 {q{int}, q{SDL_SetWindowInputFocus}, q{SDL_Window* window}}, 349 {q{int}, q{SDL_SetWindowModalFor}, q{SDL_Window* modalWindow, SDL_Window* parentWindow}}, 350 {q{int}, q{SDL_SetWindowOpacity}, q{SDL_Window* window, float opacity}}, 351 {q{void}, q{SDL_SetWindowResizable}, q{SDL_Window* window, SDL_bool resizable}}, 352 ]; 353 ret ~= add; 354 } 355 if(sdlSupport >= SDLSupport.v2_0_9){ 356 FnBind[] add = [ 357 {q{SDL_DisplayOrientation}, q{SDL_GetDisplayOrientation}, q{int displayIndex}}, 358 ]; 359 ret ~= add; 360 } 361 if(sdlSupport >= SDLSupport.v2_0_16){ 362 FnBind[] add = [ 363 {q{int}, q{SDL_FlashWindow}, q{SDL_Window* window, SDL_FlashOperation operation}}, 364 {q{void}, q{SDL_SetWindowAlwaysOnTop}, q{SDL_Window* window, SDL_bool on_top}}, 365 {q{void}, q{SDL_SetWindowKeyboardGrab}, q{SDL_Window* window, SDL_bool grabbed}}, 366 {q{SDL_bool}, q{SDL_GetWindowKeyboardGrab}, q{SDL_Window * window}}, 367 {q{void}, q{SDL_SetWindowMouseGrab}, q{SDL_Window* window, SDL_bool grabbed}}, 368 {q{SDL_bool}, q{SDL_GetWindowMouseGrab}, q{SDL_Window* window}}, 369 ]; 370 ret ~= add; 371 } 372 if(sdlSupport >= SDLSupport.v2_0_18){ 373 FnBind[] add = [ 374 {q{void*}, q{SDL_GetWindowICCProfile}, q{SDL_Window* window, size_t* size}}, 375 {q{int}, q{SDL_SetWindowMouseRect}, q{SDL_Window* window, const(SDL_Rect)* rect}}, 376 {q{const(SDL_Rect)*}, q{SDL_GetWindowMouseRect}, q{SDL_Window* window}}, 377 ]; 378 ret ~= add; 379 } 380 if(sdlSupport >= SDLSupport.v2_24){ 381 FnBind[] add = [ 382 {q{int}, q{SDL_GetPointDisplayIndex}, q{const(SDL_Point)* point}}, 383 {q{int}, q{SDL_GetRectDisplayIndex}, q{const(SDL_Rect)* rect}}, 384 ]; 385 ret ~= add; 386 } 387 if(sdlSupport >= SDLSupport.v2_26){ 388 FnBind[] add = [ 389 {q{void}, q{SDL_GetWindowSizeInPixels}, q{SDL_Window* window, int* w, int* h}}, 390 ]; 391 ret ~= add; 392 } 393 if(sdlSupport >= SDLSupport.v2_28){ 394 FnBind[] add = [ 395 {q{SDL_bool}, q{SDL_HasWindowSurface}, q{SDL_Window* window}}, 396 {q{int}, q{SDL_DestroyWindowSurface}, q{SDL_Window* window}}, 397 ]; 398 ret ~= add; 399 } 400 return ret; 401 }()));