21 #include "../SDL_internal.h" 31 #include "../events/SDL_events_c.h" 32 #include "../timer/SDL_timer_c.h" 40 #if SDL_VIDEO_OPENGL_ES 45 #if SDL_VIDEO_OPENGL_ES2 && !SDL_VIDEO_OPENGL 50 #ifndef GL_CONTEXT_RELEASE_BEHAVIOR_KHR 51 #define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB 56 #include <emscripten.h> 61 #if SDL_VIDEO_DRIVER_COCOA 64 #if SDL_VIDEO_DRIVER_X11 67 #if SDL_VIDEO_DRIVER_MIR 70 #if SDL_VIDEO_DRIVER_WAYLAND 73 #if SDL_VIDEO_DRIVER_VIVANTE 76 #if SDL_VIDEO_DRIVER_DIRECTFB 79 #if SDL_VIDEO_DRIVER_WINDOWS 82 #if SDL_VIDEO_DRIVER_WINRT 85 #if SDL_VIDEO_DRIVER_HAIKU 88 #if SDL_VIDEO_DRIVER_PANDORA 91 #if SDL_VIDEO_DRIVER_UIKIT 94 #if SDL_VIDEO_DRIVER_ANDROID 97 #if SDL_VIDEO_DRIVER_PSP 100 #if SDL_VIDEO_DRIVER_KMSDRM 103 #if SDL_VIDEO_DRIVER_RPI 106 #if SDL_VIDEO_DRIVER_NACL 109 #if SDL_VIDEO_DRIVER_EMSCRIPTEN 112 #if SDL_VIDEO_DRIVER_QNX 115 #if SDL_VIDEO_DRIVER_DUMMY 123 #define CHECK_WINDOW_MAGIC(window, retval) \ 125 SDL_UninitializedVideo(); \ 128 SDL_assert(window && window->magic == &_this->window_magic); \ 129 if (!window || window->magic != &_this->window_magic) { \ 130 SDL_SetError("Invalid window"); \ 134 #define CHECK_DISPLAY_INDEX(displayIndex, retval) \ 136 SDL_UninitializedVideo(); \ 139 SDL_assert(_this->displays != NULL); \ 140 SDL_assert(displayIndex >= 0 && displayIndex < _this->num_displays); \ 141 if (displayIndex < 0 || displayIndex >= _this->num_displays) { \ 142 SDL_SetError("displayIndex must be in the range 0 - %d", \ 143 _this->num_displays - 1); \ 147 #define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN) 158 #define SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData" 202 #if defined(__WIN32__) 207 #elif defined(__MACOSX__) 211 #elif defined(__LINUX__) 225 const char *vendor =
NULL;
228 if (glGetStringFunc) {
229 vendor = (
const char *) glGetStringFunc(
GL_VENDOR);
241 return hasAcceleratedOpenGL;
243 #elif SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 270 if (hint && *hint !=
'0' && *hint !=
'1' &&
297 return SDL_SetError(
"No hardware accelerated renderers available");
341 window->
w, window->
h);
352 const size_t allocsize = window->
h * data->
pitch;
360 *pitch = data->
pitch;
425 }
else if (a->
w != b->
w) {
427 }
else if (a->
h != b->
h) {
442 return SDL_SetError(
"Video subsystem has not been initialized");
475 #if !SDL_TIMERS_DISABLED 490 if (driver_name ==
NULL) {
493 if (driver_name !=
NULL) {
494 for (i = 0; bootstrap[
i]; ++
i) {
497 video = bootstrap[
i]->
create(index);
503 for (i = 0; bootstrap[
i]; ++
i) {
505 video = bootstrap[
i]->
create(index);
540 return SDL_SetError(
"The video driver did not add any displays");
616 displays[
index] = *display;
649 for (displayIndex = 0; displayIndex < _this->
num_displays; ++displayIndex) {
650 if (display == &_this->
displays[displayIndex]) {
690 if (displayIndex == 0) {
729 display = &_this->
displays[displayIndex];
732 if (_this->
GetDisplayDPI(_this, display, ddpi, hdpi, vdpi) == 0) {
751 for (i = 0; i < nmodes; ++
i) {
752 if (
cmpmodes(mode, &modes[i]) == 0) {
768 modes[nmodes] = *
mode;
804 display = &_this->
displays[displayIndex];
806 return SDL_SetError(
"index must be in the range of 0 - %d",
822 display = &_this->
displays[displayIndex];
836 display = &_this->
displays[displayIndex];
849 int target_refresh_rate;
853 if (!mode || !closest) {
854 SDL_SetError(
"Missing desired mode or closest mode parameter");
860 target_format = mode->
format;
876 if (current->
w && (current->
w < mode->
w)) {
880 if (current->
h && (current->
h < mode->
h)) {
881 if (current->
w && (current->
w == mode->
w)) {
890 if (!match || current->
w < match->
w || current->
h < match->
h) {
896 if (current->
format == target_format ||
918 if (match->
w && match->
h) {
919 closest->
w = match->
w;
920 closest->
h = match->
h;
922 closest->
w = mode->
w;
923 closest->
h = mode->
h;
959 display = &_this->
displays[displayIndex];
970 display_mode = *
mode;
973 if (!display_mode.
format) {
976 if (!display_mode.
w) {
979 if (!display_mode.
h) {
988 return SDL_SetError(
"No video mode large enough for %dx%d",
989 display_mode.
w, display_mode.
h);
997 if (
SDL_memcmp(&display_mode, ¤t_mode,
sizeof(display_mode)) == 0) {
1003 return SDL_SetError(
"Video driver doesn't support changing display mode");
1018 int closest_dist = 0x7FFFFFFF;
1027 displayIndex = (window->
x & 0xFFFF);
1031 return displayIndex;
1035 displayIndex = (window->
y & 0xFFFF);
1039 return displayIndex;
1050 center.
x = window->
x + window->
w / 2;
1051 center.
y = window->
y + window->
h / 2;
1058 delta.
x = center.
x - (rect.
x + rect.
w / 2);
1059 delta.
y = center.
y - (rect.
y + rect.
h / 2);
1060 dist = (delta.
x*delta.
x + delta.
y*delta.
y);
1061 if (dist < closest_dist) {
1063 closest_dist = dist;
1076 if (displayIndex >= 0) {
1077 return &_this->
displays[displayIndex];
1116 if (!fullscreen_mode.
w) {
1119 if (!fullscreen_mode.
h) {
1130 &fullscreen_mode)) {
1131 return SDL_SetError(
"Couldn't find display mode match");
1135 *mode = fullscreen_mode;
1189 if (!Cocoa_SetWindowFullscreenSpace(window,
SDL_FALSE)) {
1200 if (Cocoa_SetWindowFullscreenSpace(window, fullscreen)) {
1201 if (Cocoa_IsWindowInFullscreenSpace(window) != fullscreen) {
1208 #elif __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10) 1252 for (other = _this->
windows; other; other = other->
next) {
1255 if (other == window) {
1256 setDisplayMode = fullscreen;
1262 if (setDisplayMode) {
1270 if (other->
w == fullscreen_mode.
w && other->
h == fullscreen_mode.
h) {
1293 fullscreen_mode.
w, fullscreen_mode.
h);
1324 #define CREATE_FLAGS \ 1325 (SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP | SDL_WINDOW_VULKAN) 1373 if ((w > 16384) || (h > 16384)) {
1379 #if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ || __NACL__ 1394 if (flags & SDL_WINDOW_VULKAN) {
1396 SDL_SetError(
"Vulkan support is either not configured in SDL " 1397 "or not available in video driver");
1400 if (flags & SDL_WINDOW_OPENGL) {
1401 SDL_SetError(
"Vulkan and OpenGL not supported on same window");
1414 flags &= ~SDL_WINDOW_ALLOW_HIGHDPI;
1438 window->
x = bounds.
x + (bounds.
w -
w) / 2;
1441 window->
y = bounds.
y + (bounds.
h -
h) / 2;
1457 window->
x = bounds.
x;
1458 window->
y = bounds.
y;
1459 window->
w = bounds.
w;
1460 window->
h = bounds.
h;
1480 #if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10) 1489 flags = window->
flags;
1547 return SDL_SetError(
"No OpenGL support in video driver");
1573 if ((window->
flags & SDL_WINDOW_OPENGL) != (flags & SDL_WINDOW_OPENGL)) {
1574 if (flags & SDL_WINDOW_OPENGL) {
1585 SDL_SetError(
"Can't change SDL_WINDOW_VULKAN window flag");
1589 if ((window->
flags & SDL_WINDOW_VULKAN) && (flags & SDL_WINDOW_OPENGL)) {
1590 SDL_SetError(
"Vulkan and OpenGL not supported on same window");
1600 if (loaded_opengl) {
1602 window->
flags &= ~SDL_WINDOW_OPENGL;
1608 if (flags & SDL_WINDOW_FOREIGN) {
1651 for (window = _this->
windows; window; window = window->
next) {
1652 if (window->
id ==
id) {
1664 return window->
flags;
1672 if (title == window->
title) {
1705 if (!window->
icon) {
1722 if (name ==
NULL || name[0] ==
'\0') {
1729 for (data = window->
data; data; prev = data, data = data->
next) {
1731 void *last_value = data->
data;
1735 data->
data = userdata;
1754 data->
data = userdata;
1769 if (name ==
NULL || name[0] ==
'\0') {
1774 for (data = window->
data; data; data = data->
next) {
1788 int displayIndex = (x & 0xFFFF);
1798 x = bounds.
x + (bounds.
w - window->
w) / 2;
1801 y = bounds.
y + (bounds.
h - window->
h) / 2;
1846 if (displayIndex >= 0) {
1874 const int want = (bordered !=
SDL_FALSE);
1892 const int want = (resizable !=
SDL_FALSE);
1946 if (window->
w == w && window->
h == h) {
1970 if (!top) { top = &dummy; }
1971 if (!left) { left = &dummy; }
1972 if (!right) { right = &dummy; }
1973 if (!bottom) { bottom = &dummy; }
1976 *top = *left = *bottom = *right = 0;
2000 if ((window->
max_w && min_w >= window->
max_w) ||
2002 SDL_SetError(
"SDL_SetWindowMinimumSize(): Tried to set minimum size larger than maximum size");
2006 window->
min_w = min_w;
2007 window->
min_h = min_h;
2023 *min_w = window->
min_w;
2026 *min_h = window->
min_h;
2043 if (max_w <= window->min_w || max_h <= window->min_h) {
2044 SDL_SetError(
"SDL_SetWindowMaximumSize(): Tried to set maximum size smaller than minimum size");
2048 window->
max_w = max_w;
2049 window->
max_h = max_h;
2065 *max_w = window->
max_w;
2068 *max_h = window->
max_h;
2187 window->
flags |= oldflags;
2198 Uint32 Rmask, Gmask, Bmask, Amask;
2243 full_rect.
w = window->
w;
2244 full_rect.
h = window->
h;
2255 return SDL_SetError(
"Window surface is invalid, please call SDL_GetWindowSurface() to get a new surface");
2295 if (opacity < 0.0
f) {
2297 }
else if (opacity > 1.0
f) {
2315 *out_opacity = window->
opacity;
2358 if (!window->
gamma) {
2388 if (!window->
gamma) {
2392 if (!window->
gamma) {
2403 for (i = 0; i < 256; ++
i) {
2440 if (grabbed_window && (grabbed_window != window)) {
2448 }
else if (grabbed_window == window) {
2568 if (Cocoa_IsWindowInFullscreenSpace(window)) {
2601 for (window = _this->
windows; window; window = window->
next) {
2665 while (window->
data) {
2790 return SDL_SetError(
"No dynamic GL support in video driver");
2843 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 2847 return (verstr && (
SDL_atoi(verstr) >= 3));
2854 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 2856 const char *extensions;
2858 const char *where, *terminator;
2862 if (where || *extension ==
'\0') {
2867 if (start && *start ==
'0') {
2874 if (!glGetStringFunc) {
2886 if ((!glGetStringiFunc) || (!glGetIntegervFunc)) {
2890 #ifndef GL_NUM_EXTENSIONS 2891 #define GL_NUM_EXTENSIONS 0x821D 2894 for (i = 0; i < num_exts; i++) {
2895 const char *thisext = (
const char *) glGetStringiFunc(
GL_EXTENSIONS, i);
2923 if (where == extensions || *(where - 1) ==
' ')
2924 if (*terminator ==
' ' || *terminator ==
'\0')
2946 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 2996 #if SDL_VIDEO_OPENGL 3000 #elif SDL_VIDEO_OPENGL_ES2 3004 #elif SDL_VIDEO_OPENGL_ES 3023 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 3101 retval =
SDL_SetError(
"Unknown OpenGL context flag %d", value);
3111 retval =
SDL_SetError(
"Unknown OpenGL context profile %d", value);
3144 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 3155 #if SDL_VIDEO_OPENGL 3159 GLenum attachmentattrib = 0;
3175 #if SDL_VIDEO_OPENGL 3181 #if SDL_VIDEO_OPENGL 3187 #if SDL_VIDEO_OPENGL 3193 #if SDL_VIDEO_OPENGL 3199 #if SDL_VIDEO_OPENGL 3210 #if SDL_VIDEO_OPENGL 3217 #if SDL_VIDEO_OPENGL 3223 #if SDL_VIDEO_OPENGL 3256 #if SDL_VIDEO_OPENGL 3264 int rsize = 0, gsize = 0, bsize = 0, asize = 0;
3280 *value = rsize + gsize + bsize + asize;
3344 #if SDL_VIDEO_OPENGL 3346 if (!glGetStringFunc) {
3351 glGetFramebufferAttachmentParameterivFunc =
SDL_GL_GetProcAddress(
"glGetFramebufferAttachmentParameteriv");
3353 if (glGetFramebufferAttachmentParameterivFunc) {
3354 glGetFramebufferAttachmentParameterivFunc(
GL_FRAMEBUFFER, attachment, attachmentattrib, (
GLint *) value);
3363 if (glGetIntegervFunc) {
3364 glGetIntegervFunc(attrib, (
GLint *) value);
3371 if (!glGetErrorFunc) {
3375 error = glGetErrorFunc();
3397 SDL_SetError(
"The specified window isn't an OpenGL window");
3430 return SDL_SetError(
"The specified window isn't an OpenGL window");
3481 return SDL_SetError(
"No OpenGL context has been made current");
3485 return SDL_SetError(
"Setting the swap interval is not supported");
3509 SDL_SetError(
"The specified window isn't an OpenGL window");
3514 SDL_SetError(
"The specified window has not been made current");
3524 if (!_this || !context) {
3545 #define SET_MASKBIT(icon, x, y, mask) \ 3546 mask[(y*((icon->w+7)/8))+(x/8)] &= ~(0x01<<(7-(x%8))) 3548 colorkey = icon->
format->colorkey;
3553 for (y = 0; y < icon->
h; ++
y) {
3555 for (x = 0; x < icon->
w; ++
x) {
3556 if (*pixels++ == colorkey) {
3557 SET_MASKBIT(icon, x, y,
mask);
3567 for (y = 0; y < icon->
h; ++
y) {
3569 for (x = 0; x < icon->
w; ++
x) {
3570 if ((flags & 1) && *pixels == colorkey) {
3571 SET_MASKBIT(icon, x, y,
mask);
3572 }
else if ((flags & 2)
3574 SET_MASKBIT(icon, x, y,
mask);
3585 for (y = 0; y < icon->
h; ++
y) {
3587 for (x = 0; x < icon->
w; ++
x) {
3588 if ((flags & 1) && *pixels == colorkey) {
3589 SET_MASKBIT(icon, x, y,
mask);
3590 }
else if ((flags & 2)
3592 SET_MASKBIT(icon, x, y,
mask);
3608 if (icon && _this->SetIcon) {
3611 int mask_len = icon->
h * (icon->
w + 7) / 8;
3618 if (icon->
flags & SDL_SRCCOLORKEY)
3620 if (icon->
flags & SDL_SRCALPHA)
3623 CreateMaskFromColorKeyOrAlpha(icon, mask, flags);
3625 _this->SetIcon(_this, icon, mask);
3628 _this->SetIcon(_this, icon, mask);
3726 #if SDL_VIDEO_DRIVER_ANDROID 3729 #if SDL_VIDEO_DRIVER_WINDOWS 3732 #if SDL_VIDEO_DRIVER_WINRT 3735 #if SDL_VIDEO_DRIVER_COCOA 3738 #if SDL_VIDEO_DRIVER_UIKIT 3741 #if SDL_VIDEO_DRIVER_X11 3746 #if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11 3771 int show_cursor_prev;
3775 if (!messageboxdata) {
3788 buttonid = &dummybutton;
3796 #if SDL_VIDEO_DRIVER_ANDROID 3798 Android_ShowMessageBox(messageboxdata, buttonid) == 0) {
3802 #if SDL_VIDEO_DRIVER_WINDOWS 3805 WIN_ShowMessageBox(messageboxdata, buttonid) == 0) {
3809 #if SDL_VIDEO_DRIVER_WINRT 3812 WINRT_ShowMessageBox(messageboxdata, buttonid) == 0) {
3816 #if SDL_VIDEO_DRIVER_COCOA 3819 Cocoa_ShowMessageBox(messageboxdata, buttonid) == 0) {
3823 #if SDL_VIDEO_DRIVER_UIKIT 3826 UIKit_ShowMessageBox(messageboxdata, buttonid) == 0) {
3830 #if SDL_VIDEO_DRIVER_X11 3833 X11_ShowMessageBox(messageboxdata, buttonid) == 0) {
3841 if (current_window) {
3843 if (mouse_captured) {
3857 #ifdef __EMSCRIPTEN__ 3863 alert(UTF8ToString($0) +
"\n\n" + UTF8ToString($1));
3913 float den2 = hinches * hinches + vinches * vinches;
3918 return (
float)(
SDL_sqrt((
double)hpix * (
double)hpix + (
double)vpix * (
double)vpix) /
3939 for (window = _this->
windows; window !=
NULL; window = window->
next) {
3963 for (window = _this->
windows; window !=
NULL; window = window->
next) {
3970 #define NOT_A_VULKAN_WINDOW "The specified window isn't a Vulkan window" 3981 return SDL_SetError(
"Vulkan loader library already loaded");
3986 return SDL_SetError(
"No Vulkan support in video driver");
4043 VkInstance instance,
#define SDL_CreateTexture
#define SDL_WINDOWPOS_ISUNDEFINED(X)
int(* Vulkan_LoadLibrary)(_THIS, const char *path)
static int SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay *display)
void SDL_GL_ResetAttributes()
Reset all previously set OpenGL context attributes to their default values.
SDL_Window * SDL_GetFocusWindow(void)
#define SDL_RenderSetViewport
void * SDL_GetWindowData(SDL_Window *window, const char *name)
Retrieve the data pointer associated with a window.
void SDL_OnWindowShown(SDL_Window *window)
int(* GetDisplayDPI)(_THIS, SDL_VideoDisplay *display, float *ddpi, float *hdpi, float *vdpi)
#define SDL_ConvertSurfaceFormat
struct SDL_VideoDevice::@35 vulkan_config
void SDL_OnWindowLeave(SDL_Window *window)
#define GL_SAMPLE_BUFFERS
int SDL_GetNumVideoDrivers(void)
Get the number of video drivers compiled into SDL.
SDL_Mouse * SDL_GetMouse(void)
void SDL_OnWindowFocusGained(SDL_Window *window)
VideoBootStrap X11_bootstrap
void(* RestoreWindow)(_THIS, SDL_Window *window)
const char * SDL_GetWindowTitle(SDL_Window *window)
Get the title of a window, in UTF-8 format.
void SDL_SetWindowSize(SDL_Window *window, int w, int h)
Set the size of a window's client area.
void SDL_SetKeyboardFocus(SDL_Window *window)
SDL_DisplayMode fullscreen_mode
void SDL_GL_GetDrawableSize(SDL_Window *window, int *w, int *h)
Get the size of a window's underlying drawable in pixels (for use with glViewport).
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
#define SDL_PIXELLAYOUT(X)
void SDL_OnApplicationDidReceiveMemoryWarning(void)
GLint GLint GLint GLint GLint x
VideoBootStrap KMSDRM_bootstrap
GLuint GLsizei const GLchar * message
void SDL_VideoQuit(void)
Shuts down the video subsystem.
#define FULLSCREEN_VISIBLE(W)
SDL_bool(* IsScreenKeyboardShown)(_THIS, SDL_Window *window)
SDL_bool SDL_IsScreenKeyboardShown(SDL_Window *window)
Returns whether the screen keyboard is shown for given window.
void SDL_OnApplicationWillEnterForeground(void)
int SDL_GetDisplayMode(int displayIndex, int index, SDL_DisplayMode *mode)
Fill in information about a specific display mode.
GLuint GLuint GLsizei count
VideoBootStrap MIR_bootstrap
void SDL_ShowWindow(SDL_Window *window)
Show a window.
SDL_TLSID current_glwin_tls
VideoBootStrap Wayland_bootstrap
#define NOT_A_VULKAN_WINDOW
#define SDL_GetNumRenderDrivers
int SDL_GL_SetSwapInterval(int interval)
Set the swap interval for the current OpenGL context.
#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS
Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to true...
GLfloat GLfloat GLfloat GLfloat h
#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER
A variable controlling whether the screensaver is enabled.
static void SDL_RestoreMousePosition(SDL_Window *window)
int SDL_UpdateWindowSurfaceRects(SDL_Window *window, const SDL_Rect *rects, int numrects)
Copy a number of rectangles on the window surface to the screen.
#define SDL_QuitSubSystem
#define SDL_HINT_VIDEO_HIGHDPI_DISABLED
If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
int SDL_GL_LoadLibrary(const char *path)
Dynamically load an OpenGL library.
The structure that defines a point.
A collection of pixels used in software blitting.
int(* GL_SetSwapInterval)(_THIS, int interval)
#define GL_CONTEXT_RELEASE_BEHAVIOR
SDL_bool SDL_IsScreenSaverEnabled()
Returns whether the screensaver is currently enabled (default off).
void SDL_GetWindowPosition(SDL_Window *window, int *x, int *y)
Get the position of a window.
void SDL_SetWindowTitle(SDL_Window *window, const char *title)
Set the title of a window, in UTF-8 format.
void SDL_GL_DeleteContext(SDL_GLContext context)
Delete an OpenGL context.
#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE
void(* ShowWindow)(_THIS, SDL_Window *window)
Uint32 texture_formats[16]
static screen_context_t context
The structure that defines a display mode.
int SDL_SetWindowInputFocus(SDL_Window *window)
Explicitly sets input focus to the window.
VideoBootStrap DirectFB_bootstrap
void SDL_SetWindowGrab(SDL_Window *window, SDL_bool grabbed)
Set a window's input grab mode.
#define SDL_WINDOWPOS_ISCENTERED(X)
SDL_HitTestResult(* SDL_HitTest)(SDL_Window *win, const SDL_Point *area, void *data)
Callback used for hit-testing.
void(* StartTextInput)(_THIS)
void SDL_OnWindowMinimized(SDL_Window *window)
void(* SetWindowSize)(_THIS, SDL_Window *window)
#define SDL_BYTESPERPIXEL(X)
#define SDL_InitSubSystem
SDL_Window * SDL_GetWindowFromID(Uint32 id)
Get a window from a stored ID, or NULL if it doesn't exist.
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
int(* GetWindowBordersSize)(_THIS, SDL_Window *window, int *top, int *left, int *bottom, int *right)
void SDL_GL_DeduceMaxSupportedESProfile(int *major, int *minor)
void SDL_SetWindowMinimumSize(SDL_Window *window, int min_w, int min_h)
Set the minimum size of a window's client area.
int SDL_SetWindowBrightness(SDL_Window *window, float brightness)
Set the brightness (gamma correction) for a window.
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
#define SDL_SetRelativeMouseMode
float SDL_GetWindowBrightness(SDL_Window *window)
Get the brightness (gamma correction) for a window.
int SDL_GetWindowOpacity(SDL_Window *window, float *out_opacity)
Get the opacity of a window.
#define SDL_ISPIXELFORMAT_ALPHA(format)
VideoBootStrap Emscripten_bootstrap
void SDL_SetMouseFocus(SDL_Window *window)
int SDL_SetWindowHitTest(SDL_Window *window, SDL_HitTest callback, void *userdata)
Provide a callback that decides if a window region has special properties.
int SDL_KeyboardInit(void)
void SDL_HideWindow(SDL_Window *window)
Hide a window.
#define SDL_GetKeyboardFocus
#define SDL_InvalidParamError(param)
#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
GLdouble GLdouble GLdouble GLdouble top
VideoBootStrap NACL_bootstrap
#define SDL_GetRenderDriverInfo
SDL_Surface * SDL_GetWindowSurface(SDL_Window *window)
Get the SDL surface associated with the window.
SDL_Window * SDL_CreateWindowFrom(const void *data)
Create an SDL window from an existing native window.
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
Create an OpenGL context for use with an OpenGL window, and make it current.
#define SDL_CreateRGBSurfaceFrom
#define SDL_UpdateTexture
#define GL_ACCUM_ALPHA_BITS
int(* GL_LoadLibrary)(_THIS, const char *path)
SDL_DisplayMode * SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
Get the closest match to the requested display mode.
int SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode *mode)
Fill in information about the desktop display mode.
GLuint const GLchar * name
VideoBootStrap HAIKU_bootstrap
int SDL_GL_GetSwapInterval(void)
Get the swap interval for the current OpenGL context.
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
void SDL_RaiseWindow(SDL_Window *window)
Raise a window above other windows and set the input focus.
#define SDL_GetHintBoolean
void(* SetWindowBordered)(_THIS, SDL_Window *window, SDL_bool bordered)
void(* GL_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
#define SDL_VERSION(x)
Macro to determine SDL version program was compiled against.
Uint32 SDL_GetWindowFlags(SDL_Window *window)
Get the window flags.
static SDL_VideoDevice * _this
int SDL_SetWindowOpacity(SDL_Window *window, float opacity)
Set the opacity for a window.
SDL_GLattr
OpenGL configuration attributes.
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
void SDL_OnApplicationWillTerminate(void)
void(* HideWindow)(_THIS, SDL_Window *window)
void SDL_OnWindowRestored(SDL_Window *window)
#define GL_NUM_EXTENSIONS
const char * SDL_GetCurrentVideoDriver()
Returns the name of the currently initialized video driver.
const char * SDL_GetVideoDriver(int index)
Get the name of a built in video driver.
void(* RaiseWindow)(_THIS, SDL_Window *window)
struct SDL_WindowUserData * next
static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr)
#define SDL_GetRelativeMouseMode
int SDL_GetWindowDisplayMode(SDL_Window *window, SDL_DisplayMode *mode)
Fill in information about the display mode used when a fullscreen window is visible.
void(* SetTextInputRect)(_THIS, SDL_Rect *rect)
SDL_bool(* Vulkan_GetInstanceExtensions)(_THIS, SDL_Window *window, unsigned *count, const char **names)
VideoBootStrap Android_bootstrap
VideoBootStrap VIVANTE_bootstrap
const char * SDL_GetDisplayName(int displayIndex)
Get the name of a display in UTF-8 encoding.
SDL_bool SDL_ShouldAllowTopmost(void)
void * SDL_GLContext
An opaque handle to an OpenGL context.
void * SDL_SetWindowData(SDL_Window *window, const char *name, void *userdata)
Associate an arbitrary named pointer with a window.
VideoBootStrap WINRT_bootstrap
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
static int SDL_UpdateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, const SDL_Rect *rects, int numrects)
SDL_GLContext current_glctx
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
int SDL_SetWindowDisplayMode(SDL_Window *window, const SDL_DisplayMode *mode)
Set the display mode used when a fullscreen window is visible.
#define SDL_GetEventState(type)
static int cmpmodes(const void *A, const void *B)
VideoBootStrap WINDOWS_bootstrap
void(* Vulkan_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
SDL_bool(* Vulkan_CreateSurface)(_THIS, SDL_Window *window, VkInstance instance, VkSurfaceKHR *surface)
#define SDL_WINDOWTEXTUREDATA
static SDL_Renderer * renderer
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
void SDL_SetWindowMaximumSize(SDL_Window *window, int max_w, int max_h)
Set the maximum size of a window's client area.
void SDL_OnApplicationDidEnterBackground(void)
void SDL_OnWindowEnter(SDL_Window *window)
SDL_Window * SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
Create a window with the specified position, dimensions, and flags.
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
int SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect *rect)
Get the usable desktop area represented by a display, with the primary display located at 0...
void(* Vulkan_UnloadLibrary)(_THIS)
int SDL_GL_MakeCurrent(SDL_Window *window, SDL_GLContext ctx)
Set up an OpenGL context for rendering into an OpenGL window.
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int int in j)
void SDL_GL_UnloadLibrary(void)
Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
VideoBootStrap QNX_bootstrap
#define SDL_HINT_ALLOW_TOPMOST
If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it...
SDL_DisplayMode * display_modes
SDL_bool SDL_GetWindowGrab(SDL_Window *window)
Get a window's input grab mode.
void SDL_UpdateWindowGrab(SDL_Window *window)
void(* SetWindowMinimumSize)(_THIS, SDL_Window *window)
Uint32 SDL_GetWindowPixelFormat(SDL_Window *window)
Get the pixel format associated with the window.
SDL_DisplayMode current_mode
void SDL_Vulkan_GetDrawableSize(SDL_Window *window, int *w, int *h)
Get the size of a window's underlying drawable in pixels (for use with setting viewport, scissor & etc).
GLubyte GLubyte GLubyte GLubyte w
GLsizei const GLfloat * value
SDL_VideoDisplay * displays
int(* GetDisplayBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
void(* DestroyWindow)(_THIS, SDL_Window *window)
void(* StopTextInput)(_THIS)
void SDL_GetWindowSize(SDL_Window *window, int *w, int *h)
Get the size of a window's client area.
static Uint32 callback(Uint32 interval, void *param)
void SDL_OnApplicationDidBecomeActive(void)
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
Uint32 WINRT_DetectWindowFlags(SDL_Window *window)
int SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode *mode)
Fill in information about the current display mode.
int SDL_SetWindowGammaRamp(SDL_Window *window, const Uint16 *red, const Uint16 *green, const Uint16 *blue)
Set the gamma ramp for a window.
GLint GLint GLint GLint GLint GLint y
SDL_bool SDL_HasWindows(void)
#define GL_ACCUM_RED_BITS
#define SDL_PixelFormatEnumToMasks
void SDL_StopTextInput(void)
Stop receiving any text input events. This function will hide the on-screen keyboard if supported...
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype)
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0...
static int SDL_CreateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
int SDL_AddBasicVideoDisplay(const SDL_DisplayMode *desktop_mode)
int framebuffer_srgb_capable
const SDL_MessageBoxButtonData * buttons
MessageBox structure containing title, text, window, etc.
#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR
SDL_bool(* HasScreenKeyboardSupport)(_THIS)
void SDL_MaximizeWindow(SDL_Window *window)
Make a window as large as possible.
static void SDL_DestroyWindowTexture(SDL_VideoDevice *unused, SDL_Window *window)
void SDL_OnApplicationWillResignActive(void)
void SDL_KeyboardQuit(void)
#define GL_ACCUM_GREEN_BITS
void SDL_RestoreWindow(SDL_Window *window)
Restore the size and position of a minimized or maximized window.
void SDL_StartTextInput(void)
Start accepting Unicode text input events. This function will show the on-screen keyboard if supporte...
static int SDL_SetDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
VideoBootStrap PSP_bootstrap
SDL_Window * fullscreen_window
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
int SDL_GetNumVideoDisplays(void)
Returns the number of available video displays.
SDL_VideoDevice * SDL_GetVideoDevice(void)
void(* GL_UnloadLibrary)(_THIS)
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
int share_with_current_context
int SDL_GetDisplayDPI(int displayIndex, float *ddpi, float *hdpi, float *vdpi)
Get the dots/pixels-per-inch for a display.
#define SDL_assert(condition)
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
int(* ShowMessageBox)(_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid)
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
void(* SetWindowMaximumSize)(_THIS, SDL_Window *window)
VideoBootStrap RPI_bootstrap
int(* CreateSDLWindow)(_THIS, SDL_Window *window)
#define SDL_OutOfMemory()
SDL_DisplayMode desktop_mode
#define SDL_GetMouseFocus
SDL_bool SDL_GetWindowWMInfo(SDL_Window *window, struct SDL_SysWMinfo *info)
This function allows access to driver-dependent window information.
SDL_bool SDL_IsTextInputActive(void)
Return whether or not Unicode text input events are enabled.
void * SDL_GetDisplayDriverData(int displayIndex)
void SDL_SetWindowBordered(SDL_Window *window, SDL_bool bordered)
Set the border state of a window.
Uint32 last_fullscreen_flags
int SDL_SetWindowModalFor(SDL_Window *modal_window, SDL_Window *parent_window)
Sets the window as a modal for another window (TODO: reconsider this function and/or its name) ...
VideoBootStrap DUMMY_bootstrap
Information on the capabilities of a render driver or context.
void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable)
Set the user-resizable state of a window.
void SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon)
Set the icon for a window.
SDL_Window * SDL_GetGrabbedWindow(void)
Get the window that currently has an input grab enabled.
int(* SetWindowOpacity)(_THIS, SDL_Window *window, float opacity)
SDL_bool SDL_Vulkan_CreateSurface(SDL_Window *window, VkInstance instance, VkSurfaceKHR *surface)
Create a Vulkan rendering surface for a window.
float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches)
static SDL_bool ShouldUseTextureFramebuffer()
EGLSurface EGLNativeWindowType * window
#define SDL_DestroyTexture
void(* SetWindowPosition)(_THIS, SDL_Window *window)
void SDL_GetWindowMaximumSize(SDL_Window *window, int *max_w, int *max_h)
Get the maximum size of a window's client area.
#define GL_ACCUM_BLUE_BITS
int(* GL_SwapWindow)(_THIS, SDL_Window *window)
int SDL_VideoInit(const char *driver_name)
Initialize the video subsystem, optionally specifying a video driver.
void(* ShowScreenKeyboard)(_THIS, SDL_Window *window)
SDL_TLSID current_glctx_tls
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
The type used to identify a window.
void SDL_Vulkan_UnloadLibrary(void)
Unload the Vulkan loader library previously loaded by SDL_Vulkan_LoadLibrary().
int(* GetWindowGammaRamp)(_THIS, SDL_Window *window, Uint16 *ramp)
void SDL_ResetKeyboard(void)
#define SDL_HINT_FRAMEBUFFER_ACCELERATION
A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
Create a modal message box.
static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
void(* MinimizeWindow)(_THIS, SDL_Window *window)
SDL_VideoDevice *(* create)(int devindex)
VideoBootStrap PND_bootstrap
int SDL_GL_SetAttribute(SDL_GLattr attr, int value)
Set an OpenGL window attribute before window creation.
SDL_GLContext SDL_GL_GetCurrentContext(void)
Get the currently active OpenGL context.
VideoBootStrap COCOA_bootstrap
#define SDL_HINT_RENDER_DRIVER
A variable specifying which render driver to use.
static int SDL_UninitializedVideo()
SDL_bool SDL_GL_ExtensionSupported(const char *extension)
Return true if an OpenGL extension is supported for the current context.
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
int(* SetWindowInputFocus)(_THIS, SDL_Window *window)
static VideoBootStrap * bootstrap[]
void * SDL_GL_GetProcAddress(const char *proc)
Get the address of an OpenGL function.
Uint32 num_texture_formats
SDL_Window * grabbed_window
#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
int SDL_UpdateWindowSurface(SDL_Window *window)
Copy the window surface to the screen.
SDL_bool suspend_screensaver
int(* CreateSDLWindowFrom)(_THIS, SDL_Window *window, const void *data)
#define SDL_arraysize(array)
static SDL_DisplayMode * SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
void(* SetWindowFullscreen)(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
int SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
Get the actual value for an attribute from the current context.
void * SDL_Vulkan_GetVkGetInstanceProcAddr(void)
Get the address of the vkGetInstanceProcAddr function.
void SDL_OnWindowHidden(SDL_Window *window)
int(* SetWindowModalFor)(_THIS, SDL_Window *modal_window, SDL_Window *parent_window)
#define SDL_CalculateGammaRamp
int SDL_GetWindowGammaRamp(SDL_Window *window, Uint16 *red, Uint16 *green, Uint16 *blue)
Get the gamma ramp for a window.
GLsizei const GLchar *const * path
VideoBootStrap UIKIT_bootstrap
#define SDL_WarpMouseInWindow
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
void SDL_GL_SwapWindow(SDL_Window *window)
Swap the OpenGL buffers for a window, if double-buffering is supported.
struct SDL_VideoDevice::@34 gl_config
#define SDL_DestroyRenderer
#define SDL_EnclosePoints
int SDL_RecreateWindow(SDL_Window *window, Uint32 flags)
int SDL_SendAppEvent(SDL_EventType eventType)
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
#define SDL_ISPIXELFORMAT_FOURCC(format)
#define CHECK_WINDOW_MAGIC(window, retval)
void(* GL_DefaultProfileConfig)(_THIS, int *mask, int *major, int *minor)
int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window)
Create a simple modal message box.
void(* SetWindowTitle)(_THIS, SDL_Window *window)
int SDL_Vulkan_LoadLibrary(const char *path)
Dynamically load a Vulkan loader library.
EGLSurface EGLint * rects
void(* SetWindowResizable)(_THIS, SDL_Window *window, SDL_bool resizable)
int(* GetDisplayUsableBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
int(* GL_GetSwapInterval)(_THIS)
void(* MaximizeWindow)(_THIS, SDL_Window *window)
void SDL_OnWindowFocusLost(SDL_Window *window)
int SDL_GetWindowDisplayIndex(SDL_Window *window)
Get the display index associated with a window.
static int SDL_GetIndexOfDisplay(SDL_VideoDisplay *display)
GLboolean GLboolean GLboolean GLboolean a
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
SDL_Window * SDL_GL_GetCurrentWindow(void)
Get the currently active OpenGL window.
void SDL_EnableScreenSaver()
Allow the screen to be blanked by a screensaver.
static SDL_bool ShouldMinimizeOnFocusLoss(SDL_Window *window)
Uint32 SDL_GetWindowID(SDL_Window *window)
Get the numeric ID of a window, for logging purposes.
void(* OnWindowEnter)(_THIS, SDL_Window *window)
void(* SuspendScreenSaver)(_THIS)
GLboolean GLboolean GLboolean b
SDL_bool SDL_HasScreenKeyboardSupport(void)
Returns whether the platform has some screen keyboard support.
SDL_Window * current_glwin
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
#define SDL_BITSPERPIXEL(X)
#define SDL_Unsupported()
#define SDL_GetMouseState
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
void *(* GL_GetProcAddress)(_THIS, const char *proc)
SDL_WindowUserData * data
void SDL_SetWindowPosition(SDL_Window *window, int x, int y)
Set the position of a window.
#define SDL_CreateRenderer
void SDL_OnWindowResized(SDL_Window *window)
A rectangle, with the origin at the upper left.
#define SDL_GetRendererInfo
SDL_bool SDL_GetSpanEnclosingRect(int width, int height, int numrects, const SDL_Rect *rects, SDL_Rect *span)
#define SDL_RenderPresent
void SDL_DisableScreenSaver()
Prevent the screen from being blanked by a screensaver.
SDL_bool SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, unsigned *count, const char **names)
int SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags)
Set a window's fullscreen state.
void SDL_SetTextInputRect(SDL_Rect *rect)
Set the rectangle used to type Unicode text inputs. This is used as a hint for IME and on-screen keyb...
int SDL_GetNumDisplayModes(int displayIndex)
Returns the number of available display modes.
static SDL_Surface * SDL_CreateWindowFramebuffer(SDL_Window *window)
void(* HideScreenKeyboard)(_THIS, SDL_Window *window)
void SDL_GetWindowMinimumSize(SDL_Window *window, int *min_w, int *min_h)
Get the minimum size of a window's client area.
int SDL_GetWindowBordersSize(SDL_Window *window, int *top, int *left, int *bottom, int *right)
Get the size of a window's borders (decorations) around the client area.
#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE