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 && !SDL_VIDEO_OPENGL
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_KMSDRM
101 #if SDL_VIDEO_DRIVER_RPI
104 #if SDL_VIDEO_DRIVER_NACL
107 #if SDL_VIDEO_DRIVER_EMSCRIPTEN
110 #if SDL_VIDEO_DRIVER_QNX
113 #if SDL_VIDEO_DRIVER_OFFSCREEN
116 #if SDL_VIDEO_DRIVER_OS2
120 #if SDL_VIDEO_DRIVER_DUMMY
128 #define CHECK_WINDOW_MAGIC(window, retval) \
130 SDL_UninitializedVideo(); \
133 SDL_assert(window && window->magic == &_this->window_magic); \
134 if (!window || window->magic != &_this->window_magic) { \
135 SDL_SetError("Invalid window"); \
139 #define CHECK_DISPLAY_INDEX(displayIndex, retval) \
141 SDL_UninitializedVideo(); \
144 SDL_assert(_this->displays != NULL); \
145 SDL_assert(displayIndex >= 0 && displayIndex < _this->num_displays); \
146 if (displayIndex < 0 || displayIndex >= _this->num_displays) { \
147 SDL_SetError("displayIndex must be in the range 0 - %d", \
148 _this->num_displays - 1); \
152 #define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN)
163 #define SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData"
207 #if defined(__WIN32__)
212 #elif defined(__MACOSX__)
216 #elif defined(__LINUX__)
230 const char *vendor =
NULL;
233 if (glGetStringFunc) {
234 vendor = (
const char *) glGetStringFunc(
GL_VENDOR);
246 return hasAcceleratedOpenGL;
248 #elif SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
275 if (hint && *hint !=
'0' && *hint !=
'1' &&
302 return SDL_SetError(
"No hardware accelerated renderers available");
347 if (!
data->texture) {
357 const size_t allocsize =
window->h *
data->pitch;
365 *pitch =
data->pitch;
415 if (
data->renderer) {
430 }
else if (
a->w !=
b->w) {
432 }
else if (
a->h !=
b->h) {
438 }
else if (
a->refresh_rate !=
b->refresh_rate) {
439 return b->refresh_rate -
a->refresh_rate;
447 return SDL_SetError(
"Video subsystem has not been initialized");
480 #if !SDL_TIMERS_DISABLED
495 if (driver_name ==
NULL) {
498 if (driver_name !=
NULL) {
541 return SDL_SetError(
"The video driver did not add any displays");
617 displays[
index] = *display;
716 if (displayIndex == 0) {
800 for (
i = 0;
i < nmodes; ++
i) {
817 modes[nmodes] = *
mode;
855 return SDL_SetError(
"index must be in the range of 0 - %d",
898 int target_refresh_rate;
902 if (!
mode || !closest) {
903 SDL_SetError(
"Missing desired mode or closest mode parameter");
909 target_format =
mode->format;
915 if (
mode->refresh_rate) {
916 target_refresh_rate =
mode->refresh_rate;
925 if (current->
w && (current->
w <
mode->w)) {
929 if (current->
h && (current->
h <
mode->h)) {
930 if (current->
w && (current->
w ==
mode->w)) {
939 if (!match || current->
w < match->
w || current->
h < match->
h) {
945 if (current->
format == target_format ||
967 if (match->
w && match->
h) {
968 closest->
w = match->
w;
969 closest->
h = match->
h;
971 closest->
w =
mode->w;
972 closest->
h =
mode->h;
1019 display_mode = *
mode;
1022 if (!display_mode.
format) {
1025 if (!display_mode.
w) {
1028 if (!display_mode.
h) {
1037 return SDL_SetError(
"No video mode large enough for %dx%d",
1038 display_mode.
w, display_mode.
h);
1046 if (
SDL_memcmp(&display_mode, ¤t_mode,
sizeof(display_mode)) == 0) {
1052 return SDL_SetError(
"SDL video driver doesn't support changing display mode");
1075 int closest_dist = 0x7FFFFFFF;
1084 displayIndex = (
window->x & 0xFFFF);
1088 return displayIndex;
1092 displayIndex = (
window->y & 0xFFFF);
1096 return displayIndex;
1117 dist = (delta.
x*delta.
x + delta.
y*delta.
y);
1118 if (dist < closest_dist) {
1120 closest_dist = dist;
1133 if (displayIndex >= 0) {
1172 fullscreen_mode =
window->fullscreen_mode;
1173 if (!fullscreen_mode.
w) {
1174 fullscreen_mode.
w =
window->windowed.w;
1176 if (!fullscreen_mode.
h) {
1177 fullscreen_mode.
h =
window->windowed.h;
1187 &fullscreen_mode)) {
1188 return SDL_SetError(
"Couldn't find display mode match");
1192 *
mode = fullscreen_mode;
1232 if (
window->is_hiding && fullscreen) {
1257 if (Cocoa_SetWindowFullscreenSpace(
window, fullscreen)) {
1258 if (Cocoa_IsWindowInFullscreenSpace(
window) != fullscreen) {
1265 #elif __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
1313 setDisplayMode = fullscreen;
1319 if (setDisplayMode) {
1327 if (other->
w == fullscreen_mode.
w && other->
h == fullscreen_mode.
h) {
1356 fullscreen_mode.
w, fullscreen_mode.
h);
1388 #define CREATE_FLAGS \
1389 (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 | SDL_WINDOW_METAL)
1471 if ((
w > 16384) || (
h > 16384)) {
1477 #if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ || __NACL__
1484 SDL_SetError(
"OpenGL support is either not configured in SDL "
1485 "or not available in current SDL video driver "
1496 SDL_SetError(
"Vulkan support is either not configured in SDL "
1497 "or not available in current SDL video driver "
1502 SDL_SetError(
"Vulkan and OpenGL not supported on same window");
1512 SDL_SetError(
"Metal support is either not configured in SDL "
1513 "or not available in current SDL video driver "
1518 SDL_SetError(
"Metal and OpenGL not supported on same window");
1522 SDL_SetError(
"Metal and Vulkan not supported on same window. "
1523 "To use MoltenVK, set SDL_WINDOW_VULKAN only.");
1557 window->x = bounds.
x + (bounds.
w -
w) / 2;
1560 window->y = bounds.
y + (bounds.
h -
h) / 2;
1585 window->brightness = 1.0f;
1602 #if !defined(__WIN32__)
1608 #if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
1655 window->brightness = 1.0f;
1683 return SDL_SetError(
"OpenGL support is either not configured in SDL "
1684 "or not available in current SDL video driver "
1746 SDL_SetError(
"Vulkan and OpenGL not supported on same window");
1751 SDL_SetError(
"Metal and OpenGL not supported on same window");
1756 SDL_SetError(
"Metal and Vulkan not supported on same window");
1760 if (need_gl_unload) {
1764 if (need_vulkan_unload) {
1775 if (need_vulkan_load) {
1788 if (loaded_opengl) {
1792 if (loaded_vulkan) {
1864 if (title ==
window->title) {
1923 void *last_value =
data->data;
1927 data->data = userdata;
1946 data->data = userdata;
1980 int displayIndex = (
x & 0xFFFF);
1990 x = bounds.
x + (bounds.
w -
window->w) / 2;
1993 y = bounds.
y + (bounds.
h -
window->h) / 2;
2037 if (displayIndex >= 0) {
2065 const int want = (bordered !=
SDL_FALSE);
2083 const int want = (resizable !=
SDL_FALSE);
2128 window->last_fullscreen_flags = 0;
2161 if (!
top) {
top = &dummy; }
2193 SDL_SetError(
"SDL_SetWindowMinimumSize(): Tried to set minimum size larger than maximum size");
2234 if (max_w < window->min_w || max_h < window->min_h) {
2235 SDL_SetError(
"SDL_SetWindowMaximumSize(): Tried to set maximum size smaller than minimum size");
2391 window->flags |= oldflags;
2402 Uint32 Rmask, Gmask, Bmask, Amask;
2428 if (!
window->surface_valid) {
2463 if (!
window->surface_valid) {
2464 return SDL_SetError(
"Window surface is invalid, please call SDL_GetWindowSurface() to get a new surface");
2481 window->brightness = brightness;
2491 return window->brightness;
2504 if (opacity < 0.0f) {
2506 }
else if (opacity > 1.0f) {
2512 window->opacity = opacity;
2524 *out_opacity =
window->opacity;
2612 for (
i = 0;
i < 256; ++
i) {
2649 if (grabbed_window && (grabbed_window !=
window)) {
2657 }
else if (grabbed_window ==
window) {
2777 if (Cocoa_IsWindowInFullscreenSpace(
window)) {
3063 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3067 return (verstr && (
SDL_atoi(verstr) >= 3));
3074 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3076 const char *extensions;
3078 const char *where, *terminator;
3082 if (where || *extension ==
'\0') {
3094 if (!glGetStringFunc) {
3106 if ((!glGetStringiFunc) || (!glGetIntegervFunc)) {
3110 #ifndef GL_NUM_EXTENSIONS
3111 #define GL_NUM_EXTENSIONS 0x821D
3114 for (
i = 0;
i < num_exts;
i++) {
3115 const char *thisext = (
const char *) glGetStringiFunc(
GL_EXTENSIONS,
i);
3143 if (where == extensions || *(where - 1) ==
' ')
3144 if (*terminator ==
' ' || *terminator ==
'\0')
3166 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3211 #if SDL_VIDEO_OPENGL
3215 #elif SDL_VIDEO_OPENGL_ES2
3219 #elif SDL_VIDEO_OPENGL_ES
3243 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3364 #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
3375 #if SDL_VIDEO_OPENGL
3379 GLenum attachmentattrib = 0;
3395 #if SDL_VIDEO_OPENGL
3401 #if SDL_VIDEO_OPENGL
3407 #if SDL_VIDEO_OPENGL
3413 #if SDL_VIDEO_OPENGL
3419 #if SDL_VIDEO_OPENGL
3430 #if SDL_VIDEO_OPENGL
3437 #if SDL_VIDEO_OPENGL
3443 #if SDL_VIDEO_OPENGL
3476 #if SDL_VIDEO_OPENGL
3484 int rsize = 0, gsize = 0, bsize = 0, asize = 0;
3500 *
value = rsize + gsize + bsize + asize;
3564 #if SDL_VIDEO_OPENGL
3566 if (!glGetStringFunc) {
3571 glGetFramebufferAttachmentParameterivFunc =
SDL_GL_GetProcAddress(
"glGetFramebufferAttachmentParameteriv");
3573 if (glGetFramebufferAttachmentParameterivFunc) {
3583 if (glGetIntegervFunc) {
3591 if (!glGetErrorFunc) {
3595 error = glGetErrorFunc();
3617 SDL_SetError(
"The specified window isn't an OpenGL window");
3650 return SDL_SetError(
"The specified window isn't an OpenGL window");
3653 return SDL_SetError(
"Use of OpenGL without a window is not supported on this platform");
3703 return SDL_SetError(
"No OpenGL context has been made current");
3707 return SDL_SetError(
"Setting the swap interval is not supported");
3731 SDL_SetError(
"The specified window isn't an OpenGL window");
3736 SDL_SetError(
"The specified window has not been made current");
3767 #define SET_MASKBIT(icon, x, y, mask) \
3768 mask[(y*((icon->w+7)/8))+(x/8)] &= ~(0x01<<(7-(x%8)))
3770 colorkey = icon->
format->colorkey;
3775 for (
y = 0;
y < icon->
h; ++
y) {
3777 for (
x = 0;
x < icon->
w; ++
x) {
3778 if (*
pixels++ == colorkey) {
3779 SET_MASKBIT(icon,
x,
y,
mask);
3789 for (
y = 0;
y < icon->
h; ++
y) {
3791 for (
x = 0;
x < icon->
w; ++
x) {
3793 SET_MASKBIT(icon,
x,
y,
mask);
3794 }
else if ((
flags & 2)
3796 SET_MASKBIT(icon,
x,
y,
mask);
3807 for (
y = 0;
y < icon->
h; ++
y) {
3809 for (
x = 0;
x < icon->
w; ++
x) {
3811 SET_MASKBIT(icon,
x,
y,
mask);
3812 }
else if ((
flags & 2)
3814 SET_MASKBIT(icon,
x,
y,
mask);
3830 if (icon &&
_this->SetIcon) {
3833 int mask_len = icon->
h * (icon->
w + 7) / 8;
3840 if (icon->
flags & SDL_SRCCOLORKEY)
3842 if (icon->
flags & SDL_SRCALPHA)
3845 CreateMaskFromColorKeyOrAlpha(icon,
mask,
flags);
3948 #if SDL_VIDEO_DRIVER_ANDROID
3951 #if SDL_VIDEO_DRIVER_WINDOWS
3954 #if SDL_VIDEO_DRIVER_WINRT
3957 #if SDL_VIDEO_DRIVER_COCOA
3960 #if SDL_VIDEO_DRIVER_UIKIT
3963 #if SDL_VIDEO_DRIVER_X11
3966 #if SDL_VIDEO_DRIVER_HAIKU
3969 #if SDL_VIDEO_DRIVER_OS2
3973 #if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11 || SDL_VIDEO_DRIVER_HAIKU || SDL_VIDEO_DRIVER_OS2
3998 int show_cursor_prev;
4003 if (!messageboxdata) {
4018 buttonid = &dummybutton;
4021 SDL_memcpy(&mbdata, messageboxdata,
sizeof(*messageboxdata));
4024 messageboxdata = &mbdata;
4031 #if SDL_VIDEO_DRIVER_ANDROID
4033 Android_ShowMessageBox(messageboxdata, buttonid) == 0) {
4037 #if SDL_VIDEO_DRIVER_WINDOWS
4040 WIN_ShowMessageBox(messageboxdata, buttonid) == 0) {
4044 #if SDL_VIDEO_DRIVER_WINRT
4047 WINRT_ShowMessageBox(messageboxdata, buttonid) == 0) {
4051 #if SDL_VIDEO_DRIVER_COCOA
4054 Cocoa_ShowMessageBox(messageboxdata, buttonid) == 0) {
4058 #if SDL_VIDEO_DRIVER_UIKIT
4061 UIKit_ShowMessageBox(messageboxdata, buttonid) == 0) {
4065 #if SDL_VIDEO_DRIVER_X11
4068 X11_ShowMessageBox(messageboxdata, buttonid) == 0) {
4072 #if SDL_VIDEO_DRIVER_HAIKU
4075 HAIKU_ShowMessageBox(messageboxdata, buttonid) == 0) {
4079 #if SDL_VIDEO_DRIVER_OS2
4082 OS2_ShowMessageBox(messageboxdata, buttonid) == 0) {
4090 if (current_window) {
4092 if (mouse_captured) {
4106 #ifdef __EMSCRIPTEN__
4111 if (!title) title =
"";
4114 alert(UTF8ToString($0) +
"\n\n" + UTF8ToString($1));
4125 data.numbuttons = 1;
4156 window->hit_test_data = userdata;
4164 float den2 = hinches * hinches + vinches * vinches;
4169 return (
float)(
SDL_sqrt((
double)hpix * (
double)hpix + (
double)vpix * (
double)vpix) /
4221 #define NOT_A_VULKAN_WINDOW "The specified window isn't a Vulkan window"
4232 return SDL_SetError(
"Vulkan loader library already loaded");
4237 return SDL_SetError(
"Vulkan support is either not configured in SDL "
4238 "or not available in current SDL video driver "
4299 VkInstance instance,
4339 SDL_SetError(
"The specified window isn't a Metal window");
SDL_bool Android_JNI_ShouldMinimizeOnFocusLoss(void)
#define SDL_assert(condition)
int SDL_SendDisplayEvent(SDL_VideoDisplay *display, Uint8 displayevent, int data1)
#define SDL_RenderPresent
#define SDL_InitSubSystem
#define SDL_DestroyRenderer
#define SDL_GetMouseState
#define SDL_DestroyTexture
#define SDL_CalculateGammaRamp
#define SDL_WarpMouseInWindow
#define SDL_SetRelativeMouseMode
#define SDL_CreateTexture
#define SDL_GetKeyboardFocus
#define SDL_GetRenderDriverInfo
#define SDL_EnclosePoints
#define SDL_CreateRenderer
#define SDL_UpdateTexture
#define SDL_ConvertSurfaceFormat
#define SDL_PixelFormatEnumToMasks
#define SDL_GetNumRenderDrivers
#define SDL_GetRendererInfo
#define SDL_CreateRGBSurfaceFrom
#define SDL_GetMouseFocus
#define SDL_GetHintBoolean
#define SDL_QuitSubSystem
#define SDL_GetRelativeMouseMode
#define SDL_RenderSetViewport
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
#define SDL_OutOfMemory()
#define SDL_Unsupported()
#define SDL_InvalidParamError(param)
int SDL_SendAppEvent(SDL_EventType eventType)
@ SDL_APP_WILLENTERFOREGROUND
@ SDL_APP_DIDENTERFOREGROUND
@ SDL_APP_WILLENTERBACKGROUND
@ SDL_APP_DIDENTERBACKGROUND
#define SDL_GetEventState(type)
#define SDL_HINT_DISPLAY_USABLE_BOUNDS
Override for SDL_GetDisplayUsableBounds()
#define SDL_HINT_RENDER_DRIVER
A variable specifying which render driver to use.
#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT
A variable controlling whether the graphics context is externally managed.
#define SDL_HINT_FRAMEBUFFER_ACCELERATION
A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER
A variable controlling whether the screensaver is enabled.
#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS
Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to false.
#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....
#define SDL_HINT_VIDEO_HIGHDPI_DISABLED
If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
int SDL_KeyboardInit(void)
void SDL_ResetKeyboard(void)
void SDL_SetKeyboardFocus(SDL_Window *window)
void SDL_KeyboardQuit(void)
@ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT
@ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT
SDL_Mouse * SDL_GetMouse(void)
void SDL_SetMouseFocus(SDL_Window *window)
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
#define GL_ACCUM_ALPHA_BITS
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
#define GL_SAMPLE_BUFFERS
GLint GLint GLint GLint GLint x
#define GL_ACCUM_GREEN_BITS
#define GL_ACCUM_BLUE_BITS
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
#define GL_ACCUM_RED_BITS
GLboolean GLboolean GLboolean b
#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
GLdouble GLdouble GLdouble GLdouble top
#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
GLboolean GLboolean GLboolean GLboolean a
GLuint GLsizei const GLchar * message
GLuint const GLchar * name
GLsizei const GLchar *const * path
GLsizei const GLfloat * value
#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
#define GL_CONTEXT_RELEASE_BEHAVIOR
GLfloat GLfloat GLfloat GLfloat h
GLubyte GLubyte GLubyte GLubyte w
#define SDL_BYTESPERPIXEL(X)
#define SDL_BITSPERPIXEL(X)
#define SDL_ISPIXELFORMAT_ALPHA(format)
#define SDL_PIXELLAYOUT(X)
@ SDL_PIXELFORMAT_ARGB8888
@ SDL_PIXELFORMAT_UNKNOWN
#define SDL_ISPIXELFORMAT_FOURCC(format)
SDL_bool SDL_GetSpanEnclosingRect(int width, int height, int numrects, const SDL_Rect *rects, SDL_Rect *span)
@ SDL_TEXTUREACCESS_STREAMING
#define SDL_arraysize(array)
#define FULLSCREEN_VISIBLE(W)
VideoBootStrap UIKIT_bootstrap
VideoBootStrap OS2DIVE_bootstrap
VideoBootStrap DUMMY_bootstrap
VideoBootStrap DirectFB_bootstrap
VideoBootStrap Android_bootstrap
VideoBootStrap HAIKU_bootstrap
VideoBootStrap Wayland_bootstrap
VideoBootStrap PND_bootstrap
VideoBootStrap VIVANTE_bootstrap
VideoBootStrap RPI_bootstrap
VideoBootStrap X11_bootstrap
VideoBootStrap Emscripten_bootstrap
VideoBootStrap NACL_bootstrap
VideoBootStrap COCOA_bootstrap
VideoBootStrap OFFSCREEN_bootstrap
VideoBootStrap WINRT_bootstrap
VideoBootStrap WINDOWS_bootstrap
VideoBootStrap KMSDRM_LEGACY_bootstrap
VideoBootStrap PSP_bootstrap
VideoBootStrap OS2VMAN_bootstrap
VideoBootStrap KMSDRM_bootstrap
#define SDL_VERSION(x)
Macro to determine SDL version program was compiled against.
void SDL_HideWindow(SDL_Window *window)
Hide a window.
void * SDL_Vulkan_GetVkGetInstanceProcAddr(void)
Get the address of the vkGetInstanceProcAddr function.
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,...
SDL_bool SDL_HasScreenKeyboardSupport(void)
Returns whether the platform has some screen keyboard support.
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
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)
int SDL_UpdateWindowSurface(SDL_Window *window)
Copy the window surface to the screen.
SDL_DisplayMode * SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
Get the closest match to the requested display 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).
static int SDL_SetDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
void SDL_SetWindowPosition(SDL_Window *window, int x, int y)
Set the position of a window.
SDL_bool SDL_IsScreenKeyboardShown(SDL_Window *window)
Returns whether the screen keyboard is shown for given window.
const char * SDL_GetWindowTitle(SDL_Window *window)
Get the title of a window, in UTF-8 format.
static SDL_bool ShouldUseTextureFramebuffer()
#define NOT_A_VULKAN_WINDOW
static void SDL_DestroyWindowTexture(SDL_VideoDevice *unused, SDL_Window *window)
Uint32 SDL_GetWindowFlags(SDL_Window *window)
Get the window flags.
int SDL_GetWindowDisplayIndex(SDL_Window *window)
Get the display index associated with a window.
void SDL_Metal_DestroyView(SDL_MetalView view)
Destroy an existing SDL_MetalView object.
SDL_bool SDL_GL_ExtensionSupported(const char *extension)
Return true if an OpenGL extension is supported for the current context.
int SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode *mode)
Fill in information about the current display mode.
int SDL_GL_SetSwapInterval(int interval)
Set the swap interval for the current OpenGL context.
#define SDL_WINDOWTEXTUREDATA
SDL_bool SDL_ShouldAllowTopmost(void)
void SDL_OnApplicationWillEnterForeground(void)
void SDL_OnWindowLeave(SDL_Window *window)
SDL_bool SDL_GetWindowWMInfo(SDL_Window *window, struct SDL_SysWMinfo *info)
This function allows access to driver-dependent window information.
void SDL_GetWindowMaximumSize(SDL_Window *window, int *max_w, int *max_h)
Get the maximum size of a window's client area.
void SDL_OnWindowMinimized(SDL_Window *window)
static int SDL_CreateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
SDL_bool SDL_HasWindows(void)
void SDL_GL_SwapWindow(SDL_Window *window)
Swap the OpenGL buffers for a window, if double-buffering is supported.
Uint32 SDL_GetWindowPixelFormat(SDL_Window *window)
Get the pixel format associated with the window.
int SDL_VideoInit(const char *driver_name)
Initialize the video subsystem, optionally specifying a video driver.
SDL_Window * SDL_GL_GetCurrentWindow(void)
Get the currently active OpenGL window.
SDL_DisplayOrientation SDL_GetDisplayOrientation(int displayIndex)
Get the orientation of a display.
void SDL_SetWindowGrab(SDL_Window *window, SDL_bool grabbed)
Set a window's input grab mode.
void SDL_EnableScreenSaver()
Allow the screen to be blanked by a screensaver.
int SDL_GetDisplayMode(int displayIndex, int index, SDL_DisplayMode *mode)
Fill in information about a specific display mode.
static SDL_bool CanMinimizeWindow(SDL_Window *window)
void SDL_OnWindowFocusLost(SDL_Window *window)
void * SDL_GetDisplayDriverData(int displayIndex)
static SDL_INLINE void PrepareDragAndDropSupport(SDL_Window *window)
void SDL_OnWindowHidden(SDL_Window *window)
void SDL_OnWindowShown(SDL_Window *window)
static SDL_bool ShouldMinimizeOnFocusLoss(SDL_Window *window)
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.
int SDL_GL_GetSwapInterval(void)
Get the swap interval for the current OpenGL context.
int SDL_GetWindowDisplayMode(SDL_Window *window, SDL_DisplayMode *mode)
Fill in information about the display mode used when a fullscreen window is visible.
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
int SDL_UpdateWindowSurfaceRects(SDL_Window *window, const SDL_Rect *rects, int numrects)
Copy a number of rectangles on the window surface to the screen.
static SDL_VideoDevice * _this
void SDL_OnWindowResized(SDL_Window *window)
int SDL_GetDisplayDPI(int displayIndex, float *ddpi, float *hdpi, float *vdpi)
Get the dots/pixels-per-inch for a display.
void SDL_SetWindowTitle(SDL_Window *window, const char *title)
Set the title of a window, in UTF-8 format.
void SDL_RestoreWindow(SDL_Window *window)
Restore the size and position of a minimized or maximized window.
SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
Create an OpenGL context for use with an OpenGL window, and make it current.
void SDL_DisableScreenSaver()
Prevent the screen from being blanked by a screensaver.
int SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags)
Set a window's fullscreen state.
static int cmpmodes(const void *A, const void *B)
void SDL_OnWindowEnter(SDL_Window *window)
void SDL_SetWindowMaximumSize(SDL_Window *window, int max_w, int max_h)
Set the maximum size of a window's client area.
SDL_MetalView SDL_Metal_CreateView(SDL_Window *window)
Create a CAMetalLayer-backed NSView/UIView and attach it to the specified window.
static int SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay *display)
SDL_Window * SDL_CreateWindowFrom(const void *data)
Create an SDL window from an existing native window.
void SDL_OnWindowRestored(SDL_Window *window)
void SDL_Metal_GetDrawableSize(SDL_Window *window, int *w, int *h)
Get the size of a window's underlying drawable in pixels (for use with setting viewport,...
static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
void SDL_SetWindowBordered(SDL_Window *window, SDL_bool bordered)
Set the border state of a window.
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0,...
SDL_bool SDL_GetWindowGrab(SDL_Window *window)
Get a window's input grab mode.
void SDL_StartTextInput(void)
Start accepting Unicode text input events. This function will show the on-screen keyboard if supporte...
int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
Create a modal message box.
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 SDL_GetNumVideoDisplays(void)
Returns the number of available video displays.
int SDL_SetWindowInputFocus(SDL_Window *window)
Explicitly sets input focus to the window.
SDL_bool SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, unsigned *count, const char **names)
#define CHECK_WINDOW_MAGIC(window, retval)
static int SDL_UninitializedVideo()
SDL_Surface * SDL_GetWindowSurface(SDL_Window *window)
Get the SDL surface associated with the window.
int SDL_Vulkan_LoadLibrary(const char *path)
Dynamically load a Vulkan loader library.
void SDL_GetWindowPosition(SDL_Window *window, int *x, int *y)
Get the position of a window.
int SDL_GL_MakeCurrent(SDL_Window *window, SDL_GLContext ctx)
Set up an OpenGL context for rendering into an OpenGL window.
SDL_bool SDL_IsVideoContextExternal(void)
SDL_VideoDevice * SDL_GetVideoDevice(void)
const char * SDL_GetDisplayName(int displayIndex)
Get the name of a display in UTF-8 encoding.
int SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect *rect)
Get the usable desktop area represented by a display, with the primary display located at 0,...
SDL_GLContext SDL_GL_GetCurrentContext(void)
Get the currently active OpenGL context.
void SDL_ToggleDragAndDropSupport(void)
SDL_Window * SDL_GetFocusWindow(void)
void SDL_ShowWindow(SDL_Window *window)
Show a window.
int SDL_RecreateWindow(SDL_Window *window, Uint32 flags)
void SDL_GL_UnloadLibrary(void)
Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
float SDL_GetWindowBrightness(SDL_Window *window)
Get the brightness (gamma correction) for a window.
static void SDL_RestoreMousePosition(SDL_Window *window)
int SDL_GL_SetAttribute(SDL_GLattr attr, int value)
Set an OpenGL window attribute before window creation.
int SDL_AddBasicVideoDisplay(const SDL_DisplayMode *desktop_mode)
int SDL_SetWindowOpacity(SDL_Window *window, float opacity)
Set the opacity for a window.
int SDL_SetWindowBrightness(SDL_Window *window, float brightness)
Set the brightness (gamma correction) for a window.
int SDL_GetNumVideoDrivers(void)
Get the number of video drivers compiled into SDL.
void SDL_GL_ResetAttributes()
Reset all previously set OpenGL context attributes to their default values.
void SDL_OnApplicationDidBecomeActive(void)
void SDL_UpdateWindowGrab(SDL_Window *window)
int SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode *mode)
Fill in information about the desktop display mode.
void SDL_SetWindowMinimumSize(SDL_Window *window, int min_w, int min_h)
Set the minimum size of a window's client area.
static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr)
int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window)
Create a simple modal message box.
void * SDL_GL_GetProcAddress(const char *proc)
Get the address of an OpenGL function.
void SDL_DelVideoDisplay(int index)
void SDL_OnApplicationDidEnterBackground(void)
static SDL_DisplayMode * SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
void SDL_GL_DeleteContext(SDL_GLContext context)
Delete an OpenGL context.
void SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon)
Set the icon for a window.
const char * SDL_GetVideoDriver(int index)
Get the name of a built in video driver.
const char * SDL_GetCurrentVideoDriver()
Returns the name of the currently initialized video driver.
SDL_Window * SDL_GetGrabbedWindow(void)
Get the window that currently has an input grab enabled.
void SDL_GetWindowSize(SDL_Window *window, int *w, int *h)
Get the size of a window's client area.
static SDL_Surface * SDL_CreateWindowFramebuffer(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...
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display, SDL_bool send_event)
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
void SDL_MaximizeWindow(SDL_Window *window)
Make a window as large as possible.
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
static int ParseDisplayUsableBoundsHint(SDL_Rect *rect)
SDL_Window * SDL_GetWindowFromID(Uint32 id)
Get a window from a stored ID, or NULL if it doesn't exist.
static VideoBootStrap * bootstrap[]
Uint32 SDL_GetWindowID(SDL_Window *window)
Get the numeric ID of a window, for logging purposes.
void SDL_SetWindowSize(SDL_Window *window, int w, int h)
Set the size of a window's client area.
int SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
Get the actual value for an attribute from the current context.
SDL_VideoDisplay * SDL_GetDisplay(int displayIndex)
static int SDL_UpdateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, const SDL_Rect *rects, int numrects)
void * SDL_GetWindowData(SDL_Window *window, const char *name)
Retrieve the data pointer associated with a window.
int SDL_GL_LoadLibrary(const char *path)
Dynamically load an OpenGL library.
float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches)
void SDL_OnWindowFocusGained(SDL_Window *window)
static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype)
static SDL_INLINE SDL_bool IsAcceptingDragAndDrop(void)
void SDL_StopTextInput(void)
Stop receiving any text input events. This function will hide the on-screen keyboard if supported.
SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
int SDL_GetWindowGammaRamp(SDL_Window *window, Uint16 *red, Uint16 *green, Uint16 *blue)
Get the gamma ramp for a window.
void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable)
Set the user-resizable state of a window.
int SDL_SetWindowGammaRamp(SDL_Window *window, const Uint16 *red, const Uint16 *green, const Uint16 *blue)
Set the gamma ramp for a window.
void SDL_GetWindowMinimumSize(SDL_Window *window, int *min_w, int *min_h)
Get the minimum size of a window's client area.
void SDL_VideoQuit(void)
Shuts down the video subsystem.
int SDL_GetIndexOfDisplay(SDL_VideoDisplay *display)
int SDL_SetWindowDisplayMode(SDL_Window *window, const SDL_DisplayMode *mode)
Set the display mode used when a fullscreen window is visible.
int SDL_GetNumDisplayModes(int displayIndex)
Returns the number of available display modes.
SDL_bool SDL_Vulkan_CreateSurface(SDL_Window *window, VkInstance instance, VkSurfaceKHR *surface)
Create a Vulkan rendering surface for a window.
void SDL_Vulkan_UnloadLibrary(void)
Unload the Vulkan loader library previously loaded by SDL_Vulkan_LoadLibrary().
void * SDL_SetWindowData(SDL_Window *window, const char *name, void *userdata)
Associate an arbitrary named pointer with a window.
void SDL_OnApplicationDidReceiveMemoryWarning(void)
#define GL_NUM_EXTENSIONS
SDL_bool SDL_IsTextInputActive(void)
Return whether or not Unicode text input events are enabled.
void SDL_RaiseWindow(SDL_Window *window)
Raise a window above other windows and set the input focus.
void SDL_GL_DeduceMaxSupportedESProfile(int *major, int *minor)
void SDL_OnApplicationWillResignActive(void)
void * SDL_Metal_GetLayer(SDL_MetalView view)
Get a pointer to the backing CAMetalLayer for the given view.
int SDL_GetWindowOpacity(SDL_Window *window, float *out_opacity)
Get the opacity of a window.
int SDL_SetWindowHitTest(SDL_Window *window, SDL_HitTest callback, void *userdata)
Provide a callback that decides if a window region has special properties.
SDL_bool SDL_IsScreenSaverEnabled()
Returns whether the screensaver is currently enabled (default off).
void SDL_OnApplicationWillTerminate(void)
#define SDL_WINDOWPOS_ISCENTERED(X)
SDL_HitTestResult(* SDL_HitTest)(SDL_Window *win, const SDL_Point *area, void *data)
Callback used for hit-testing.
#define SDL_WINDOWPOS_ISUNDEFINED(X)
@ SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
SDL_GLattr
OpenGL configuration attributes.
@ SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
@ SDL_GL_CONTEXT_RELEASE_BEHAVIOR
@ SDL_GL_CONTEXT_MAJOR_VERSION
@ SDL_GL_CONTEXT_RESET_NOTIFICATION
@ SDL_GL_ACCUM_ALPHA_SIZE
@ SDL_GL_MULTISAMPLESAMPLES
@ SDL_GL_CONTEXT_MINOR_VERSION
@ SDL_GL_MULTISAMPLEBUFFERS
@ SDL_GL_ACCUM_GREEN_SIZE
@ SDL_GL_SHARE_WITH_CURRENT_CONTEXT
@ SDL_GL_RETAINED_BACKING
@ SDL_GL_ACCELERATED_VISUAL
@ SDL_GL_CONTEXT_PROFILE_MASK
@ SDL_GL_CONTEXT_NO_ERROR
@ SDL_WINDOW_ALLOW_HIGHDPI
@ SDL_WINDOW_MOUSE_CAPTURE
@ SDL_WINDOW_INPUT_GRABBED
@ SDL_WINDOW_FULLSCREEN_DESKTOP
@ SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG
@ SDL_GL_CONTEXT_RESET_ISOLATION_FLAG
@ SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG
@ SDL_GL_CONTEXT_DEBUG_FLAG
void * SDL_GLContext
An opaque handle to an OpenGL context.
@ SDL_WINDOWEVENT_FOCUS_LOST
@ SDL_WINDOWEVENT_RESIZED
@ SDL_WINDOWEVENT_FOCUS_GAINED
@ SDL_WINDOWEVENT_MINIMIZED
@ SDL_WINDOWEVENT_SIZE_CHANGED
@ SDL_WINDOWEVENT_RESTORED
@ SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
@ SDL_GL_CONTEXT_PROFILE_ES
@ SDL_GL_CONTEXT_PROFILE_CORE
@ SDL_DISPLAYEVENT_DISCONNECTED
@ SDL_DISPLAYEVENT_CONNECTED
@ SDL_ORIENTATION_UNKNOWN
@ SDL_GL_CONTEXT_RESET_NO_NOTIFICATION
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Uint32 WINRT_DetectWindowFlags(SDL_Window *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 in i)
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)
EGLSurface EGLNativeWindowType * window
EGLSurface EGLint * rects
#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp
set set set set set set set set set set set set set set set set set set set set *set set set macro pixldst op &r &cond WK op &r &cond WK op &r &cond WK else op &m &cond &ia op &r &cond WK else op &m &cond &ia elseif elseif else error unsupported base if elseif elseif else error unsupported unaligned pixldst unaligned endm macro pixst base base else pixldst base endif endm macro PF base if bpp PF set rept prefetch_distance PF set OFFSET endr endif endm macro preload_leading_step2 base if bpp ifc DST PF PF else if bpp lsl PF PF lsl PF PF lsl PF PF PF else PF lsl PF lsl PF lsl PF endif SIZE macro preload_middle scratch_holds_offset if bpp if else PF PF endif endif endif endm macro preload_trailing base if bpp if bpp *pix_per_block PF PF lsl PF PF PF PF PF else PF lsl PF lsl PF PF PF PF PF base if bpp if narrow_case &&bpp<=dst_w_bpp) PF bic, WK0, base, #31 PF pld,[WK0] PF add, WK1, base, X, LSL #bpp_shift PF sub, WK1, WK1, #1 PF bic, WK1, WK1, #31 PF cmp, WK1, WK0 PF beq, 90f PF pld,[WK1]90:.else PF bic, WK0, base, #31 PF pld,[WK0] PF add, WK1, base, X, lsl #bpp_shift PF sub, WK1, WK1, #1 PF bic, WK1, WK1, #31 PF cmp, WK1, WK0 PF beq, 92f91:PF add, WK0, WK0, #32 PF cmp, WK0, WK1 PF pld,[WK0] PF bne, 91b92:.endif .endif.endm.macro conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, 0 .if decrementx sub &cond X, X, #8 *numbytes/dst_w_bpp .endif process_tail cond, numbytes, firstreg .if !((flags) &FLAG_PROCESS_DOES_STORE) pixst cond, numbytes, firstreg, DST .endif.endm.macro conditional_process1 cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx .if(flags) &FLAG_BRANCH_OVER .ifc cond, mi bpl 100f .endif .ifc cond, cs bcc 100f .endif .ifc cond, ne beq 100f .endif conditional_process1_helper, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx100:.else conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx .endif.endm.macro conditional_process2 test, cond1, cond2, process_head, process_tail, numbytes1, numbytes2, firstreg1, firstreg2, unaligned_src, unaligned_mask, decrementx .if(flags) &(FLAG_DST_READWRITE|FLAG_BRANCH_OVER|FLAG_PROCESS_CORRUPTS_PSR|FLAG_PROCESS_DOES_STORE) test conditional_process1 cond1, process_head, process_tail, numbytes1, firstreg1, unaligned_src, unaligned_mask, decrementx .if(flags) &FLAG_PROCESS_CORRUPTS_PSR test .endif conditional_process1 cond2, process_head, process_tail, numbytes2, firstreg2, unaligned_src, unaligned_mask, decrementx .else test process_head cond1, numbytes1, firstreg1, unaligned_src, unaligned_mask, 0 process_head cond2, numbytes2, firstreg2, unaligned_src, unaligned_mask, 0 .if decrementx sub &cond1 X, X, #8 *numbytes1/dst_w_bpp sub &cond2 X, X, #8 *numbytes2/dst_w_bpp .endif process_tail cond1, numbytes1, firstreg1 process_tail cond2, numbytes2, firstreg2 pixst cond1, numbytes1, firstreg1, DST pixst cond2, numbytes2, firstreg2, DST .endif.endm.macro test_bits_1_0_ptr .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 movs SCRATCH, X, lsl #32-1 .else movs SCRATCH, WK0, lsl #32-1 .endif.endm.macro test_bits_3_2_ptr .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 movs SCRATCH, X, lsl #32-3 .else movs SCRATCH, WK0, lsl #32-3 .endif.endm.macro leading_15bytes process_head, process_tail .set DECREMENT_X, 1 .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 .set DECREMENT_X, 0 sub X, X, WK0, lsr #dst_bpp_shift str X,[sp, #LINE_SAVED_REG_COUNT *4] mov X, WK0 .endif .if dst_w_bpp==8 conditional_process2 test_bits_1_0_ptr, mi, cs, process_head, process_tail, 1, 2, 1, 2, 1, 1, DECREMENT_X .elseif dst_w_bpp==16 test_bits_1_0_ptr conditional_process1 cs, process_head, process_tail, 2, 2, 1, 1, DECREMENT_X .endif conditional_process2 test_bits_3_2_ptr, mi, cs, process_head, process_tail, 4, 8, 1, 2, 1, 1, DECREMENT_X .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 ldr X,[sp, #LINE_SAVED_REG_COUNT *4] .endif.endm.macro test_bits_3_2_pix movs SCRATCH, X, lsl #dst_bpp_shift+32-3.endm.macro test_bits_1_0_pix .if dst_w_bpp==8 movs SCRATCH, X, lsl #dst_bpp_shift+32-1 .else movs SCRATCH, X, lsr #1 .endif.endm.macro trailing_15bytes process_head, process_tail, unaligned_src, unaligned_mask conditional_process2 test_bits_3_2_pix, cs, mi, process_head, process_tail, 8, 4, 0, 2, unaligned_src, unaligned_mask, 0 .if dst_w_bpp==16 test_bits_1_0_pix conditional_process1 cs, process_head, process_tail, 2, 0, unaligned_src, unaligned_mask, 0 .elseif dst_w_bpp==8 conditional_process2 test_bits_1_0_pix, cs, mi, process_head, process_tail, 2, 1, 0, 1, unaligned_src, unaligned_mask, 0 .endif.endm.macro wide_case_inner_loop process_head, process_tail, unaligned_src, unaligned_mask, dst_alignment110:.set SUBBLOCK, 0 .rept pix_per_block *dst_w_bpp/128 process_head, 16, 0, unaligned_src, unaligned_mask, 1 .if(src_bpp > 0) &&(mask_bpp==0) &&((flags) &FLAG_PROCESS_PRESERVES_SCRATCH) preload_middle src_bpp, SRC, 1 .elseif(src_bpp==0) &&(mask_bpp > 0) &&((flags) &FLAG_PROCESS_PRESERVES_SCRATCH) preload_middle mask_bpp, MASK, 1 .else preload_middle src_bpp, SRC, 0 preload_middle mask_bpp, MASK, 0 .endif .if(dst_r_bpp > 0) &&((SUBBLOCK % 2)==0) &&(((flags) &FLAG_NO_PRELOAD_DST)==0) PF pld,[DST, #32 *prefetch_distance - dst_alignment] .endif process_tail, 16, 0 .if !((flags) &FLAG_PROCESS_DOES_STORE) pixst, 16, 0, DST .endif .set SUBBLOCK, SUBBLOCK+1 .endr subs X, X, #pix_per_block bhs 110b.endm.macro wide_case_inner_loop_and_trailing_pixels process_head, process_tail, process_inner_loop, exit_label, unaligned_src, unaligned_mask .if dst_r_bpp > tst bne process_inner_loop DST_PRELOAD_BIAS endif preload_trailing SRC preload_trailing MASK DST endif add medium_case_inner_loop_and_trailing_pixels unaligned_mask endm macro medium_case_inner_loop_and_trailing_pixels unused
The structure that defines a display mode.
MessageBox structure containing title, text, window, etc.
The structure that defines a point (integer)
A rectangle, with the origin at the upper left (integer).
Information on the capabilities of a render driver or context.
Uint32 texture_formats[16]
Uint32 num_texture_formats
A collection of pixels used in software blitting.
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
int(* GetDisplayBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
int framebuffer_srgb_capable
void(* HideScreenKeyboard)(_THIS, SDL_Window *window)
int(* ShowMessageBox)(_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid)
struct SDL_VideoDevice::@441 vulkan_config
void(* Metal_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
void(* ShowWindow)(_THIS, SDL_Window *window)
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
void(* RestoreWindow)(_THIS, SDL_Window *window)
SDL_GLContext current_glctx
void(* SetWindowFullscreen)(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
void(* Metal_DestroyView)(_THIS, SDL_MetalView view)
int(* GetDisplayUsableBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
struct SDL_VideoDevice::@440 gl_config
void(* SuspendScreenSaver)(_THIS)
int(* Vulkan_LoadLibrary)(_THIS, const char *path)
SDL_bool(* Vulkan_GetInstanceExtensions)(_THIS, SDL_Window *window, unsigned *count, const char **names)
int(* CreateSDLWindow)(_THIS, SDL_Window *window)
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
void(* SetWindowSize)(_THIS, SDL_Window *window)
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
int(* SetWindowModalFor)(_THIS, SDL_Window *modal_window, SDL_Window *parent_window)
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
int(* GetDisplayDPI)(_THIS, SDL_VideoDisplay *display, float *ddpi, float *hdpi, float *vdpi)
void *(* Metal_GetLayer)(_THIS, SDL_MetalView view)
void(* SetWindowPosition)(_THIS, SDL_Window *window)
int(* GL_SetSwapInterval)(_THIS, int interval)
void(* GL_UnloadLibrary)(_THIS)
void(* SetWindowMinimumSize)(_THIS, SDL_Window *window)
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
void *(* GL_GetProcAddress)(_THIS, const char *proc)
SDL_MetalView(* Metal_CreateView)(_THIS, SDL_Window *window)
SDL_bool suspend_screensaver
void(* SetWindowResizable)(_THIS, SDL_Window *window, SDL_bool resizable)
SDL_bool(* HasScreenKeyboardSupport)(_THIS)
void(* Vulkan_UnloadLibrary)(_THIS)
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
SDL_bool(* IsScreenKeyboardShown)(_THIS, SDL_Window *window)
SDL_TLSID current_glwin_tls
SDL_VideoDisplay * displays
SDL_Window * grabbed_window
void(* Vulkan_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
int(* GL_GetSwapInterval)(_THIS)
int(* GetWindowGammaRamp)(_THIS, SDL_Window *window, Uint16 *ramp)
int(* GetWindowBordersSize)(_THIS, SDL_Window *window, int *top, int *left, int *bottom, int *right)
void(* GL_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
void(* DestroyWindow)(_THIS, SDL_Window *window)
void(* StartTextInput)(_THIS)
int(* GL_LoadLibrary)(_THIS, const char *path)
int(* GL_SwapWindow)(_THIS, SDL_Window *window)
void(* SetWindowMaximumSize)(_THIS, SDL_Window *window)
void(* SetWindowTitle)(_THIS, SDL_Window *window)
SDL_bool gl_allow_no_surface
int(* SetWindowInputFocus)(_THIS, SDL_Window *window)
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
void(* GL_DefaultProfileConfig)(_THIS, int *mask, int *major, int *minor)
void(* MinimizeWindow)(_THIS, SDL_Window *window)
void(* HideWindow)(_THIS, SDL_Window *window)
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
void(* SetTextInputRect)(_THIS, SDL_Rect *rect)
SDL_bool(* Vulkan_CreateSurface)(_THIS, SDL_Window *window, VkInstance instance, VkSurfaceKHR *surface)
void(* AcceptDragAndDrop)(SDL_Window *window, SDL_bool accept)
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
void(* StopTextInput)(_THIS)
int(* CreateSDLWindowFrom)(_THIS, SDL_Window *window, const void *data)
SDL_TLSID current_glctx_tls
SDL_Window * current_glwin
void(* MaximizeWindow)(_THIS, SDL_Window *window)
void(* OnWindowEnter)(_THIS, SDL_Window *window)
int(* SetWindowOpacity)(_THIS, SDL_Window *window, float opacity)
int share_with_current_context
void(* ShowScreenKeyboard)(_THIS, SDL_Window *window)
void(* SetWindowBordered)(_THIS, SDL_Window *window, SDL_bool bordered)
void(* RaiseWindow)(_THIS, SDL_Window *window)
SDL_DisplayMode desktop_mode
SDL_DisplayOrientation orientation
SDL_DisplayMode * display_modes
SDL_Window * fullscreen_window
SDL_DisplayMode current_mode
The type used to identify a window.
struct SDL_WindowUserData * next
SDL_VideoDevice *(* create)(int devindex)
static SDL_Renderer * renderer
static Uint32 callback(Uint32 interval, void *param)
static screen_context_t context
VideoBootStrap QNX_bootstrap