Go to the documentation of this file.
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_WAYLAND
70 #if SDL_VIDEO_DRIVER_VIVANTE
73 #if SDL_VIDEO_DRIVER_DIRECTFB
76 #if SDL_VIDEO_DRIVER_WINDOWS
79 #if SDL_VIDEO_DRIVER_WINRT
82 #if SDL_VIDEO_DRIVER_HAIKU
85 #if SDL_VIDEO_DRIVER_PANDORA
88 #if SDL_VIDEO_DRIVER_UIKIT
91 #if SDL_VIDEO_DRIVER_ANDROID
94 #if SDL_VIDEO_DRIVER_PSP
97 #if SDL_VIDEO_DRIVER_MALI
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");
342 if (!
data->texture) {
352 const size_t allocsize =
window->h *
data->pitch;
360 *pitch =
data->pitch;
410 if (
data->renderer) {
425 }
else if (
a->w !=
b->w) {
427 }
else if (
a->h !=
b->h) {
433 }
else if (
a->refresh_rate !=
b->refresh_rate) {
434 return b->refresh_rate -
a->refresh_rate;
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) {
540 return SDL_SetError(
"The video driver did not add any displays");
616 displays[
index] = *display;
690 if (displayIndex == 0) {
762 for (
i = 0;
i < nmodes; ++
i) {
779 modes[nmodes] = *
mode;
817 return SDL_SetError(
"index must be in the range of 0 - %d",
860 int target_refresh_rate;
864 if (!
mode || !closest) {
865 SDL_SetError(
"Missing desired mode or closest mode parameter");
871 target_format =
mode->format;
877 if (
mode->refresh_rate) {
878 target_refresh_rate =
mode->refresh_rate;
887 if (current->
w && (current->
w <
mode->w)) {
891 if (current->
h && (current->
h <
mode->h)) {
892 if (current->
w && (current->
w ==
mode->w)) {
901 if (!match || current->
w < match->
w || current->
h < match->
h) {
907 if (current->
format == target_format ||
929 if (match->
w && match->
h) {
930 closest->
w = match->
w;
931 closest->
h = match->
h;
933 closest->
w =
mode->w;
934 closest->
h =
mode->h;
981 display_mode = *
mode;
984 if (!display_mode.
format) {
987 if (!display_mode.
w) {
990 if (!display_mode.
h) {
999 return SDL_SetError(
"No video mode large enough for %dx%d",
1000 display_mode.
w, display_mode.
h);
1008 if (
SDL_memcmp(&display_mode, ¤t_mode,
sizeof(display_mode)) == 0) {
1014 return SDL_SetError(
"SDL video driver doesn't support changing display mode");
1037 int closest_dist = 0x7FFFFFFF;
1046 displayIndex = (
window->x & 0xFFFF);
1050 return displayIndex;
1054 displayIndex = (
window->y & 0xFFFF);
1058 return displayIndex;
1079 dist = (delta.
x*delta.
x + delta.
y*delta.
y);
1080 if (dist < closest_dist) {
1082 closest_dist = dist;
1095 if (displayIndex >= 0) {
1134 fullscreen_mode =
window->fullscreen_mode;
1135 if (!fullscreen_mode.
w) {
1136 fullscreen_mode.
w =
window->windowed.w;
1138 if (!fullscreen_mode.
h) {
1139 fullscreen_mode.
h =
window->windowed.h;
1149 &fullscreen_mode)) {
1150 return SDL_SetError(
"Couldn't find display mode match");
1154 *
mode = fullscreen_mode;
1194 if (
window->is_hiding && fullscreen) {
1219 if (Cocoa_SetWindowFullscreenSpace(
window, fullscreen)) {
1220 if (Cocoa_IsWindowInFullscreenSpace(
window) != fullscreen) {
1227 #elif __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
1275 setDisplayMode = fullscreen;
1281 if (setDisplayMode) {
1289 if (other->
w == fullscreen_mode.
w && other->
h == fullscreen_mode.
h) {
1318 fullscreen_mode.
w, fullscreen_mode.
h);
1350 #define CREATE_FLAGS \
1351 (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 | SDL_WINDOW_MINIMIZED)
1433 if ((
w > 16384) || (
h > 16384)) {
1439 #if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ || __NACL__
1446 SDL_SetError(
"OpenGL support is either not configured in SDL "
1447 "or not available in current SDL video driver "
1458 SDL_SetError(
"Vulkan support is either not configured in SDL "
1459 "or not available in current SDL video driver "
1464 SDL_SetError(
"Vulkan and OpenGL not supported on same window");
1501 window->x = bounds.
x + (bounds.
w -
w) / 2;
1504 window->y = bounds.
y + (bounds.
h -
h) / 2;
1529 window->brightness = 1.0f;
1546 #if !defined(__WIN32__)
1552 #if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
1599 window->brightness = 1.0f;
1622 return SDL_SetError(
"OpenGL support is either not configured in SDL "
1623 "or not available in current SDL video driver "
1669 SDL_SetError(
"Can't change SDL_WINDOW_VULKAN window flag");
1674 SDL_SetError(
"Vulkan and OpenGL not supported on same window");
1684 if (loaded_opengl) {
1756 if (title ==
window->title) {
1815 void *last_value =
data->data;
1819 data->data = userdata;
1838 data->data = userdata;
1872 int displayIndex = (
x & 0xFFFF);
1882 x = bounds.
x + (bounds.
w -
window->w) / 2;
1885 y = bounds.
y + (bounds.
h -
window->h) / 2;
1929 if (displayIndex >= 0) {
1957 const int want = (bordered !=
SDL_FALSE);
1975 const int want = (resizable !=
SDL_FALSE);
2020 window->last_fullscreen_flags = 0;
2053 if (!
top) {
top = &dummy; }
2085 SDL_SetError(
"SDL_SetWindowMinimumSize(): Tried to set minimum size larger than maximum size");
2126 if (max_w <= window->min_w || max_h <= window->min_h) {
2127 SDL_SetError(
"SDL_SetWindowMaximumSize(): Tried to set maximum size smaller than minimum size");
2283 window->flags |= oldflags;
2294 Uint32 Rmask, Gmask, Bmask, Amask;
2316 if (!
window->surface_valid) {
2350 if (!
window->surface_valid) {
2351 return SDL_SetError(
"Window surface is invalid, please call SDL_GetWindowSurface() to get a new surface");
2368 window->brightness = brightness;
2378 return window->brightness;
2391 if (opacity < 0.0
f) {
2393 }
else if (opacity > 1.0
f) {
2399 window->opacity = opacity;
2411 *out_opacity =
window->opacity;
2499 for (
i = 0;
i < 256; ++
i) {
2536 if (grabbed_window && (grabbed_window !=
window)) {
2544 }
else if (grabbed_window ==
window) {
2664 if (Cocoa_IsWindowInFullscreenSpace(
window)) {
2948 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
2952 return (verstr && (
SDL_atoi(verstr) >= 3));
2959 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
2961 const char *extensions;
2963 const char *where, *terminator;
2967 if (where || *extension ==
'\0') {
2979 if (!glGetStringFunc) {
2991 if ((!glGetStringiFunc) || (!glGetIntegervFunc)) {
2995 #ifndef GL_NUM_EXTENSIONS
2996 #define GL_NUM_EXTENSIONS 0x821D
2999 for (
i = 0;
i < num_exts;
i++) {
3000 const char *thisext = (
const char *) glGetStringiFunc(
GL_EXTENSIONS,
i);
3028 if (where == extensions || *(where - 1) ==
' ')
3029 if (*terminator ==
' ' || *terminator ==
'\0')
3051 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3101 #if SDL_VIDEO_OPENGL
3105 #elif SDL_VIDEO_OPENGL_ES2
3109 #elif SDL_VIDEO_OPENGL_ES
3128 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3249 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3260 #if SDL_VIDEO_OPENGL
3264 GLenum attachmentattrib = 0;
3280 #if SDL_VIDEO_OPENGL
3286 #if SDL_VIDEO_OPENGL
3292 #if SDL_VIDEO_OPENGL
3298 #if SDL_VIDEO_OPENGL
3304 #if SDL_VIDEO_OPENGL
3315 #if SDL_VIDEO_OPENGL
3322 #if SDL_VIDEO_OPENGL
3328 #if SDL_VIDEO_OPENGL
3361 #if SDL_VIDEO_OPENGL
3369 int rsize = 0, gsize = 0, bsize = 0, asize = 0;
3385 *
value = rsize + gsize + bsize + asize;
3449 #if SDL_VIDEO_OPENGL
3451 if (!glGetStringFunc) {
3456 glGetFramebufferAttachmentParameterivFunc =
SDL_GL_GetProcAddress(
"glGetFramebufferAttachmentParameteriv");
3458 if (glGetFramebufferAttachmentParameterivFunc) {
3468 if (glGetIntegervFunc) {
3476 if (!glGetErrorFunc) {
3480 error = glGetErrorFunc();
3502 SDL_SetError(
"The specified window isn't an OpenGL window");
3535 return SDL_SetError(
"The specified window isn't an OpenGL window");
3586 return SDL_SetError(
"No OpenGL context has been made current");
3590 return SDL_SetError(
"Setting the swap interval is not supported");
3614 SDL_SetError(
"The specified window isn't an OpenGL window");
3619 SDL_SetError(
"The specified window has not been made current");
3650 #define SET_MASKBIT(icon, x, y, mask) \
3651 mask[(y*((icon->w+7)/8))+(x/8)] &= ~(0x01<<(7-(x%8)))
3653 colorkey = icon->
format->colorkey;
3658 for (
y = 0;
y < icon->
h; ++
y) {
3660 for (
x = 0;
x < icon->
w; ++
x) {
3661 if (*
pixels++ == colorkey) {
3662 SET_MASKBIT(icon,
x,
y,
mask);
3672 for (
y = 0;
y < icon->
h; ++
y) {
3674 for (
x = 0;
x < icon->
w; ++
x) {
3676 SET_MASKBIT(icon,
x,
y,
mask);
3677 }
else if ((
flags & 2)
3679 SET_MASKBIT(icon,
x,
y,
mask);
3690 for (
y = 0;
y < icon->
h; ++
y) {
3692 for (
x = 0;
x < icon->
w; ++
x) {
3694 SET_MASKBIT(icon,
x,
y,
mask);
3695 }
else if ((
flags & 2)
3697 SET_MASKBIT(icon,
x,
y,
mask);
3713 if (icon &&
_this->SetIcon) {
3716 int mask_len = icon->
h * (icon->
w + 7) / 8;
3723 if (icon->
flags & SDL_SRCCOLORKEY)
3725 if (icon->
flags & SDL_SRCALPHA)
3728 CreateMaskFromColorKeyOrAlpha(icon,
mask,
flags);
3831 #if SDL_VIDEO_DRIVER_ANDROID
3834 #if SDL_VIDEO_DRIVER_WINDOWS
3837 #if SDL_VIDEO_DRIVER_WINRT
3840 #if SDL_VIDEO_DRIVER_COCOA
3843 #if SDL_VIDEO_DRIVER_UIKIT
3846 #if SDL_VIDEO_DRIVER_X11
3851 #if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11
3876 int show_cursor_prev;
3880 if (!messageboxdata) {
3895 buttonid = &dummybutton;
3903 #if SDL_VIDEO_DRIVER_ANDROID
3905 Android_ShowMessageBox(messageboxdata, buttonid) == 0) {
3909 #if SDL_VIDEO_DRIVER_WINDOWS
3912 WIN_ShowMessageBox(messageboxdata, buttonid) == 0) {
3916 #if SDL_VIDEO_DRIVER_WINRT
3919 WINRT_ShowMessageBox(messageboxdata, buttonid) == 0) {
3923 #if SDL_VIDEO_DRIVER_COCOA
3926 Cocoa_ShowMessageBox(messageboxdata, buttonid) == 0) {
3930 #if SDL_VIDEO_DRIVER_UIKIT
3933 UIKit_ShowMessageBox(messageboxdata, buttonid) == 0) {
3937 #if SDL_VIDEO_DRIVER_X11
3940 X11_ShowMessageBox(messageboxdata, buttonid) == 0) {
3948 if (current_window) {
3950 if (mouse_captured) {
3964 #ifdef __EMSCRIPTEN__
3970 alert(UTF8ToString($0) +
"\n\n" + UTF8ToString($1));
3981 data.numbuttons = 1;
4012 window->hit_test_data = userdata;
4020 float den2 = hinches * hinches + vinches * vinches;
4025 return (
float)(
SDL_sqrt((
double)hpix * (
double)hpix + (
double)vpix * (
double)vpix) /
4077 #define NOT_A_VULKAN_WINDOW "The specified window isn't a Vulkan window"
4088 return SDL_SetError(
"Vulkan loader library already loaded");
4093 return SDL_SetError(
"Vulkan support is either not configured in SDL "
4094 "or not available in current SDL video driver "
4155 VkInstance instance,
int(* CreateSDLWindow)(_THIS, SDL_Window *window)
void SDL_OnWindowLeave(SDL_Window *window)
SDL_Mouse * SDL_GetMouse(void)
@ SDL_WINDOW_MOUSE_CAPTURE
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
#define SDL_GetMouseState
const char * SDL_GetWindowTitle(SDL_Window *window)
Get the title of a window, in UTF-8 format.
static SDL_Surface * SDL_CreateWindowFramebuffer(SDL_Window *window)
#define SDL_BITSPERPIXEL(X)
void SDL_GetWindowMinimumSize(SDL_Window *window, int *min_w, int *min_h)
Get the minimum size of a window's client area.
void(* SetWindowPosition)(_THIS, SDL_Window *window)
#define SDL_RenderPresent
SDL_DisplayMode * display_modes
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.
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)
VideoBootStrap WINRT_bootstrap
@ SDL_WINDOW_ALLOW_HIGHDPI
void SDL_GL_ResetAttributes()
Reset all previously set OpenGL context attributes to their default values.
@ SDL_GL_RETAINED_BACKING
void SDL_OnApplicationDidReceiveMemoryWarning(void)
void(* SuspendScreenSaver)(_THIS)
@ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
@ SDL_APP_DIDENTERBACKGROUND
@ SDL_APP_DIDENTERFOREGROUND
int(* Vulkan_LoadLibrary)(_THIS, const char *path)
SDL_Window * SDL_GetFocusWindow(void)
A collection of pixels used in software blitting.
#define SDL_ConvertSurfaceFormat
#define SDL_RenderSetViewport
SDL_TLSID current_glwin_tls
int(* SetWindowModalFor)(_THIS, SDL_Window *modal_window, SDL_Window *parent_window)
void SDL_VideoQuit(void)
Shuts down the video subsystem.
void(* OnWindowEnter)(_THIS, SDL_Window *window)
void SDL_ShowWindow(SDL_Window *window)
Show a window.
SDL_bool SDL_IsScreenKeyboardShown(SDL_Window *window)
Returns whether the screen keyboard is shown for given window.
#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR
void SDL_OnWindowFocusGained(SDL_Window *window)
int SDL_GL_LoadLibrary(const char *path)
Dynamically load an OpenGL library.
GLboolean GLboolean GLboolean b
#define SDL_HINT_VIDEO_HIGHDPI_DISABLED
If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
GLuint GLsizei const GLchar * message
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).
@ SDL_WINDOWEVENT_FOCUS_LOST
#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER
A variable controlling whether the screensaver is enabled.
VideoBootStrap X11_bootstrap
#define SDL_GetNumRenderDrivers
SDL_bool SDL_IsScreenSaverEnabled()
Returns whether the screensaver is currently enabled (default off).
#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS
Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to true.
@ SDL_GL_ACCELERATED_VISUAL
#define SDL_VERSION(x)
Macro to determine SDL version program was compiled against.
#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
void SDL_SetWindowSize(SDL_Window *window, int w, int h)
Set the size of a window's client area.
struct SDL_VideoDevice::@264 vulkan_config
@ SDL_GL_CONTEXT_RESET_NOTIFICATION
int SDL_SetWindowInputFocus(SDL_Window *window)
Explicitly sets input focus to the window.
#define SDL_PIXELLAYOUT(X)
void(* SetTextInputRect)(_THIS, SDL_Rect *rect)
@ SDL_GL_MULTISAMPLEBUFFERS
#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
SDL_Window * grabbed_window
GLuint GLuint GLsizei count
SDL_Window * SDL_GetWindowFromID(Uint32 id)
Get a window from a stored ID, or NULL if it doesn't exist.
void SDL_SetWindowGrab(SDL_Window *window, SDL_bool grabbed)
Set a window's input grab mode.
int SDL_GetDisplayMode(int displayIndex, int index, SDL_DisplayMode *mode)
Fill in information about a specific display mode.
void SDL_OnApplicationWillEnterForeground(void)
SDL_TLSID current_glctx_tls
SDL_GLattr
OpenGL configuration attributes.
void(* SetWindowTitle)(_THIS, SDL_Window *window)
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
int SDL_GetWindowOpacity(SDL_Window *window, float *out_opacity)
Get the opacity of a window.
@ SDL_WINDOWEVENT_RESIZED
GLdouble GLdouble GLdouble GLdouble top
#define SDL_InvalidParamError(param)
int SDL_GL_SetSwapInterval(int interval)
Set the swap interval for the current OpenGL context.
VideoBootStrap Emscripten_bootstrap
void(* Vulkan_UnloadLibrary)(_THIS)
static void SDL_RestoreMousePosition(SDL_Window *window)
void SDL_HideWindow(SDL_Window *window)
Hide a window.
#define SDL_QuitSubSystem
void(* Vulkan_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
@ SDL_GL_CONTEXT_PROFILE_CORE
void SDL_SetWindowMinimumSize(SDL_Window *window, int min_w, int min_h)
Set the minimum size of a window's client area.
@ SDL_WINDOW_FULLSCREEN_DESKTOP
#define NOT_A_VULKAN_WINDOW
VideoBootStrap COCOA_bootstrap
void SDL_SetKeyboardFocus(SDL_Window *window)
void SDL_GetWindowPosition(SDL_Window *window, int *x, int *y)
Get the position of a window.
#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
static Uint32 callback(Uint32 interval, void *param)
void SDL_GL_DeleteContext(SDL_GLContext context)
Delete an OpenGL context.
int SDL_UpdateWindowSurfaceRects(SDL_Window *window, const SDL_Rect *rects, int numrects)
Copy a number of rectangles on the window surface to the screen.
SDL_Window * SDL_CreateWindowFrom(const void *data)
Create an SDL window from an existing native window.
int(* GetWindowBordersSize)(_THIS, SDL_Window *window, int *top, int *left, int *bottom, int *right)
@ SDL_GL_ACCUM_GREEN_SIZE
#define SDL_WINDOWPOS_ISCENTERED(X)
SDL_HitTestResult(* SDL_HitTest)(SDL_Window *win, const SDL_Point *area, void *data)
Callback used for hit-testing.
GLsizei const GLchar *const * path
int SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode *mode)
Fill in information about the desktop display mode.
void SDL_SetWindowTitle(SDL_Window *window, const char *title)
Set the title of a window, in UTF-8 format.
@ SDL_GL_CONTEXT_RESET_NO_NOTIFICATION
SDL_DisplayMode desktop_mode
@ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
@ SDL_GL_CONTEXT_RESET_ISOLATION_FLAG
GLboolean GLboolean GLboolean GLboolean a
@ SDL_GL_CONTEXT_RELEASE_BEHAVIOR
@ SDL_GL_CONTEXT_MINOR_VERSION
#define SDL_InitSubSystem
void SDL_RaiseWindow(SDL_Window *window)
Raise a window above other windows and set the input focus.
GLfloat GLfloat GLfloat GLfloat h
VideoBootStrap Android_bootstrap
void SDL_OnWindowMinimized(SDL_Window *window)
void SDL_KeyboardQuit(void)
void SDL_SetMouseFocus(SDL_Window *window)
float SDL_GetWindowBrightness(SDL_Window *window)
Get the brightness (gamma correction) for a window.
void SDL_ToggleDragAndDropSupport(void)
void(* HideWindow)(_THIS, SDL_Window *window)
Information on the capabilities of a render driver or context.
int SDL_SetWindowOpacity(SDL_Window *window, float opacity)
Set the opacity for a window.
@ SDL_APP_WILLENTERFOREGROUND
void SDL_GL_DeduceMaxSupportedESProfile(int *major, int *minor)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
int SDL_SetWindowBrightness(SDL_Window *window, float brightness)
Set the brightness (gamma correction) for a window.
void SDL_OnWindowRestored(SDL_Window *window)
#define SDL_SetRelativeMouseMode
int SDL_SetWindowHitTest(SDL_Window *window, SDL_HitTest callback, void *userdata)
Provide a callback that decides if a window region has special properties.
The type used to identify a window.
const char * SDL_GetCurrentVideoDriver()
Returns the name of the currently initialized video driver.
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
#define SDL_GetRenderDriverInfo
The structure that defines a display mode.
#define SDL_GetKeyboardFocus
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
SDL_Surface * SDL_GetWindowSurface(SDL_Window *window)
Get the SDL surface associated with the window.
void SDL_OnApplicationWillTerminate(void)
SDL_bool(* Vulkan_CreateSurface)(_THIS, SDL_Window *window, VkInstance instance, VkSurfaceKHR *surface)
void SDL_ResetKeyboard(void)
void(* ShowScreenKeyboard)(_THIS, SDL_Window *window)
#define GL_NUM_EXTENSIONS
VideoBootStrap RPI_bootstrap
#define GL_SAMPLE_BUFFERS
@ SDL_GL_CONTEXT_NO_ERROR
int(* GetDisplayUsableBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
const char * SDL_GetDisplayName(int displayIndex)
Get the name of a display in UTF-8 encoding.
SDL_VideoDisplay * SDL_GetDisplay(int displayIndex)
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
#define SDL_CreateRGBSurfaceFrom
SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
Create an OpenGL context for use with an OpenGL window, and make it current.
#define SDL_UpdateTexture
int SDL_GetWindowDisplayMode(SDL_Window *window, SDL_DisplayMode *mode)
Fill in information about the display mode used when a fullscreen window is visible.
int SDL_GL_GetSwapInterval(void)
Get the swap interval for the current OpenGL context.
struct SDL_VideoDevice::@263 gl_config
@ SDL_GL_CONTEXT_DEBUG_FLAG
SDL_DisplayMode * SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
Get the closest match to the requested display mode.
VideoBootStrap DUMMY_bootstrap
int SDL_SetWindowDisplayMode(SDL_Window *window, const SDL_DisplayMode *mode)
Set the display mode used when a fullscreen window is visible.
#define SDL_GetHintBoolean
void * SDL_SetWindowData(SDL_Window *window, const char *name, void *userdata)
Associate an arbitrary named pointer with a window.
SDL_bool SDL_ShouldAllowTopmost(void)
static screen_context_t context
static int SDL_UpdateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, const SDL_Rect *rects, int numrects)
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
int SDL_GetIndexOfDisplay(SDL_VideoDisplay *display)
Uint32 SDL_GetWindowFlags(SDL_Window *window)
Get the window flags.
static SDL_VideoDevice * _this
static int cmpmodes(const void *A, const void *B)
@ SDL_GL_ACCUM_ALPHA_SIZE
GLint GLint GLint GLint GLint x
#define SDL_GetEventState(type)
EGLSurface EGLNativeWindowType * window
static SDL_INLINE SDL_bool IsAcceptingDragAndDrop(void)
const char * SDL_GetVideoDriver(int index)
Get the name of a built in video driver.
void(* SetWindowFullscreen)(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
static SDL_bool CanMinimizeWindow(SDL_Window *window)
VideoBootStrap KMSDRM_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_GL_SHARE_WITH_CURRENT_CONTEXT
#define SDL_GetRelativeMouseMode
SDL_bool(* HasScreenKeyboardSupport)(_THIS)
@ SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG
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.
int(* ShowMessageBox)(_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid)
SDL_bool SDL_GetWindowGrab(SDL_Window *window)
Get a window's input grab mode.
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
void SDL_UpdateWindowGrab(SDL_Window *window)
static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr)
int SDL_GL_MakeCurrent(SDL_Window *window, SDL_GLContext ctx)
Set up an OpenGL context for rendering into an OpenGL window.
MessageBox structure containing title, text, window, etc.
void(* GL_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
GLuint const GLchar * name
SDL_VideoDisplay * displays
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
void SDL_GetWindowSize(SDL_Window *window, int *w, int *h)
Get the size of a window's client area.
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
#define GL_ACCUM_RED_BITS
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,...
VideoBootStrap WINDOWS_bootstrap
SDL_bool SDL_HasWindows(void)
#define SDL_WINDOWTEXTUREDATA
@ SDL_GL_CONTEXT_PROFILE_ES
int share_with_current_context
#define SDL_PixelFormatEnumToMasks
void SDL_SetWindowMaximumSize(SDL_Window *window, int max_w, int max_h)
Set the maximum size of a window's client area.
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0,...
int SDL_AddBasicVideoDisplay(const SDL_DisplayMode *desktop_mode)
void(* StartTextInput)(_THIS)
void(* RaiseWindow)(_THIS, SDL_Window *window)
void SDL_StopTextInput(void)
Stop receiving any text input events. This function will hide the on-screen keyboard if supported.
void(* StopTextInput)(_THIS)
void SDL_OnApplicationDidEnterBackground(void)
static void SDL_DestroyWindowTexture(SDL_VideoDevice *unused, SDL_Window *window)
void SDL_OnWindowEnter(SDL_Window *window)
void(* SetWindowMinimumSize)(_THIS, SDL_Window *window)
@ SDL_WINDOW_INPUT_GRABBED
void SDL_RestoreWindow(SDL_Window *window)
Restore the size and position of a minimized or maximized window.
@ SDL_APP_WILLENTERBACKGROUND
static int SDL_CreateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
static int SDL_SetDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
@ SDL_WINDOWEVENT_SIZE_CHANGED
int SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect *rect)
Get the usable desktop area represented by a display, with the primary display located at 0,...
int SDL_GetNumVideoDisplays(void)
Returns the number of available video displays.
void(* MinimizeWindow)(_THIS, SDL_Window *window)
@ SDL_PIXELFORMAT_ARGB8888
void SDL_MaximizeWindow(SDL_Window *window)
Make a window as large as possible.
void SDL_GL_UnloadLibrary(void)
Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
VideoBootStrap PSP_bootstrap
Uint32 WINRT_DetectWindowFlags(SDL_Window *window)
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
#define SDL_assert(condition)
void SDL_OnApplicationDidBecomeActive(void)
Uint32 SDL_GetWindowPixelFormat(SDL_Window *window)
Get the pixel format associated with the window.
void(* SetWindowMaximumSize)(_THIS, SDL_Window *window)
int SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode *mode)
Fill in information about the current display mode.
@ SDL_WINDOWEVENT_MINIMIZED
VideoBootStrap Wayland_bootstrap
VideoBootStrap VIVANTE_bootstrap
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
VideoBootStrap NACL_bootstrap
VideoBootStrap DirectFB_bootstrap
SDL_bool SDL_GetWindowWMInfo(SDL_Window *window, struct SDL_SysWMinfo *info)
This function allows access to driver-dependent window information.
#define SDL_OutOfMemory()
SDL_bool(* IsScreenKeyboardShown)(_THIS, SDL_Window *window)
@ SDL_GL_CONTEXT_MAJOR_VERSION
@ SDL_GL_CONTEXT_PROFILE_MASK
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
#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
void(* DestroyWindow)(_THIS, SDL_Window *window)
VideoBootStrap HAIKU_bootstrap
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
void(* SetWindowBordered)(_THIS, SDL_Window *window, SDL_bool bordered)
SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
void SDL_SetWindowBordered(SDL_Window *window, SDL_bool bordered)
Set the border state of a window.
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)
static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype)
SDL_Window * SDL_GetGrabbedWindow(void)
Get the window that currently has an input grab enabled.
void SDL_OnApplicationWillResignActive(void)
#define SDL_arraysize(array)
void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable)
Set the user-resizable state of a window.
#define SDL_DestroyTexture
void SDL_StartTextInput(void)
Start accepting Unicode text input events. This function will show the on-screen keyboard if supporte...
#define FULLSCREEN_VISIBLE(W)
#define GL_ACCUM_BLUE_BITS
int(* GL_SetSwapInterval)(_THIS, int interval)
void SDL_GetWindowMaximumSize(SDL_Window *window, int *max_w, int *max_h)
Get the maximum size of a window's client area.
void(* SetWindowResizable)(_THIS, SDL_Window *window, SDL_bool resizable)
void(* AcceptDragAndDrop)(SDL_Window *window, SDL_bool accept)
void * SDL_GLContext
An opaque handle to an OpenGL context.
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
int(* CreateSDLWindowFrom)(_THIS, SDL_Window *window, const void *data)
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_Renderer * renderer
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
SDL_VideoDevice * SDL_GetVideoDevice(void)
@ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT
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.
#define SDL_ISPIXELFORMAT_FOURCC(format)
int SDL_GetDisplayDPI(int displayIndex, float *ddpi, float *hdpi, float *vdpi)
Get the dots/pixels-per-inch for a display.
#define GL_ACCUM_ALPHA_BITS
int SDL_KeyboardInit(void)
The structure that defines a point (integer)
SDL_bool SDL_IsTextInputActive(void)
Return whether or not Unicode text input events are enabled.
void * SDL_GetDisplayDriverData(int displayIndex)
GLsizei const GLfloat * value
static VideoBootStrap * bootstrap[]
#define SDL_BYTESPERPIXEL(X)
int(* SetWindowInputFocus)(_THIS, SDL_Window *window)
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
int(* GL_LoadLibrary)(_THIS, const char *path)
A rectangle, with the origin at the upper left (integer).
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)
#define SDL_GetMouseFocus
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
#define GL_ACCUM_GREEN_BITS
void(* GL_UnloadLibrary)(_THIS)
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
int(* GetDisplayBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
int(* GetDisplayDPI)(_THIS, SDL_VideoDisplay *display, float *ddpi, float *hdpi, float *vdpi)
int SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
Get the actual value for an attribute from the current context.
struct SDL_WindowUserData * next
static SDL_bool ShouldUseTextureFramebuffer()
SDL_VideoDevice *(* create)(int devindex)
@ SDL_PIXELFORMAT_UNKNOWN
void SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon)
Set the icon for a window.
int SDL_VideoInit(const char *driver_name)
Initialize the video subsystem, optionally specifying a video driver.
void SDL_Vulkan_UnloadLibrary(void)
Unload the Vulkan loader library previously loaded by SDL_Vulkan_LoadLibrary().
int framebuffer_srgb_capable
int(* GL_GetSwapInterval)(_THIS)
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
VideoBootStrap UIKIT_bootstrap
SDL_DisplayOrientation SDL_GetDisplayOrientation(int displayIndex)
Get the orientation of a display.
int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window)
Create a simple modal message box.
#define SDL_HINT_FRAMEBUFFER_ACCELERATION
A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
int SDL_Vulkan_LoadLibrary(const char *path)
Dynamically load a Vulkan loader library.
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
static SDL_INLINE void PrepareDragAndDropSupport(SDL_Window *window)
#define SDL_EnclosePoints
SDL_Window * current_glwin
@ SDL_ORIENTATION_UNKNOWN
SDL_bool(* Vulkan_GetInstanceExtensions)(_THIS, SDL_Window *window, unsigned *count, const char **names)
SDL_bool SDL_GL_ExtensionSupported(const char *extension)
Return true if an OpenGL extension is supported for the current context.
int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
Create a modal message box.
static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
int(* GL_SwapWindow)(_THIS, SDL_Window *window)
void(* MaximizeWindow)(_THIS, SDL_Window *window)
void(* HideScreenKeyboard)(_THIS, SDL_Window *window)
void(* SetWindowSize)(_THIS, SDL_Window *window)
void(* GL_DefaultProfileConfig)(_THIS, int *mask, int *major, int *minor)
SDL_bool Android_JNI_ShouldMinimizeOnFocusLoss(void)
static int SDL_UninitializedVideo()
int(* SetWindowOpacity)(_THIS, SDL_Window *window, float opacity)
#define SDL_HINT_RENDER_DRIVER
A variable specifying which render driver to use.
int(* GetWindowGammaRamp)(_THIS, SDL_Window *window, Uint16 *ramp)
Uint32 SDL_GetWindowID(SDL_Window *window)
Get the numeric ID of a window, for logging purposes.
@ SDL_WINDOWEVENT_RESTORED
#define SDL_ISPIXELFORMAT_ALPHA(format)
#define SDL_Unsupported()
VideoBootStrap QNX_bootstrap
#define SDL_CalculateGammaRamp
void(* ShowWindow)(_THIS, SDL_Window *window)
#define GL_CONTEXT_RELEASE_BEHAVIOR
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
void * SDL_GL_GetProcAddress(const char *proc)
Get the address of an OpenGL function.
SDL_DisplayMode current_mode
void * SDL_Vulkan_GetVkGetInstanceProcAddr(void)
Get the address of the vkGetInstanceProcAddr function.
void *(* GL_GetProcAddress)(_THIS, const char *proc)
int SDL_GetWindowGammaRamp(SDL_Window *window, Uint16 *red, Uint16 *green, Uint16 *blue)
Get the gamma ramp for a window.
Uint32 texture_formats[16]
#define SDL_CreateRenderer
VideoBootStrap PND_bootstrap
int SDL_UpdateWindowSurface(SDL_Window *window)
Copy the window surface to the screen.
SDL_bool SDL_HasScreenKeyboardSupport(void)
Returns whether the platform has some screen keyboard support.
void SDL_GL_SwapWindow(SDL_Window *window)
Swap the OpenGL buffers for a window, if double-buffering is supported.
const SDL_PRINTF_FORMAT_STRING char int const SDL_PRINTF_FORMAT_STRING char int const SDL_PRINTF_FORMAT_STRING char int const SDL_PRINTF_FORMAT_STRING char const char const SDL_SCANF_FORMAT_STRING char return SDL_ThreadFunction const char void return Uint32 return Uint32 void
void SDL_SetWindowPosition(SDL_Window *window, int x, int y)
Set the position of a window.
int SDL_RecreateWindow(SDL_Window *window, Uint32 flags)
void SDL_OnWindowResized(SDL_Window *window)
static SDL_DisplayMode * SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
@ SDL_WINDOWEVENT_FOCUS_GAINED
@ SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG
void SDL_OnWindowHidden(SDL_Window *window)
#define SDL_DestroyRenderer
@ SDL_TEXTUREACCESS_STREAMING
#define CHECK_WINDOW_MAGIC(window, retval)
int SDL_SendAppEvent(SDL_EventType eventType)
SDL_GLContext current_glctx
void(* RestoreWindow)(_THIS, SDL_Window *window)
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...
EGLSurface EGLint * rects
@ SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
#define SDL_WarpMouseInWindow
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
void SDL_OnWindowFocusLost(SDL_Window *window)
int SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags)
Set a window's fullscreen state.
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)
SDL_DisplayOrientation orientation
#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
static int SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay *display)
SDL_bool suspend_screensaver
int SDL_GetNumDisplayModes(int displayIndex)
Returns the number of available display modes.
SDL_Window * SDL_GL_GetCurrentWindow(void)
Get the currently active OpenGL window.
@ SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
void * SDL_GetWindowData(SDL_Window *window, const char *name)
Retrieve the data pointer associated with a window.
#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
#define SDL_CreateTexture
int SDL_GetWindowDisplayIndex(SDL_Window *window)
Get the display index associated with a window.
void SDL_OnWindowShown(SDL_Window *window)
void SDL_EnableScreenSaver()
Allow the screen to be blanked by a screensaver.
static SDL_bool ShouldMinimizeOnFocusLoss(SDL_Window *window)
#define SDL_WINDOWPOS_ISUNDEFINED(X)
SDL_Window * fullscreen_window
@ SDL_GL_MULTISAMPLESAMPLES
Uint32 num_texture_formats
int SDL_GetNumVideoDrivers(void)
Get the number of video drivers compiled into SDL.
GLubyte GLubyte GLubyte GLubyte w
SDL_bool SDL_GetSpanEnclosingRect(int width, int height, int numrects, const SDL_Rect *rects, SDL_Rect *span)
#define SDL_GetRendererInfo
VideoBootStrap MALI_bootstrap