SDL_video.c File Reference
`#include "../SDL_internal.h"`
`#include "SDL.h"`
`#include "SDL_video.h"`
`#include "SDL_sysvideo.h"`
`#include "SDL_blit.h"`
`#include "SDL_pixels_c.h"`
`#include "SDL_rect_c.h"`
`#include "../events/SDL_events_c.h"`
`#include "../timer/SDL_timer_c.h"`
`#include "SDL_syswm.h"`
`#include "SDL_opengl.h"`
`#include "x11/SDL_x11messagebox.h"`
Include dependency graph for SDL_video.c:

Go to the source code of this file.

## Data Structures

struct | SDL_WindowTextureData

## Macros

#define | GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB
#define | CHECK_WINDOW_MAGIC(window, retval)
#define | CHECK_DISPLAY_INDEX(displayIndex, retval)
#define | FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN)
#define | SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData"
#define | CREATE_FLAGS (SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI)
#define | GL_NUM_EXTENSIONS 0x821D

## Functions

static SDL_bool | ShouldUseTextureFramebuffer ()
static int | SDL_CreateWindowTexture (SDL_VideoDevice *unused, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
static int | SDL_UpdateWindowTexture (SDL_VideoDevice *unused, SDL_Window *window, const SDL_Rect *rects, int numrects)
static void | SDL_DestroyWindowTexture (SDL_VideoDevice *unused, SDL_Window *window)
static int | cmpmodes (const void *A, const void *B)
static int | SDL_UninitializedVideo ()
int | SDL_GetNumVideoDrivers (void)
| Get the number of video drivers compiled into SDL. More...
const char * | SDL_GetVideoDriver (int index)
| Get the name of a built in video driver. More...
int | SDL_VideoInit (const char *driver_name)
| Initialize the video subsystem, optionally specifying a video driver. More...
const char * | SDL_GetCurrentVideoDriver ()
| Returns the name of the currently initialized video driver. More...
SDL_VideoDevice * | SDL_GetVideoDevice (void)
int | SDL_AddBasicVideoDisplay (const SDL_DisplayMode *desktop_mode)
int | SDL_AddVideoDisplay (const SDL_VideoDisplay *display)
int | SDL_GetNumVideoDisplays (void)
| Returns the number of available video displays. More...
static int | SDL_GetIndexOfDisplay (SDL_VideoDisplay *display)
void * | SDL_GetDisplayDriverData (int displayIndex)
const char * | SDL_GetDisplayName (int displayIndex)
| Get the name of a display in UTF-8 encoding. More...
int | SDL_GetDisplayBounds (int displayIndex, SDL_Rect *rect)
| Get the desktop area represented by a display, with the primary display located at 0,0. More...
int | SDL_GetDisplayDPI (int displayIndex, float *ddpi, float *hdpi, float *vdpi)
| Get the dots/pixels-per-inch for a display. More...
SDL_bool | SDL_AddDisplayMode (SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
static int | SDL_GetNumDisplayModesForDisplay (SDL_VideoDisplay *display)
int | SDL_GetNumDisplayModes (int displayIndex)
| Returns the number of available display modes. More...
int | SDL_GetDisplayMode (int displayIndex, int index, SDL_DisplayMode *mode)
| Fill in information about a specific display mode. More...
int | SDL_GetDesktopDisplayMode (int displayIndex, SDL_DisplayMode *mode)
| Fill in information about the desktop display mode. More...
int | SDL_GetCurrentDisplayMode (int displayIndex, SDL_DisplayMode *mode)
| Fill in information about the current display mode. More...
static SDL_DisplayMode * | SDL_GetClosestDisplayModeForDisplay (SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
SDL_DisplayMode * | SDL_GetClosestDisplayMode (int displayIndex, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
| Get the closest match to the requested display mode. More...
static int | SDL_SetDisplayModeForDisplay (SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
int | SDL_GetWindowDisplayIndex (SDL_Window *window)
| Get the display index associated with a window. More...
SDL_VideoDisplay * | SDL_GetDisplayForWindow (SDL_Window *window)
int | SDL_SetWindowDisplayMode (SDL_Window *window, const SDL_DisplayMode *mode)
| Set the display mode used when a fullscreen window is visible. More...
int | SDL_GetWindowDisplayMode (SDL_Window *window, SDL_DisplayMode *mode)
| Fill in information about the display mode used when a fullscreen window is visible. More...
Uint32 | SDL_GetWindowPixelFormat (SDL_Window *window)
| Get the pixel format associated with the window. More...
static void | SDL_RestoreMousePosition (SDL_Window *window)
static int | SDL_UpdateFullscreenMode (SDL_Window *window, SDL_bool fullscreen)
static void | SDL_FinishWindowCreation (SDL_Window *window, Uint32 flags)
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. More...
SDL_Window * | SDL_CreateWindowFrom (const void *data)
| Create an SDL window from an existing native window. More...
int | SDL_RecreateWindow (SDL_Window *window, Uint32 flags)
Uint32 | SDL_GetWindowID (SDL_Window *window)
| Get the numeric ID of a window, for logging purposes. More...
SDL_Window * | SDL_GetWindowFromID (Uint32 id)
| Get a window from a stored ID, or NULL if it doesn't exist. More...
Uint32 | SDL_GetWindowFlags (SDL_Window *window)
| Get the window flags. More...
void | SDL_SetWindowTitle (SDL_Window *window, const char *title)
| Set the title of a window, in UTF-8 format. More...
const char * | SDL_GetWindowTitle (SDL_Window *window)
| Get the title of a window, in UTF-8 format. More...
void | SDL_SetWindowIcon (SDL_Window *window, SDL_Surface *icon)
| Set the icon for a window. More...
void * | SDL_SetWindowData (SDL_Window *window, const char *name, void *userdata)
| Associate an arbitrary named pointer with a window. More...
void * | SDL_GetWindowData (SDL_Window *window, const char *name)
| Retrieve the data pointer associated with a window. More...
void | SDL_SetWindowPosition (SDL_Window *window, int x, int y)
| Set the position of a window. More...
void | SDL_GetWindowPosition (SDL_Window *window, int *x, int *y)
| Get the position of a window. More...
void | SDL_SetWindowBordered (SDL_Window *window, SDL_bool bordered)
| Set the border state of a window. More...
void | SDL_SetWindowSize (SDL_Window *window, int w, int h)
| Set the size of a window's client area. More...
void | SDL_GetWindowSize (SDL_Window *window, int *w, int *h)
| Get the size of a window's client area. More...
void | SDL_SetWindowMinimumSize (SDL_Window *window, int min_w, int min_h)
| Set the minimum size of a window's client area. More...
void | SDL_GetWindowMinimumSize (SDL_Window *window, int *min_w, int *min_h)
| Get the minimum size of a window's client area. More...
void | SDL_SetWindowMaximumSize (SDL_Window *window, int max_w, int max_h)
| Set the maximum size of a window's client area. More...
void | SDL_GetWindowMaximumSize (SDL_Window *window, int *max_w, int *max_h)
| Get the maximum size of a window's client area. More...
void | SDL_ShowWindow (SDL_Window *window)
| Show a window. More...
void | SDL_HideWindow (SDL_Window *window)
| Hide a window. More...
void | SDL_RaiseWindow (SDL_Window *window)
| Raise a window above other windows and set the input focus. More...
void | SDL_MaximizeWindow (SDL_Window *window)
| Make a window as large as possible. More...
void | SDL_MinimizeWindow (SDL_Window *window)
| Minimize a window to an iconic representation. More...
void | SDL_RestoreWindow (SDL_Window *window)
| Restore the size and position of a minimized or maximized window. More...
int | SDL_SetWindowFullscreen (SDL_Window *window, Uint32 flags)
| Set a window's fullscreen state. More...
static SDL_Surface * | SDL_CreateWindowFramebuffer (SDL_Window *window)
SDL_Surface * | SDL_GetWindowSurface (SDL_Window *window)
| Get the SDL surface associated with the window. More...
int | SDL_UpdateWindowSurface (SDL_Window *window)
| Copy the window surface to the screen. More...
int | SDL_UpdateWindowSurfaceRects (SDL_Window *window, const SDL_Rect *rects, int numrects)
| Copy a number of rectangles on the window surface to the screen. More...
int | SDL_SetWindowBrightness (SDL_Window *window, float brightness)
| Set the brightness (gamma correction) for a window. More...
float | SDL_GetWindowBrightness (SDL_Window *window)
| Get the brightness (gamma correction) for a window. More...
int | SDL_SetWindowGammaRamp (SDL_Window *window, const Uint16 *red, const Uint16 *green, const Uint16 *blue)
| Set the gamma ramp for a window. More...
int | SDL_GetWindowGammaRamp (SDL_Window *window, Uint16 *red, Uint16 *green, Uint16 *blue)
| Get the gamma ramp for a window. More...
void | SDL_UpdateWindowGrab (SDL_Window *window)
void | SDL_SetWindowGrab (SDL_Window *window, SDL_bool grabbed)
| Set a window's input grab mode. More...
SDL_bool | SDL_GetWindowGrab (SDL_Window *window)
| Get a window's input grab mode. More...
SDL_Window * | SDL_GetGrabbedWindow (void)
| Get the window that currently has an input grab enabled. More...
void | SDL_OnWindowShown (SDL_Window *window)
void | SDL_OnWindowHidden (SDL_Window *window)
void | SDL_OnWindowResized (SDL_Window *window)
void | SDL_OnWindowMinimized (SDL_Window *window)
void | SDL_OnWindowRestored (SDL_Window *window)
void | SDL_OnWindowEnter (SDL_Window *window)
void | SDL_OnWindowLeave (SDL_Window *window)
void | SDL_OnWindowFocusGained (SDL_Window *window)
static SDL_bool | ShouldMinimizeOnFocusLoss (SDL_Window *window)
void | SDL_OnWindowFocusLost (SDL_Window *window)
SDL_Window * | SDL_GetFocusWindow (void)
void | SDL_DestroyWindow (SDL_Window *window)
| Destroy a window. More...
SDL_bool | SDL_IsScreenSaverEnabled ()
| Returns whether the screensaver is currently enabled (default on). More...
void | SDL_EnableScreenSaver ()
| Allow the screen to be blanked by a screensaver. More...
void | SDL_DisableScreenSaver ()
| Prevent the screen from being blanked by a screensaver. More...
void | SDL_VideoQuit (void)
| Shuts down the video subsystem. More...
int | SDL_GL_LoadLibrary (const char *path)
| Dynamically load an OpenGL library. More...
void * | SDL_GL_GetProcAddress (const char *proc)
| Get the address of an OpenGL function. More...
void | SDL_GL_UnloadLibrary (void)
| Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). More...
static SDL_INLINE SDL_bool | isAtLeastGL3 (const char *verstr)
SDL_bool | SDL_GL_ExtensionSupported (const char *extension)
| Return true if an OpenGL extension is supported for the current context. More...
void | SDL_GL_ResetAttributes ()
| Reset all previously set OpenGL context attributes to their default values. More...
int | SDL_GL_SetAttribute (SDL_GLattr attr, int value)
| Set an OpenGL window attribute before window creation. More...
int | SDL_GL_GetAttribute (SDL_GLattr attr, int *value)
| Get the actual value for an attribute from the current context. More...
SDL_GLContext | SDL_GL_CreateContext (SDL_Window *window)
| Create an OpenGL context for use with an OpenGL window, and make it current. More...
int | SDL_GL_MakeCurrent (SDL_Window *window, SDL_GLContext ctx)
| Set up an OpenGL context for rendering into an OpenGL window. More...
SDL_Window * | SDL_GL_GetCurrentWindow (void)
| Get the currently active OpenGL window. More...
SDL_GLContext | SDL_GL_GetCurrentContext (void)
| Get the currently active OpenGL context. More...
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). More...
int | SDL_GL_SetSwapInterval (int interval)
| Set the swap interval for the current OpenGL context. More...
int | SDL_GL_GetSwapInterval (void)
| Get the swap interval for the current OpenGL context. More...
void | SDL_GL_SwapWindow (SDL_Window *window)
| Swap the OpenGL buffers for a window, if double-buffering is supported. More...
void | SDL_GL_DeleteContext (SDL_GLContext context)
| Delete an OpenGL context. More...
SDL_bool | SDL_GetWindowWMInfo (SDL_Window *window, struct SDL_SysWMinfo *info)
| This function allows access to driver-dependent window information. More...
void | SDL_StartTextInput (void)
| Start accepting Unicode text input events. This function will show the on-screen keyboard if supported. More...
SDL_bool | SDL_IsTextInputActive (void)
| Return whether or not Unicode text input events are enabled. More...
void | SDL_StopTextInput (void)
| Stop receiving any text input events. This function will hide the on-screen keyboard if supported. More...
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 keyboard placement. More...
SDL_bool | SDL_HasScreenKeyboardSupport (void)
| Returns whether the platform has some screen keyboard support. More...
SDL_bool | SDL_IsScreenKeyboardShown (SDL_Window *window)
| Returns whether the screen keyboard is shown for given window. More...
static SDL_UNUSED SDL_bool | SDL_MessageboxValidForDriver (const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype)
int | SDL_ShowMessageBox (const SDL_MessageBoxData *messageboxdata, int *buttonid)
| Create a modal message box. More...
int | SDL_ShowSimpleMessageBox (Uint32 flags, const char *title, const char *message, SDL_Window *window)
| Create a simple modal message box. More...
SDL_bool | SDL_ShouldAllowTopmost (void)
int | SDL_SetWindowHitTest (SDL_Window *window, SDL_HitTest callback, void *userdata)
| Provide a callback that decides if a window region has special properties. More...
float | SDL_ComputeDiagonalDPI (int hpix, int vpix, float hinches, float vinches)

## Variables

static VideoBootStrap * | bootstrap []
static SDL_VideoDevice * | _this = NULL

## Macro Definition Documentation

#define CHECK_DISPLAY_INDEX | ( |  | displayIndex,
|  |  | retval
| ) |  |

Value:
if (!_this) { \
SDL_UninitializedVideo(); \
return retval; \
} \
SDL_assert(_this->displays != NULL); \
if (displayIndex < 0 || displayIndex >= _this->num_displays) { \
SDL_SetError("displayIndex must be in the range 0 - %d", \
_this->num_displays - 1); \
return retval; \
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:167
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

Definition at line 126 of file SDL_video.c.

Referenced by SDL_GetClosestDisplayMode(), SDL_GetCurrentDisplayMode(), SDL_GetDesktopDisplayMode(), SDL_GetDisplayBounds(), SDL_GetDisplayDPI(), SDL_GetDisplayDriverData(), SDL_GetDisplayMode(), SDL_GetDisplayName(), and SDL_GetNumDisplayModes().

#define CHECK_WINDOW_MAGIC | ( |  | window,
|  |  | retval
| ) |  |

Value:
if (!_this) { \
SDL_UninitializedVideo(); \
return retval; \
} \
if (!window || window->magic != &_this->window_magic) { \
SDL_SetError("Invalid window"); \
return retval; \
}
SDL_Window::magic
const void * magic
Definition: SDL_sysvideo.h:73
window
SDL_Window * window
Definition: testautomation_render.c:26
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_VideoDevice::window_magic
Uint8 window_magic
Definition: SDL_sysvideo.h:283
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

Definition at line 116 of file SDL_video.c.

Referenced by SDL_DestroyWindow(), SDL_GetWindowBrightness(), SDL_GetWindowData(), SDL_GetWindowDisplayIndex(), SDL_GetWindowDisplayMode(), SDL_GetWindowFlags(), SDL_GetWindowGammaRamp(), SDL_GetWindowGrab(), SDL_GetWindowID(), SDL_GetWindowMaximumSize(), SDL_GetWindowMinimumSize(), SDL_GetWindowPixelFormat(), SDL_GetWindowPosition(), SDL_GetWindowSize(), SDL_GetWindowSurface(), SDL_GetWindowTitle(), SDL_GetWindowWMInfo(), SDL_GL_CreateContext(), SDL_GL_GetDrawableSize(), SDL_GL_MakeCurrent(), SDL_GL_SwapWindow(), SDL_HideWindow(), SDL_MaximizeWindow(), SDL_MinimizeWindow(), SDL_RaiseWindow(), SDL_RestoreWindow(), SDL_SetWindowBordered(), SDL_SetWindowBrightness(), SDL_SetWindowData(), SDL_SetWindowDisplayMode(), SDL_SetWindowFullscreen(), SDL_SetWindowGammaRamp(), SDL_SetWindowGrab(), SDL_SetWindowHitTest(), SDL_SetWindowIcon(), SDL_SetWindowMaximumSize(), SDL_SetWindowMinimumSize(), SDL_SetWindowPosition(), SDL_SetWindowSize(), SDL_SetWindowTitle(), SDL_ShowWindow(), SDL_UpdateFullscreenMode(), SDL_UpdateWindowSurface(), and SDL_UpdateWindowSurfaceRects().

#define CREATE_FLAGS (SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI)

Definition at line 1287 of file SDL_video.c.

Referenced by SDL_CreateWindow(), and SDL_RecreateWindow().

#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN)

Definition at line 138 of file SDL_video.c.

Referenced by SDL_SetWindowFullscreen(), and SDL_UpdateFullscreenMode().

#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB

Definition at line 50 of file SDL_video.c.

Referenced by SDL_GL_GetAttribute().

#define GL_NUM_EXTENSIONS 0x821D

Referenced by SDL_GL_ExtensionSupported().

#define SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData"

Definition at line 149 of file SDL_video.c.

Referenced by SDL_CreateWindowTexture(), SDL_DestroyWindowTexture(), and SDL_UpdateWindowTexture().

## Function Documentation

static int cmpmodes | ( | const void * | A,
|  | const void * | B
| ) |  |

static

Definition at line 398 of file SDL_video.c.

References SDL_DisplayMode::format, SDL_DisplayMode::h, SDL_DisplayMode::refresh_rate, SDL_BITSPERPIXEL, SDL_PIXELLAYOUT, and SDL_DisplayMode::w.

Referenced by SDL_AddDisplayMode(), and SDL_GetNumDisplayModesForDisplay().

{
const SDL_DisplayMode *a = (const SDL_DisplayMode *) A;
const SDL_DisplayMode *b = (const SDL_DisplayMode *) B;
if (a == b) {
return 0;
} else if (a->w != b->w) {
return b->w - a->w;
} else if (a->h != b->h) {
return b->h - a->h;
} else if (SDL_BITSPERPIXEL(a->format) != SDL_BITSPERPIXEL(b->format)) {
return SDL_BITSPERPIXEL(b->format) - SDL_BITSPERPIXEL(a->format);
} else if (SDL_PIXELLAYOUT(a->format) != SDL_PIXELLAYOUT(b->format)) {
return SDL_PIXELLAYOUT(b->format) - SDL_PIXELLAYOUT(a->format);
} else if (a->refresh_rate != b->refresh_rate) {
return b->refresh_rate - a->refresh_rate;
}
return 0;
}
SDL_PIXELLAYOUT
#define SDL_PIXELLAYOUT(X)
Definition: SDL_pixels.h:125
SDL_DisplayMode::w
int w
Definition: SDL_video.h:56
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_DisplayMode::refresh_rate
int refresh_rate
Definition: SDL_video.h:58
SDL_DisplayMode::h
int h
Definition: SDL_video.h:57
SDL_DisplayMode::format
Uint32 format
Definition: SDL_video.h:55
a
GLboolean GLboolean GLboolean GLboolean a
Definition: SDL_opengl_glext.h:1109
b
GLboolean GLboolean GLboolean b
Definition: SDL_opengl_glext.h:1109
SDL_BITSPERPIXEL
#define SDL_BITSPERPIXEL(X)
Definition: SDL_pixels.h:126

static SDL_INLINE SDL_bool isAtLeastGL3 | ( | const char * | verstr | ) |

static

Definition at line 2650 of file SDL_video.c.

References SDL_atoi.

Referenced by SDL_GL_ExtensionSupported(), and SDL_GL_GetAttribute().

{
return (verstr && (SDL_atoi(verstr) >= 3));
}
SDL_atoi
#define SDL_atoi
Definition: SDL_dynapi_overrides.h:416

int SDL_AddBasicVideoDisplay | ( | const SDL_DisplayMode * | desktop_mode | ) |

Definition at line 579 of file SDL_video.c.

References SDL_VideoDisplay::current_mode, SDL_VideoDisplay::desktop_mode, SDL_AddVideoDisplay(), and SDL_zero.

{
SDL_VideoDisplay display;
SDL_zero(display);
if (desktop_mode) {
display.desktop_mode = *desktop_mode;
}
display.current_mode = display.desktop_mode;
return SDL_AddVideoDisplay(&display);
}
SDL_VideoDisplay::current_mode
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:127
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_AddVideoDisplay
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
Definition: SDL_video.c:593
SDL_VideoDisplay::desktop_mode
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:126

SDL_bool SDL_AddDisplayMode | ( | SDL_VideoDisplay * | display,
|  | const SDL_DisplayMode * | mode
| ) |  |

Definition at line 709 of file SDL_video.c.

References cmpmodes(), SDL_VideoDisplay::display_modes, i, SDL_VideoDisplay::max_display_modes, SDL_VideoDisplay::num_display_modes, SDL_FALSE, SDL_qsort, SDL_realloc, and SDL_TRUE.

{
SDL_DisplayMode *modes;
int i, nmodes;
/* Make sure we don't already have the mode in the list */
modes = display->display_modes;
nmodes = display->num_display_modes;
for (i = 0; i < nmodes; ++i) {
if (cmpmodes(mode, &modes[i]) == 0) {
return SDL_FALSE;
}
}
/* Go ahead and add the new mode */
if (nmodes == display->max_display_modes) {
modes =
SDL_realloc(modes,
(display->max_display_modes + 32) * sizeof(*modes));
if (!modes) {
return SDL_FALSE;
}
display->display_modes = modes;
display->max_display_modes += 32;
}
modes[nmodes] = *mode;
display->num_display_modes++;
/* Re-sort video modes */
SDL_qsort(display->display_modes, display->num_display_modes,
sizeof(SDL_DisplayMode), cmpmodes);
return SDL_TRUE;
}
SDL_qsort
#define SDL_qsort
Definition: SDL_dynapi_overrides.h:386
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_realloc
#define SDL_realloc
Definition: SDL_dynapi_overrides.h:382
SDL_VideoDisplay::num_display_modes
int num_display_modes
Definition: SDL_sysvideo.h:124
cmpmodes
static int cmpmodes(const void *A, const void *B)
Definition: SDL_video.c:398
SDL_VideoDisplay::display_modes
SDL_DisplayMode * display_modes
Definition: SDL_sysvideo.h:125
mode
GLenum mode
Definition: SDL_opengl_glext.h:1122
SDL_TRUE
Definition: SDL_stdinc.h:129
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 in i)
Definition: SDL_x11sym.h:42
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_VideoDisplay::max_display_modes
int max_display_modes
Definition: SDL_sysvideo.h:123

int SDL_AddVideoDisplay | ( | const SDL_VideoDisplay * | display | ) |

Definition at line 593 of file SDL_video.c.

References _this, SDL_VideoDisplay::device, SDL_VideoDevice::displays, SDL_VideoDisplay::name, SDL_VideoDevice::num_displays, SDL_itoa, SDL_OutOfMemory, SDL_realloc, and SDL_strdup.

Referenced by SDL_AddBasicVideoDisplay().

{
SDL_VideoDisplay *displays;
int index = -1;
displays =
SDL_realloc(_this->displays,
(_this->num_displays + 1) * sizeof(*displays));
if (displays) {
index = _this->num_displays++;
displays[index] = *display;
displays[index].device = _this;
_this->displays = displays;
if (display->name) {
displays[index].name = SDL_strdup(display->name);
} else {
char name[32];
SDL_itoa(index, name, 10);
displays[index].name = SDL_strdup(name);
}
} else {
SDL_OutOfMemory();
}
return index;
}
SDL_VideoDisplay::name
char * name
Definition: SDL_sysvideo.h:122
SDL_itoa
#define SDL_itoa
Definition: SDL_dynapi_overrides.h:410
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_realloc
#define SDL_realloc
Definition: SDL_dynapi_overrides.h:382
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDisplay::device
SDL_VideoDevice * device
Definition: SDL_sysvideo.h:131
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
index
GLuint index
Definition: SDL_opengl_glext.h:660
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_strdup
#define SDL_strdup
Definition: SDL_dynapi_overrides.h:403

float SDL_ComputeDiagonalDPI | ( | int | hpix,
|  | int | vpix,
|  | float | hinches,
|  | float | vinches
| ) |  |

Definition at line 3649 of file SDL_video.c.

References SDL_sqrt.

{
float den2 = hinches * hinches + vinches * vinches;
if ( den2 <= 0.0f ) {
return 0.0f;
}
return (float)(SDL_sqrt((double)hpix * (double)hpix + (double)vpix * (double)vpix) /
SDL_sqrt((double)den2));
}
f
GLfloat f
Definition: SDL_opengl_glext.h:1870
SDL_sqrt
#define SDL_sqrt
Definition: SDL_dynapi_overrides.h:443

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.

Parameters

  title | The title of the window, in UTF-8 encoding.
  x | The x position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED.
  y | The y position of the window, SDL_WINDOWPOS_CENTERED, or SDL_WINDOWPOS_UNDEFINED.
  w | The width of the window, in screen coordinates.
  h | The height of the window, in screen coordinates.
  flags | The flags for the window, a mask of any of the following: SDL_WINDOW_FULLSCREEN, SDL_WINDOW_OPENGL, SDL_WINDOW_HIDDEN, SDL_WINDOW_BORDERLESS, SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_MINIMIZED, SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_ALLOW_HIGHDPI.

Returns
  The id of the window created, or zero if window creation failed.

If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size in pixels may differ from its size in screen coordinates on platforms with high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query the client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() to query the drawable size in pixels.

See also
  SDL_DestroyWindow()

Definition at line 1316 of file SDL_video.c.

References SDL_Window::brightness, CREATE_FLAGS, SDL_VideoDevice::CreateWindow, SDL_Window::flags, FULLSCREEN_VISIBLE, SDL_VideoDevice::GL_CreateContext, SDL_Rect::h, SDL_Window::h, SDL_Window::id, SDL_Window::is_destroying, SDL_Window::last_fullscreen_flags, SDL_Window::magic, SDL_Window::next, SDL_VideoDevice::next_object_id, NULL, SDL_Window::prev, SDL_atoi, SDL_calloc(), SDL_DestroyWindow(), SDL_FALSE, SDL_FinishWindowCreation(), SDL_GetDisplayBounds(), SDL_GetDisplayForWindow(), SDL_GetHint, SDL_GetIndexOfDisplay(), SDL_GL_LoadLibrary(), SDL_HINT_VIDEO_HIGHDPI_DISABLED, SDL_OutOfMemory, SDL_SetError, SDL_SetWindowTitle(), SDL_UpdateFullscreenMode(), SDL_VideoInit(), SDL_WINDOW_ALLOW_HIGHDPI, SDL_WINDOW_HIDDEN, SDL_WINDOW_OPENGL, SDL_WINDOWPOS_ISCENTERED, SDL_WINDOWPOS_ISUNDEFINED, SDL_Rect::w, SDL_Window::w, window, SDL_VideoDevice::window_magic, SDL_VideoDevice::windows, SDL_Rect::x, SDL_Window::x, SDL_Rect::y, and SDL_Window::y.

Referenced by ShouldUseTextureFramebuffer().

{
SDL_Window *window;
const char *hint;
if (!_this) {
/* Initialize the video system if needed */
if (SDL_VideoInit(NULL) < 0) {
return NULL;
}
}
/* Some platforms can't create zero-sized windows */
if (w < 1) {
w = 1;
}
if (h < 1) {
h = 1;
}
/* Some platforms blow up if the windows are too large. Raise it later? */
if ((w > 16384) || (h > 16384)) {
SDL_SetError("Window is too large.");
return NULL;
}
/* Some platforms have OpenGL enabled by default */
#if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ || __NACL__
flags |= SDL_WINDOW_OPENGL;
#endif
if (flags & SDL_WINDOW_OPENGL) {
if (!_this->GL_CreateContext) {
SDL_SetError("No OpenGL support in video driver");
return NULL;
}
if (SDL_GL_LoadLibrary(NULL) < 0) {
return NULL;
}
}
/* Unless the user has specified the high-DPI disabling hint, respect the
* SDL_WINDOW_ALLOW_HIGHDPI flag.
*/
if (flags & SDL_WINDOW_ALLOW_HIGHDPI) {
hint = SDL_GetHint(SDL_HINT_VIDEO_HIGHDPI_DISABLED);
if (hint && SDL_atoi(hint) > 0) {
flags &= ~SDL_WINDOW_ALLOW_HIGHDPI;
}
}
window = (SDL_Window *)SDL_calloc(1, sizeof(*window));
if (!window) {
SDL_OutOfMemory();
return NULL;
}
window->magic = &_this->window_magic;
window->id = _this->next_object_id++;
window->x = x;
window->y = y;
window->w = w;
window->h = h;
if (SDL_WINDOWPOS_ISUNDEFINED(x) || SDL_WINDOWPOS_ISUNDEFINED(y) ||
SDL_WINDOWPOS_ISCENTERED(x) || SDL_WINDOWPOS_ISCENTERED(y)) {
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
int displayIndex;
SDL_Rect bounds;
displayIndex = SDL_GetIndexOfDisplay(display);
SDL_GetDisplayBounds(displayIndex, &bounds);
if (SDL_WINDOWPOS_ISUNDEFINED(x) || SDL_WINDOWPOS_ISCENTERED(x)) {
window->x = bounds.x + (bounds.w - w) / 2;
}
if (SDL_WINDOWPOS_ISUNDEFINED(y) || SDL_WINDOWPOS_ISCENTERED(y)) {
window->y = bounds.y + (bounds.h - h) / 2;
}
}
window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN);
window->last_fullscreen_flags = window->flags;
window->brightness = 1.0f;
window->next = _this->windows;
window->is_destroying = SDL_FALSE;
if (_this->windows) {
_this->windows->prev = window;
}
_this->windows = window;
if (_this->CreateWindow && _this->CreateWindow(_this, window) < 0) {
SDL_DestroyWindow(window);
return NULL;
}
#if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
/* HACK: WinRT 8.x apps can't choose whether or not they are fullscreen
or not. The user can choose this, via OS-provided UI, but this can't
be set programmatically.
Just look at what SDL's WinRT video backend code detected with regards
to fullscreen (being active, or not), and figure out a return/error code
from that.
*/
flags = window->flags;
#endif
if (title) {
SDL_SetWindowTitle(window, title);
}
SDL_FinishWindowCreation(window, flags);
/* If the window was created fullscreen, make sure the mode code matches */
SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window));
return window;
}
SDL_WINDOWPOS_ISUNDEFINED
#define SDL_WINDOWPOS_ISUNDEFINED(X)
Definition: SDL_video.h:121
SDL_Window::next
SDL_Window * next
Definition: SDL_sysvideo.h:109
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
FULLSCREEN_VISIBLE
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:111
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
SDL_Window::x
int x
Definition: SDL_sysvideo.h:77
SDL_Window::magic
const void * magic
Definition: SDL_sysvideo.h:73
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_HINT_VIDEO_HIGHDPI_DISABLED
#define SDL_HINT_VIDEO_HIGHDPI_DISABLED
If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
Definition: SDL_hints.h:379
SDL_GL_LoadLibrary
int SDL_GL_LoadLibrary(const char *path)
Dynamically load an OpenGL library.
Definition: SDL_video.c:2582
SDL_SetWindowTitle
void SDL_SetWindowTitle(SDL_Window *window, const char *title)
Set the title of a window, in UTF-8 format.
Definition: SDL_video.c:1579
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_WINDOWPOS_ISCENTERED
#define SDL_WINDOWPOS_ISCENTERED(X)
Definition: SDL_video.h:130
SDL_Window::is_destroying
SDL_bool is_destroying
Definition: SDL_sysvideo.h:97
SDL_WINDOW_HIDDEN
Definition: SDL_video.h:101
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
CREATE_FLAGS
#define CREATE_FLAGS
Definition: SDL_video.c:1287
SDL_calloc
void * SDL_calloc(size_t nmemb, size_t size)
SDL_GetDisplayForWindow
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:1039
SDL_VideoDevice::GL_CreateContext
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:237
y
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1567
SDL_DestroyWindow
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
Definition: SDL_video.c:2419
SDL_WINDOW_ALLOW_HIGHDPI
Definition: SDL_video.h:111
SDL_Window::y
int y
Definition: SDL_sysvideo.h:77
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
SDL_GetDisplayBounds
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0...
Definition: SDL_video.c:663
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_atoi
#define SDL_atoi
Definition: SDL_dynapi_overrides.h:416
SDL_VideoDevice::window_magic
Uint8 window_magic
Definition: SDL_sysvideo.h:283
SDL_Window::brightness
float brightness
Definition: SDL_sysvideo.h:89
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_Window::last_fullscreen_flags
Uint32 last_fullscreen_flags
Definition: SDL_sysvideo.h:82
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_Window::prev
SDL_Window * prev
Definition: SDL_sysvideo.h:108
SDL_VideoInit
int SDL_VideoInit(const char *driver_name)
Initialize the video subsystem, optionally specifying a video driver.
Definition: SDL_video.c:443
SDL_Rect::h
int h
Definition: SDL_rect.h:67
SDL_VideoDevice::CreateWindow
int(* CreateWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:195
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_FinishWindowCreation
static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
Definition: SDL_video.c:1291
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:74
flags
GLbitfield flags
Definition: SDL_opengl_glext.h:1480
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
w
GLubyte GLubyte GLubyte GLubyte w
Definition: SDL_opengl_glext.h:731
SDL_GetIndexOfDisplay
static int SDL_GetIndexOfDisplay(SDL_VideoDisplay *display)
Definition: SDL_video.c:632
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_VideoDevice::next_object_id
Uint32 next_object_id
Definition: SDL_sysvideo.h:284
SDL_Rect::y
int y
Definition: SDL_rect.h:66
h
GLfloat GLfloat GLfloat GLfloat h
Definition: SDL_opengl_glext.h:1946
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64

static SDL_Surface* SDL_CreateWindowFramebuffer | ( | SDL_Window * | window | ) |

static

Definition at line 2054 of file SDL_video.c.

References SDL_VideoDevice::CreateWindowFramebuffer, SDL_Window::h, NULL, SDL_CreateRGBSurfaceFrom, SDL_PixelFormatEnumToMasks, SDL_VideoDevice::UpdateWindowFramebuffer, and SDL_Window::w.

Referenced by SDL_GetWindowSurface().

{
Uint32 format;
void *pixels;
int pitch;
int bpp;
Uint32 Rmask, Gmask, Bmask, Amask;
if (!_this->CreateWindowFramebuffer || !_this->UpdateWindowFramebuffer) {
return NULL;
}
if (_this->CreateWindowFramebuffer(_this, window, &format, &pixels, &pitch) < 0) {
return NULL;
}
if (!SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
return NULL;
}
return SDL_CreateRGBSurfaceFrom(pixels, window->w, window->h, bpp, pitch, Rmask, Gmask, Bmask, Amask);
}
format
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
pixels
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1565
SDL_CreateRGBSurfaceFrom
#define SDL_CreateRGBSurfaceFrom
Definition: SDL_dynapi_overrides.h:449
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_PixelFormatEnumToMasks
#define SDL_PixelFormatEnumToMasks
Definition: SDL_dynapi_overrides.h:284
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
NULL
#define NULL
Definition: begin_code.h:143
SDL_VideoDevice::UpdateWindowFramebuffer
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
Definition: SDL_sysvideo.h:216
SDL_VideoDevice::CreateWindowFramebuffer
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
Definition: SDL_sysvideo.h:215

SDL_Window* SDL_CreateWindowFrom | ( | const void * | data | ) |

Create an SDL window from an existing native window.

Parameters

  data | A pointer to driver-dependent window creation data

Returns
  The id of the window created, or zero if window creation failed.

See also
  SDL_DestroyWindow()

Definition at line 1432 of file SDL_video.c.

References SDL_Window::brightness, SDL_VideoDevice::CreateWindowFrom, SDL_Window::flags, SDL_Window::id, SDL_Window::is_destroying, SDL_Window::last_fullscreen_flags, SDL_Window::magic, SDL_Window::next, SDL_VideoDevice::next_object_id, NULL, SDL_Window::prev, SDL_calloc(), SDL_DestroyWindow(), SDL_FALSE, SDL_OutOfMemory, SDL_UninitializedVideo(), SDL_Unsupported, SDL_WINDOW_FOREIGN, window, SDL_VideoDevice::window_magic, and SDL_VideoDevice::windows.

{
SDL_Window *window;
if (!_this) {
SDL_UninitializedVideo();
return NULL;
}
if (!_this->CreateWindowFrom) {
SDL_Unsupported();
return NULL;
}
window = (SDL_Window *)SDL_calloc(1, sizeof(*window));
if (!window) {
SDL_OutOfMemory();
return NULL;
}
window->magic = &_this->window_magic;
window->id = _this->next_object_id++;
window->flags = SDL_WINDOW_FOREIGN;
window->last_fullscreen_flags = window->flags;
window->is_destroying = SDL_FALSE;
window->brightness = 1.0f;
window->next = _this->windows;
if (_this->windows) {
_this->windows->prev = window;
}
_this->windows = window;
if (_this->CreateWindowFrom(_this, window, data) < 0) {
SDL_DestroyWindow(window);
return NULL;
}
return window;
}
SDL_Window::next
SDL_Window * next
Definition: SDL_sysvideo.h:109
SDL_Window::magic
const void * magic
Definition: SDL_sysvideo.h:73
SDL_VideoDevice::CreateWindowFrom
int(* CreateWindowFrom)(_THIS, SDL_Window *window, const void *data)
Definition: SDL_sysvideo.h:196
window
SDL_Window * window
Definition: testautomation_render.c:26
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_Window::is_destroying
SDL_bool is_destroying
Definition: SDL_sysvideo.h:97
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_calloc
void * SDL_calloc(size_t nmemb, size_t size)
SDL_DestroyWindow
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
Definition: SDL_video.c:2419
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
SDL_VideoDevice::window_magic
Uint8 window_magic
Definition: SDL_sysvideo.h:283
SDL_Window::brightness
float brightness
Definition: SDL_sysvideo.h:89
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_Window::last_fullscreen_flags
Uint32 last_fullscreen_flags
Definition: SDL_sysvideo.h:82
SDL_Window::prev
SDL_Window * prev
Definition: SDL_sysvideo.h:108
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:74
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419
SDL_WINDOW_FOREIGN
Definition: SDL_video.h:110
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_VideoDevice::next_object_id
Uint32 next_object_id
Definition: SDL_sysvideo.h:284
SDL_Unsupported
#define SDL_Unsupported()
Definition: SDL_error.h:53

static int SDL_CreateWindowTexture | ( | SDL_VideoDevice * | unused,
|  | SDL_Window * | window,
|  | Uint32 * | format,
|  | void ** | pixels,
|  | int * | pitch
| ) |  |

static

Definition at line 245 of file SDL_video.c.

References SDL_WindowTextureData::bytes_per_pixel, SDL_Window::h, i, SDL_RendererInfo::name, NULL, SDL_RendererInfo::num_texture_formats, SDL_WindowTextureData::pitch, SDL_WindowTextureData::pixels, renderer, SDL_WindowTextureData::renderer, SDL_BYTESPERPIXEL, SDL_calloc(), SDL_CreateRenderer, SDL_CreateTexture, SDL_DestroyRenderer, SDL_DestroyTexture, SDL_free(), SDL_GetHint, SDL_GetNumRenderDrivers, SDL_GetRenderDriverInfo, SDL_GetRendererInfo, SDL_GetWindowData(), SDL_HINT_FRAMEBUFFER_ACCELERATION, SDL_ISPIXELFORMAT_ALPHA, SDL_ISPIXELFORMAT_FOURCC, SDL_malloc, SDL_OutOfMemory, SDL_RenderSetViewport, SDL_SetError, SDL_SetWindowData(), SDL_strcasecmp, SDL_strcmp, SDL_TEXTUREACCESS_STREAMING, SDL_WINDOWTEXTUREDATA, SDL_WindowTextureData::texture, SDL_RendererInfo::texture_formats, and SDL_Window::w.

Referenced by SDL_VideoInit().

{
SDL_WindowTextureData *data;
data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA);
if (!data) {
SDL_Renderer *renderer = NULL;
int i;
const char *hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION);
/* Check to see if there's a specific driver requested */
if (hint && *hint != '0' && *hint != '1' &&
SDL_strcasecmp(hint, "software") != 0) {
for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) {
SDL_RendererInfo info;
SDL_GetRenderDriverInfo(i, &info);
if (SDL_strcasecmp(info.name, hint) == 0) {
renderer = SDL_CreateRenderer(window, i, 0);
break;
}
}
}
if (!renderer) {
for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) {
SDL_RendererInfo info;
SDL_GetRenderDriverInfo(i, &info);
if (SDL_strcmp(info.name, "software") != 0) {
renderer = SDL_CreateRenderer(window, i, 0);
if (renderer) {
break;
}
}
}
}
if (!renderer) {
return SDL_SetError("No hardware accelerated renderers available");
}
/* Create the data after we successfully create the renderer (bug #1116) */
data = (SDL_WindowTextureData *)SDL_calloc(1, sizeof(*data));
if (!data) {
SDL_DestroyRenderer(renderer);
return SDL_OutOfMemory();
}
SDL_SetWindowData(window, SDL_WINDOWTEXTUREDATA, data);
data->renderer = renderer;
}
/* Free any old texture and pixel data */
if (data->texture) {
SDL_DestroyTexture(data->texture);
data->texture = NULL;
}
SDL_free(data->pixels);
data->pixels = NULL;
{
SDL_RendererInfo info;
Uint32 i;
if (SDL_GetRendererInfo(data->renderer, &info) < 0) {
return -1;
}
/* Find the first format without an alpha channel */
*format = info.texture_formats[0];
for (i = 0; i < info.num_texture_formats; ++i) {
if (!SDL_ISPIXELFORMAT_FOURCC(info.texture_formats[i]) &&
!SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) {
*format = info.texture_formats[i];
break;
}
}
}
data->texture = SDL_CreateTexture(data->renderer, *format,
SDL_TEXTUREACCESS_STREAMING,
window->w, window->h);
if (!data->texture) {
return -1;
}
/* Create framebuffer data */
data->bytes_per_pixel = SDL_BYTESPERPIXEL(*format);
data->pitch = (((window->w * data->bytes_per_pixel) + 3) & ~3);
data->pixels = SDL_malloc(window->h * data->pitch);
if (!data->pixels) {
return SDL_OutOfMemory();
}
*pixels = data->pixels;
*pitch = data->pitch;
/* Make sure we're not double-scaling the viewport */
SDL_RenderSetViewport(data->renderer, NULL);
return 0;
}
SDL_CreateTexture
#define SDL_CreateTexture
Definition: SDL_dynapi_overrides.h:312
SDL_RenderSetViewport
#define SDL_RenderSetViewport
Definition: SDL_dynapi_overrides.h:330
SDL_GetWindowData
void * SDL_GetWindowData(SDL_Window *window, const char *name)
Retrieve the data pointer associated with a window.
Definition: SDL_video.c:1673
format
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1565
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_WindowTextureData::bytes_per_pixel
int bytes_per_pixel
Definition: SDL_video.c:156
SDL_WindowTextureData::texture
SDL_Texture * texture
Definition: SDL_video.c:153
SDL_GetNumRenderDrivers
#define SDL_GetNumRenderDrivers
Definition: SDL_dynapi_overrides.h:304
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_RendererInfo::texture_formats
Uint32 texture_formats[16]
Definition: SDL_render.h:83
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_Renderer
Definition: SDL_sysrender.h:76
SDL_BYTESPERPIXEL
#define SDL_BYTESPERPIXEL(X)
Definition: SDL_pixels.h:127
pixels
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Definition: SDL_opengl.h:1565
SDL_ISPIXELFORMAT_ALPHA
#define SDL_ISPIXELFORMAT_ALPHA(format)
Definition: SDL_pixels.h:153
SDL_strcasecmp
#define SDL_strcasecmp
Definition: SDL_dynapi_overrides.h:425
SDL_RendererInfo::name
const char * name
Definition: SDL_render.h:80
SDL_GetRenderDriverInfo
#define SDL_GetRenderDriverInfo
Definition: SDL_dynapi_overrides.h:305
renderer
SDL_Renderer * renderer
Definition: testautomation_render.c:27
SDL_calloc
void * SDL_calloc(size_t nmemb, size_t size)
SDL_SetWindowData
void * SDL_SetWindowData(SDL_Window *window, const char *name, void *userdata)
Associate an arbitrary named pointer with a window.
Definition: SDL_video.c:1626
SDL_WINDOWTEXTUREDATA
#define SDL_WINDOWTEXTUREDATA
Definition: SDL_video.c:149
SDL_free
void SDL_free(void *mem)
SDL_TEXTUREACCESS_STREAMING
Definition: SDL_render.h:94
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
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 in i)
Definition: SDL_x11sym.h:42
NULL
#define NULL
Definition: begin_code.h:143
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_RendererInfo
Information on the capabilities of a render driver or context.
Definition: SDL_render.h:78
SDL_WindowTextureData
Definition: SDL_video.c:151
SDL_DestroyTexture
#define SDL_DestroyTexture
Definition: SDL_dynapi_overrides.h:353
SDL_WindowTextureData::renderer
SDL_Renderer * renderer
Definition: SDL_video.c:152
SDL_HINT_FRAMEBUFFER_ACCELERATION
#define SDL_HINT_FRAMEBUFFER_ACCELERATION
A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
Definition: SDL_hints.h:65
SDL_WindowTextureData::pitch
int pitch
Definition: SDL_video.c:155
SDL_RendererInfo::num_texture_formats
Uint32 num_texture_formats
Definition: SDL_render.h:82
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380
SDL_DestroyRenderer
#define SDL_DestroyRenderer
Definition: SDL_dynapi_overrides.h:354
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423
SDL_ISPIXELFORMAT_FOURCC
#define SDL_ISPIXELFORMAT_FOURCC(format)
Definition: SDL_pixels.h:166
SDL_WindowTextureData::pixels
void * pixels
Definition: SDL_video.c:154
SDL_CreateRenderer
#define SDL_CreateRenderer
Definition: SDL_dynapi_overrides.h:307
SDL_GetRendererInfo
#define SDL_GetRendererInfo
Definition: SDL_dynapi_overrides.h:310

void SDL_DestroyWindow | ( | SDL_Window * | window | ) |

Destroy a window.

Definition at line 2419 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDevice::current_glwin, SDL_Window::data, SDL_VideoDevice::DestroyWindow, SDL_VideoDevice::DestroyWindowFramebuffer, SDL_Surface::flags, SDL_Window::flags, SDL_VideoDisplay::fullscreen_window, SDL_Window::gamma, SDL_Window::icon, SDL_Window::is_destroying, SDL_Window::magic, SDL_WindowUserData::name, SDL_WindowUserData::next, SDL_Window::next, NULL, SDL_Window::prev, SDL_DONTFREE, SDL_free(), SDL_FreeSurface, SDL_GetDisplayForWindow(), SDL_GetKeyboardFocus, SDL_GetMouseFocus, SDL_GL_MakeCurrent(), SDL_GL_UnloadLibrary(), SDL_HideWindow(), SDL_SetKeyboardFocus(), SDL_SetMouseFocus(), SDL_TRUE, SDL_WINDOW_OPENGL, SDL_Window::surface, SDL_Window::title, and SDL_VideoDevice::windows.

Referenced by SDL_CreateWindow(), SDL_CreateWindowFrom(), SDL_VideoQuit(), and ShouldUseTextureFramebuffer().

{
SDL_VideoDisplay *display;
CHECK_WINDOW_MAGIC(window,);
window->is_destroying = SDL_TRUE;
/* Restore video mode, etc. */
SDL_HideWindow(window);
/* Make sure this window no longer has focus */
if (SDL_GetKeyboardFocus() == window) {
SDL_SetKeyboardFocus(NULL);
}
if (SDL_GetMouseFocus() == window) {
SDL_SetMouseFocus(NULL);
}
/* make no context current if this is the current context window. */
if (window->flags & SDL_WINDOW_OPENGL) {
if (_this->current_glwin == window) {
SDL_GL_MakeCurrent(window, NULL);
}
}
if (window->surface) {
window->surface->flags &= ~SDL_DONTFREE;
SDL_FreeSurface(window->surface);
}
if (_this->DestroyWindowFramebuffer) {
_this->DestroyWindowFramebuffer(_this, window);
}
if (_this->DestroyWindow) {
_this->DestroyWindow(_this, window);
}
if (window->flags & SDL_WINDOW_OPENGL) {
SDL_GL_UnloadLibrary();
}
display = SDL_GetDisplayForWindow(window);
if (display->fullscreen_window == window) {
display->fullscreen_window = NULL;
}
/* Now invalidate magic */
window->magic = NULL;
/* Free memory associated with the window */
SDL_free(window->title);
SDL_FreeSurface(window->icon);
SDL_free(window->gamma);
while (window->data) {
SDL_WindowUserData *data = window->data;
window->data = data->next;
SDL_free(data->name);
SDL_free(data);
}
/* Unlink the window from the list */
if (window->next) {
window->next->prev = window->prev;
}
if (window->prev) {
window->prev->next = window->next;
} else {
_this->windows = window->next;
}
SDL_free(window);
}
SDL_Window::next
SDL_Window * next
Definition: SDL_sysvideo.h:109
SDL_WindowUserData
Definition: SDL_sysvideo.h:63
SDL_SetKeyboardFocus
void SDL_SetKeyboardFocus(SDL_Window *window)
Definition: SDL_keyboard.c:612
SDL_Window::magic
const void * magic
Definition: SDL_sysvideo.h:73
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_DONTFREE
#define SDL_DONTFREE
Definition: SDL_surface.h:55
SDL_Window::is_destroying
SDL_bool is_destroying
Definition: SDL_sysvideo.h:97
SDL_SetMouseFocus
void SDL_SetMouseFocus(SDL_Window *window)
Definition: SDL_mouse.c:103
SDL_HideWindow
void SDL_HideWindow(SDL_Window *window)
Hide a window.
Definition: SDL_video.c:1950
SDL_GetKeyboardFocus
#define SDL_GetKeyboardFocus
Definition: SDL_dynapi_overrides.h:222
SDL_Surface::flags
Uint32 flags
Definition: SDL_surface.h:71
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_WindowUserData::next
struct SDL_WindowUserData * next
Definition: SDL_sysvideo.h:67
SDL_GetDisplayForWindow
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:1039
SDL_FreeSurface
#define SDL_FreeSurface
Definition: SDL_dynapi_overrides.h:450
SDL_WindowUserData::name
char * name
Definition: SDL_sysvideo.h:65
SDL_free
void SDL_free(void *mem)
SDL_GL_MakeCurrent
int SDL_GL_MakeCurrent(SDL_Window *window, SDL_GLContext ctx)
Set up an OpenGL context for rendering into an OpenGL window.
Definition: SDL_video.c:3158
SDL_GL_UnloadLibrary
void SDL_GL_UnloadLibrary(void)
Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
Definition: SDL_video.c:2633
SDL_VideoDevice::DestroyWindow
void(* DestroyWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:214
SDL_Window::title
char * title
Definition: SDL_sysvideo.h:75
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_VideoDisplay::fullscreen_window
SDL_Window * fullscreen_window
Definition: SDL_sysvideo.h:129
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_VideoDevice::DestroyWindowFramebuffer
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:217
NULL
#define NULL
Definition: begin_code.h:143
SDL_GetMouseFocus
#define SDL_GetMouseFocus
Definition: SDL_dynapi_overrides.h:251
SDL_Window::icon
SDL_Surface * icon
Definition: SDL_sysvideo.h:76
SDL_Window::prev
SDL_Window * prev
Definition: SDL_sysvideo.h:108
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
SDL_Window::gamma
Uint16 * gamma
Definition: SDL_sysvideo.h:90
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_Window::surface
SDL_Surface * surface
Definition: SDL_sysvideo.h:93
SDL_VideoDevice::current_glwin
SDL_Window * current_glwin
Definition: SDL_sysvideo.h:325
SDL_Window::data
SDL_WindowUserData * data
Definition: SDL_sysvideo.h:104

static void SDL_DestroyWindowTexture | ( | SDL_VideoDevice * | unused,
|  | SDL_Window * | window
| ) |  |

static

Definition at line 378 of file SDL_video.c.

References NULL, SDL_WindowTextureData::pixels, SDL_WindowTextureData::renderer, SDL_DestroyRenderer, SDL_DestroyTexture, SDL_free(), SDL_SetWindowData(), SDL_WINDOWTEXTUREDATA, and SDL_WindowTextureData::texture.

Referenced by SDL_VideoInit().

{
SDL_WindowTextureData *data;
data = SDL_SetWindowData(window, SDL_WINDOWTEXTUREDATA, NULL);
if (!data) {
return;
}
if (data->texture) {
SDL_DestroyTexture(data->texture);
}
if (data->renderer) {
SDL_DestroyRenderer(data->renderer);
}
SDL_free(data->pixels);
SDL_free(data);
}
SDL_WindowTextureData::texture
SDL_Texture * texture
Definition: SDL_video.c:153
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_SetWindowData
void * SDL_SetWindowData(SDL_Window *window, const char *name, void *userdata)
Associate an arbitrary named pointer with a window.
Definition: SDL_video.c:1626
SDL_WINDOWTEXTUREDATA
#define SDL_WINDOWTEXTUREDATA
Definition: SDL_video.c:149
SDL_free
void SDL_free(void *mem)
NULL
#define NULL
Definition: begin_code.h:143
SDL_WindowTextureData
Definition: SDL_video.c:151
SDL_DestroyTexture
#define SDL_DestroyTexture
Definition: SDL_dynapi_overrides.h:353
SDL_WindowTextureData::renderer
SDL_Renderer * renderer
Definition: SDL_video.c:152
SDL_DestroyRenderer
#define SDL_DestroyRenderer
Definition: SDL_dynapi_overrides.h:354
SDL_WindowTextureData::pixels
void * pixels
Definition: SDL_video.c:154

void SDL_DisableScreenSaver | ( | void |  | ) |

Prevent the screen from being blanked by a screensaver.

See also
  SDL_IsScreenSaverEnabled()
  SDL_EnableScreenSaver()

Definition at line 2517 of file SDL_video.c.

References SDL_TRUE, SDL_VideoDevice::suspend_screensaver, and SDL_VideoDevice::SuspendScreenSaver.

Referenced by SDL_VideoInit().

{
if (!_this) {
return;
}
if (_this->suspend_screensaver) {
return;
}
_this->suspend_screensaver = SDL_TRUE;
if (_this->SuspendScreenSaver) {
_this->SuspendScreenSaver(_this);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_VideoDevice::suspend_screensaver
SDL_bool suspend_screensaver
Definition: SDL_sysvideo.h:278
SDL_VideoDevice::SuspendScreenSaver
void(* SuspendScreenSaver)(_THIS)
Definition: SDL_sysvideo.h:252

void SDL_EnableScreenSaver | ( | void |  | ) |

Allow the screen to be blanked by a screensaver.

See also
  SDL_IsScreenSaverEnabled()
  SDL_DisableScreenSaver()

Definition at line 2502 of file SDL_video.c.

References SDL_FALSE, SDL_VideoDevice::suspend_screensaver, and SDL_VideoDevice::SuspendScreenSaver.

Referenced by SDL_VideoQuit().

{
if (!_this) {
return;
}
if (!_this->suspend_screensaver) {
return;
}
_this->suspend_screensaver = SDL_FALSE;
if (_this->SuspendScreenSaver) {
_this->SuspendScreenSaver(_this);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_VideoDevice::suspend_screensaver
SDL_bool suspend_screensaver
Definition: SDL_sysvideo.h:278
SDL_VideoDevice::SuspendScreenSaver
void(* SuspendScreenSaver)(_THIS)
Definition: SDL_sysvideo.h:252

static void SDL_FinishWindowCreation | ( | SDL_Window * | window,
|  | Uint32 | flags
| ) |  |

static

Definition at line 1291 of file SDL_video.c.

References SDL_Rect::h, SDL_Window::h, SDL_MaximizeWindow(), SDL_MinimizeWindow(), SDL_SetWindowFullscreen(), SDL_SetWindowGrab(), SDL_ShowWindow(), SDL_TRUE, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_HIDDEN, SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_MINIMIZED, SDL_Rect::w, SDL_Window::w, SDL_Window::windowed, SDL_Rect::x, SDL_Window::x, SDL_Rect::y, and SDL_Window::y.

Referenced by SDL_CreateWindow(), and SDL_RecreateWindow().

{
window->windowed.x = window->x;
window->windowed.y = window->y;
window->windowed.w = window->w;
window->windowed.h = window->h;
if (flags & SDL_WINDOW_MAXIMIZED) {
SDL_MaximizeWindow(window);
}
if (flags & SDL_WINDOW_MINIMIZED) {
SDL_MinimizeWindow(window);
}
if (flags & SDL_WINDOW_FULLSCREEN) {
SDL_SetWindowFullscreen(window, flags);
}
if (flags & SDL_WINDOW_INPUT_GRABBED) {
SDL_SetWindowGrab(window, SDL_TRUE);
}
if (!(flags & SDL_WINDOW_HIDDEN)) {
SDL_ShowWindow(window);
}
}
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_Window::x
int x
Definition: SDL_sysvideo.h:77
SDL_ShowWindow
void SDL_ShowWindow(SDL_Window *window)
Show a window.
Definition: SDL_video.c:1935
SDL_SetWindowGrab
void SDL_SetWindowGrab(SDL_Window *window, SDL_bool grabbed)
Set a window&#39;s input grab mode.
Definition: SDL_video.c:2258
SDL_WINDOW_HIDDEN
Definition: SDL_video.h:101
SDL_Window::windowed
SDL_Rect windowed
Definition: SDL_sysvideo.h:85
SDL_MinimizeWindow
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
Definition: SDL_video.c:1998
SDL_WINDOW_MINIMIZED
Definition: SDL_video.h:104
SDL_Window::y
int y
Definition: SDL_sysvideo.h:77
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_MaximizeWindow
void SDL_MaximizeWindow(SDL_Window *window)
Make a window as large as possible.
Definition: SDL_video.c:1982
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_Rect::h
int h
Definition: SDL_rect.h:67
SDL_WINDOW_MAXIMIZED
Definition: SDL_video.h:105
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
flags
GLbitfield flags
Definition: SDL_opengl_glext.h:1480
SDL_Rect::y
int y
Definition: SDL_rect.h:66
SDL_WINDOW_INPUT_GRABBED
Definition: SDL_video.h:106
SDL_SetWindowFullscreen
int SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags)
Set a window&#39;s fullscreen state.
Definition: SDL_video.c:2028

SDL_DisplayMode* SDL_GetClosestDisplayMode | ( | int | displayIndex,
|  | const SDL_DisplayMode * | mode,
|  | SDL_DisplayMode * | closest
| ) |  |

Get the closest match to the requested display mode.

Parameters

  displayIndex | The index of display from which mode should be queried.
  mode | The desired display mode
  closest | A pointer to a display mode to be filled in with the closest match of the available display modes.

Returns
  The passed in value `closest`, or NULL if no matching video mode was available.

The available display modes are scanned, and `closest` is filled in with the closest mode matching the requested mode and returned. The mode format and refresh_rate default to the desktop mode if they are 0. The modes are scanned with size being first priority, format being second priority, and finally checking the refresh_rate. If all the available modes are too small, then NULL is returned.

See also
  SDL_GetNumDisplayModes()
  SDL_GetDisplayMode()

Definition at line 917 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDevice::displays, NULL, and SDL_GetClosestDisplayModeForDisplay().

{
SDL_VideoDisplay *display;
CHECK_DISPLAY_INDEX(displayIndex, NULL);
display = &_this->displays[displayIndex];
return SDL_GetClosestDisplayModeForDisplay(display, mode, closest);
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
NULL
#define NULL
Definition: begin_code.h:143
SDL_GetClosestDisplayModeForDisplay
static SDL_DisplayMode * SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
Definition: SDL_video.c:810
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

static SDL_DisplayMode* SDL_GetClosestDisplayModeForDisplay | ( | SDL_VideoDisplay * | display,
|  | const SDL_DisplayMode * | mode,
|  | SDL_DisplayMode * | closest
| ) |  |

static

Definition at line 810 of file SDL_video.c.

References SDL_VideoDisplay::desktop_mode, SDL_VideoDisplay::display_modes, SDL_DisplayMode::driverdata, SDL_DisplayMode::format, SDL_DisplayMode::h, i, NULL, SDL_DisplayMode::refresh_rate, SDL_BITSPERPIXEL, SDL_GetNumDisplayModesForDisplay(), SDL_PIXELFORMAT_RGB888, SDL_PIXELTYPE, SDL_SetError, and SDL_DisplayMode::w.

Referenced by SDL_GetClosestDisplayMode(), SDL_GetWindowDisplayMode(), and SDL_SetDisplayModeForDisplay().

{
Uint32 target_format;
int target_refresh_rate;
int i;
SDL_DisplayMode *current, *match;
if (!mode || !closest) {
SDL_SetError("Missing desired mode or closest mode parameter");
return NULL;
}
/* Default to the desktop format */
if (mode->format) {
target_format = mode->format;
} else {
target_format = display->desktop_mode.format;
}
/* Default to the desktop refresh rate */
if (mode->refresh_rate) {
target_refresh_rate = mode->refresh_rate;
} else {
target_refresh_rate = display->desktop_mode.refresh_rate;
}
match = NULL;
for (i = 0; i < SDL_GetNumDisplayModesForDisplay(display); ++i) {
current = &display->display_modes[i];
if (current->w && (current->w < mode->w)) {
/* Out of sorted modes large enough here */
break;
}
if (current->h && (current->h < mode->h)) {
if (current->w && (current->w == mode->w)) {
/* Out of sorted modes large enough here */
break;
}
/* Wider, but not tall enough, due to a different
aspect ratio. This mode must be skipped, but closer
modes may still follow. */
continue;
}
if (!match || current->w < match->w || current->h < match->h) {
match = current;
continue;
}
if (current->format != match->format) {
/* Sorted highest depth to lowest */
if (current->format == target_format ||
(SDL_BITSPERPIXEL(current->format) >=
SDL_BITSPERPIXEL(target_format)
&& SDL_PIXELTYPE(current->format) ==
SDL_PIXELTYPE(target_format))) {
match = current;
}
continue;
}
if (current->refresh_rate != match->refresh_rate) {
/* Sorted highest refresh to lowest */
if (current->refresh_rate >= target_refresh_rate) {
match = current;
}
}
}
if (match) {
if (match->format) {
closest->format = match->format;
} else {
closest->format = mode->format;
}
if (match->w && match->h) {
closest->w = match->w;
closest->h = match->h;
} else {
closest->w = mode->w;
closest->h = mode->h;
}
if (match->refresh_rate) {
closest->refresh_rate = match->refresh_rate;
} else {
closest->refresh_rate = mode->refresh_rate;
}
closest->driverdata = match->driverdata;
/*
* Pick some reasonable defaults if the app and driver don't
* care
*/
if (!closest->format) {
closest->format = SDL_PIXELFORMAT_RGB888;
}
if (!closest->w) {
closest->w = 640;
}
if (!closest->h) {
closest->h = 480;
}
return closest;
}
return NULL;
}
SDL_GetNumDisplayModesForDisplay
static int SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay *display)
Definition: SDL_video.c:745
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
SDL_DisplayMode::w
int w
Definition: SDL_video.h:56
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_DisplayMode::refresh_rate
int refresh_rate
Definition: SDL_video.h:58
SDL_PIXELFORMAT_RGB888
Definition: SDL_pixels.h:235
SDL_DisplayMode::driverdata
void * driverdata
Definition: SDL_video.h:59
SDL_VideoDisplay::display_modes
SDL_DisplayMode * display_modes
Definition: SDL_sysvideo.h:125
SDL_DisplayMode::h
int h
Definition: SDL_video.h:57
SDL_PIXELTYPE
#define SDL_PIXELTYPE(X)
Definition: SDL_pixels.h:123
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 in i)
Definition: SDL_x11sym.h:42
NULL
#define NULL
Definition: begin_code.h:143
SDL_VideoDisplay::desktop_mode
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:126
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_DisplayMode::format
Uint32 format
Definition: SDL_video.h:55
SDL_BITSPERPIXEL
#define SDL_BITSPERPIXEL(X)
Definition: SDL_pixels.h:126

int SDL_GetCurrentDisplayMode | ( | int | displayIndex,
|  | SDL_DisplayMode * | mode
| ) |  |

Fill in information about the current display mode.

Definition at line 796 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDisplay::current_mode, and SDL_VideoDevice::displays.

{
SDL_VideoDisplay *display;
CHECK_DISPLAY_INDEX(displayIndex, -1);
display = &_this->displays[displayIndex];
if (mode) {
*mode = display->current_mode;
}
return 0;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDisplay::current_mode
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:127
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

const char* SDL_GetCurrentVideoDriver | ( | void |  | ) |

Returns the name of the currently initialized video driver.

Returns
  The name of the current video driver or NULL if no driver has been initialized

See also
  SDL_GetNumVideoDrivers()
  SDL_GetVideoDriver()

Definition at line 563 of file SDL_video.c.

References SDL_VideoDevice::name, NULL, and SDL_UninitializedVideo().

{
if (!_this) {
SDL_UninitializedVideo();
return NULL;
}
return _this->name;
}
SDL_VideoDevice::name
const char * name
Definition: SDL_sysvideo.h:146
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
NULL
#define NULL
Definition: begin_code.h:143
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

int SDL_GetDesktopDisplayMode | ( | int | displayIndex,
|  | SDL_DisplayMode * | mode
| ) |  |

Fill in information about the desktop display mode.

Definition at line 782 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDisplay::desktop_mode, and SDL_VideoDevice::displays.

{
SDL_VideoDisplay *display;
CHECK_DISPLAY_INDEX(displayIndex, -1);
display = &_this->displays[displayIndex];
if (mode) {
*mode = display->desktop_mode;
}
return 0;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_VideoDisplay::desktop_mode
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:126
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

int SDL_GetDisplayBounds | ( | int | displayIndex,
|  | SDL_Rect * | rect
| ) |  |

Get the desktop area represented by a display, with the primary display located at 0,0.

Returns
  0 on success, or -1 if the index is out of range.

See also
  SDL_GetNumVideoDisplays()

Definition at line 663 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDisplay::current_mode, SDL_VideoDevice::displays, SDL_VideoDevice::GetDisplayBounds, SDL_DisplayMode::h, SDL_Rect::h, SDL_DisplayMode::w, SDL_Rect::w, SDL_Rect::x, and SDL_Rect::y.

Referenced by SDL_CreateWindow(), SDL_GetWindowDisplayIndex(), SDL_GetWindowPosition(), and SDL_SetWindowPosition().

{
CHECK_DISPLAY_INDEX(displayIndex, -1);
if (rect) {
SDL_VideoDisplay *display = &_this->displays[displayIndex];
if (_this->GetDisplayBounds) {
if (_this->GetDisplayBounds(_this, display, rect) == 0) {
return 0;
}
}
/* Assume that the displays are left to right */
if (displayIndex == 0) {
rect->x = 0;
rect->y = 0;
} else {
SDL_GetDisplayBounds(displayIndex-1, rect);
rect->x += rect->w;
}
rect->w = display->current_mode.w;
rect->h = display->current_mode.h;
}
return 0;
}
SDL_DisplayMode::w
int w
Definition: SDL_video.h:56
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDisplay::current_mode
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:127
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_VideoDevice::GetDisplayBounds
int(* GetDisplayBounds)(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect)
Definition: SDL_sysvideo.h:171
SDL_DisplayMode::h
int h
Definition: SDL_video.h:57
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_GetDisplayBounds
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0...
Definition: SDL_video.c:663
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_Rect::h
int h
Definition: SDL_rect.h:67
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126
SDL_Rect::y
int y
Definition: SDL_rect.h:66

int SDL_GetDisplayDPI | ( | int | displayIndex,
|  | float * | ddpi,
|  | float * | hdpi,
|  | float * | vdpi
| ) |  |

Get the dots/pixels-per-inch for a display.

Note
  Diagonal, horizontal and vertical DPI can all be optionally returned if the parameter is non-NULL.

Returns
  0 on success, or -1 if no DPI information is available or the index is out of range.

See also
  SDL_GetNumVideoDisplays()

Definition at line 691 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDevice::displays, and SDL_VideoDevice::GetDisplayDPI.

{
SDL_VideoDisplay *display;
CHECK_DISPLAY_INDEX(displayIndex, -1);
display = &_this->displays[displayIndex];
if (_this->GetDisplayDPI) {
if (_this->GetDisplayDPI(_this, display, ddpi, hdpi, vdpi) == 0) {
return 0;
}
}
return -1;
}
SDL_VideoDevice::GetDisplayDPI
int(* GetDisplayDPI)(_THIS, SDL_VideoDisplay *display, float *ddpi, float *hdpi, float *vdpi)
Definition: SDL_sysvideo.h:176
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

void* SDL_GetDisplayDriverData | ( | int | displayIndex | ) |

Definition at line 647 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDevice::displays, SDL_VideoDisplay::driverdata, and NULL.

{
CHECK_DISPLAY_INDEX(displayIndex, NULL);
return _this->displays[displayIndex].driverdata;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
NULL
#define NULL
Definition: begin_code.h:143
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126
SDL_VideoDisplay::driverdata
void * driverdata
Definition: SDL_sysvideo.h:133

SDL_VideoDisplay* SDL_GetDisplayForWindow | ( | SDL_Window * | window | ) |

Definition at line 1039 of file SDL_video.c.

References SDL_VideoDevice::displays, NULL, and SDL_GetWindowDisplayIndex().

Referenced by SDL_CreateWindow(), SDL_DestroyWindow(), SDL_GetWindowDisplayMode(), SDL_GetWindowPixelFormat(), SDL_SetWindowDisplayMode(), and SDL_UpdateFullscreenMode().

{
int displayIndex = SDL_GetWindowDisplayIndex(window);
if (displayIndex >= 0) {
return &_this->displays[displayIndex];
} else {
return NULL;
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
NULL
#define NULL
Definition: begin_code.h:143
SDL_GetWindowDisplayIndex
int SDL_GetWindowDisplayIndex(SDL_Window *window)
Get the display index associated with a window.
Definition: SDL_video.c:979

int SDL_GetDisplayMode | ( | int | displayIndex,
|  | int | modeIndex,
|  | SDL_DisplayMode * | mode
| ) |  |

Fill in information about a specific display mode.

Note
  The display modes are sorted in this priority:
  - bits per pixel -> more colors to fewer colors
  - width -> largest to smallest
  - height -> largest to smallest
  - refresh rate -> highest to lowest

See also
  SDL_GetNumDisplayModes()

Definition at line 764 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDisplay::display_modes, SDL_VideoDevice::displays, SDL_GetNumDisplayModesForDisplay(), and SDL_SetError.

{
SDL_VideoDisplay *display;
CHECK_DISPLAY_INDEX(displayIndex, -1);
display = &_this->displays[displayIndex];
if (index < 0 || index >= SDL_GetNumDisplayModesForDisplay(display)) {
return SDL_SetError("index must be in the range of 0 - %d",
SDL_GetNumDisplayModesForDisplay(display) - 1);
}
if (mode) {
*mode = display->display_modes[index];
}
return 0;
}
SDL_GetNumDisplayModesForDisplay
static int SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay *display)
Definition: SDL_video.c:745
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDisplay::display_modes
SDL_DisplayMode * display_modes
Definition: SDL_sysvideo.h:125
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
index
GLuint index
Definition: SDL_opengl_glext.h:660
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

const char* SDL_GetDisplayName | ( | int | displayIndex | ) |

Get the name of a display in UTF-8 encoding.

Returns
  The name of a display, or NULL for an invalid display index.

See also
  SDL_GetNumVideoDisplays()

Definition at line 655 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDevice::displays, SDL_VideoDisplay::name, and NULL.

{
CHECK_DISPLAY_INDEX(displayIndex, NULL);
return _this->displays[displayIndex].name;
}
SDL_VideoDisplay::name
char * name
Definition: SDL_sysvideo.h:122
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
NULL
#define NULL
Definition: begin_code.h:143
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

SDL_Window* SDL_GetFocusWindow | ( | void |  | ) |

Definition at line 2403 of file SDL_video.c.

References SDL_Window::flags, SDL_Window::next, NULL, SDL_WINDOW_INPUT_FOCUS, window, and SDL_VideoDevice::windows.

Referenced by SDL_PromptAssertion(), SDL_StartTextInput(), and SDL_StopTextInput().

{
SDL_Window *window;
if (!_this) {
return NULL;
}
for (window = _this->windows; window; window = window->next) {
if (window->flags & SDL_WINDOW_INPUT_FOCUS) {
return window;
}
}
return NULL;
}
SDL_Window::next
SDL_Window * next
Definition: SDL_sysvideo.h:109
window
SDL_Window * window
Definition: testautomation_render.c:26
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
NULL
#define NULL
Definition: begin_code.h:143
SDL_WINDOW_INPUT_FOCUS
Definition: SDL_video.h:107
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

SDL_Window* SDL_GetGrabbedWindow | ( | void |  | ) |

Get the window that currently has an input grab enabled.

Returns
  This returns the window if input is grabbed, and NULL otherwise.

See also
  SDL_SetWindowGrab()

Definition at line 2282 of file SDL_video.c.

References SDL_Window::flags, SDL_VideoDevice::grabbed_window, SDL_assert, and SDL_WINDOW_INPUT_GRABBED.

{
SDL_assert(!_this->grabbed_window || ((_this->grabbed_window->flags & SDL_WINDOW_INPUT_GRABBED) != 0));
return _this->grabbed_window;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:167
SDL_VideoDevice::grabbed_window
SDL_Window * grabbed_window
Definition: SDL_sysvideo.h:282
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOW_INPUT_GRABBED
Definition: SDL_video.h:106

static int SDL_GetIndexOfDisplay | ( | SDL_VideoDisplay * | display | ) |

static

Definition at line 632 of file SDL_video.c.

References SDL_VideoDevice::displays, and SDL_VideoDevice::num_displays.

Referenced by SDL_CreateWindow().

{
int displayIndex;
for (displayIndex = 0; displayIndex < _this->num_displays; ++displayIndex) {
if (display == &_this->displays[displayIndex]) {
return displayIndex;
}
}
/* Couldn't find the display, just use index 0 */
return 0;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280

int SDL_GetNumDisplayModes | ( | int | displayIndex | ) |

Returns the number of available display modes.

See also
  SDL_GetDisplayMode()

Definition at line 756 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDevice::displays, and SDL_GetNumDisplayModesForDisplay().

{
CHECK_DISPLAY_INDEX(displayIndex, -1);
return SDL_GetNumDisplayModesForDisplay(&_this->displays[displayIndex]);
}
SDL_GetNumDisplayModesForDisplay
static int SDL_GetNumDisplayModesForDisplay(SDL_VideoDisplay *display)
Definition: SDL_video.c:745
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
CHECK_DISPLAY_INDEX
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:126

static int SDL_GetNumDisplayModesForDisplay | ( | SDL_VideoDisplay * | display | ) |

static

Definition at line 745 of file SDL_video.c.

References cmpmodes(), SDL_VideoDisplay::display_modes, SDL_VideoDevice::GetDisplayModes, SDL_VideoDisplay::num_display_modes, and SDL_qsort.

Referenced by SDL_GetClosestDisplayModeForDisplay(), SDL_GetDisplayMode(), and SDL_GetNumDisplayModes().

{
if (!display->num_display_modes && _this->GetDisplayModes) {
_this->GetDisplayModes(_this, display);
SDL_qsort(display->display_modes, display->num_display_modes,
sizeof(SDL_DisplayMode), cmpmodes);
}
return display->num_display_modes;
}
SDL_qsort
#define SDL_qsort
Definition: SDL_dynapi_overrides.h:386
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDisplay::num_display_modes
int num_display_modes
Definition: SDL_sysvideo.h:124
cmpmodes
static int cmpmodes(const void *A, const void *B)
Definition: SDL_video.c:398
SDL_VideoDisplay::display_modes
SDL_DisplayMode * display_modes
Definition: SDL_sysvideo.h:125
SDL_VideoDevice::GetDisplayModes
void(* GetDisplayModes)(_THIS, SDL_VideoDisplay *display)
Definition: SDL_sysvideo.h:181

int SDL_GetNumVideoDisplays | ( | void |  | ) |

Returns the number of available video displays.

See also
  SDL_GetDisplayBounds()

Definition at line 622 of file SDL_video.c.

References SDL_VideoDevice::num_displays, and SDL_UninitializedVideo().

{
if (!_this) {
SDL_UninitializedVideo();
return 0;
}
return _this->num_displays;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

int SDL_GetNumVideoDrivers | ( | void |  | ) |

Get the number of video drivers compiled into SDL.

See also
  SDL_GetVideoDriver()

Definition at line 425 of file SDL_video.c.

References SDL_arraysize.

Referenced by SDL_GetVideoDriver().

{
return SDL_arraysize(bootstrap) - 1;
}
bootstrap
static VideoBootStrap * bootstrap[]
Definition: SDL_video.c:59
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93

SDL_VideoDevice* SDL_GetVideoDevice | ( | void |  | ) |

Definition at line 573 of file SDL_video.c.

References _this.

Referenced by SDL_CreateShapedWindow(), SDL_GetClipboardText(), SDL_HasClipboardText(), SDL_PumpEvents(), SDL_SetClipboardText(), SDL_SetKeyboardFocus(), and SDL_SetWindowShape().

{
return _this;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114

const char* SDL_GetVideoDriver | ( | int | index | ) |

Get the name of a built in video driver.

Note
  The video drivers are presented in the order in which they are normally checked during initialization.

See also
  SDL_GetNumVideoDrivers()

Definition at line 431 of file SDL_video.c.

References VideoBootStrap::name, NULL, and SDL_GetNumVideoDrivers().

{
if (index >= 0 && index < SDL_GetNumVideoDrivers()) {
return bootstrap[index]->name;
}
return NULL;
}
SDL_GetNumVideoDrivers
int SDL_GetNumVideoDrivers(void)
Get the number of video drivers compiled into SDL.
Definition: SDL_video.c:425
index
GLuint index
Definition: SDL_opengl_glext.h:660
NULL
#define NULL
Definition: begin_code.h:143
bootstrap
static VideoBootStrap * bootstrap[]
Definition: SDL_video.c:59
VideoBootStrap::name
const char * name
Definition: SDL_sysvideo.h:350

float SDL_GetWindowBrightness | ( | SDL_Window * | window | ) |

Get the brightness (gamma correction) for a window.

Returns
  The last brightness value passed to SDL_SetWindowBrightness()

See also
  SDL_SetWindowBrightness()

Definition at line 2140 of file SDL_video.c.

References SDL_Window::brightness, and CHECK_WINDOW_MAGIC.

{
CHECK_WINDOW_MAGIC(window, 1.0f);
return window->brightness;
}
f
GLfloat f
Definition: SDL_opengl_glext.h:1870
SDL_Window::brightness
float brightness
Definition: SDL_sysvideo.h:89
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

void* SDL_GetWindowData | ( | SDL_Window * | window,
|  | const char * | name
| ) |  |

Retrieve the data pointer associated with a window.

Parameters

  window | The window to query.
  name | The name of the pointer.

Returns
  The value associated with 'name'

See also
  SDL_SetWindowData()

Definition at line 1673 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_WindowUserData::data, SDL_Window::data, SDL_WindowUserData::name, SDL_WindowUserData::next, NULL, SDL_InvalidParamError, and SDL_strcmp.

Referenced by SDL_CreateWindowTexture(), and SDL_UpdateWindowTexture().

{
SDL_WindowUserData *data;
CHECK_WINDOW_MAGIC(window, NULL);
/* Input validation */
if (name == NULL || name[0] == '\0') {
SDL_InvalidParamError("name");
return NULL;
}
for (data = window->data; data; data = data->next) {
if (data->name && SDL_strcmp(data->name, name) == 0) {
return data->data;
}
}
return NULL;
}
SDL_WindowUserData
Definition: SDL_sysvideo.h:63
SDL_WindowUserData::data
void * data
Definition: SDL_sysvideo.h:66
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_WindowUserData::next
struct SDL_WindowUserData * next
Definition: SDL_sysvideo.h:67
SDL_WindowUserData::name
char * name
Definition: SDL_sysvideo.h:65
NULL
#define NULL
Definition: begin_code.h:143
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::data
SDL_WindowUserData * data
Definition: SDL_sysvideo.h:104

int SDL_GetWindowDisplayIndex | ( | SDL_Window * | window | ) |

Get the display index associated with a window.

Returns
  the display index of the display containing the center of the window, or -1 on error.

Definition at line 979 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDevice::displays, SDL_VideoDisplay::fullscreen_window, SDL_Rect::h, SDL_Window::h, i, NULL, SDL_VideoDevice::num_displays, rect, SDL_EnclosePoints, SDL_GetDisplayBounds(), SDL_SetError, SDL_WINDOWPOS_ISCENTERED, SDL_WINDOWPOS_ISUNDEFINED, SDL_Rect::w, SDL_Window::w, SDL_Point::x, SDL_Rect::x, SDL_Window::x, SDL_Point::y, SDL_Rect::y, and SDL_Window::y.

Referenced by SDL_GetDisplayForWindow(), and SDL_GetWindowPosition().

{
int displayIndex;
int i, dist;
int closest = -1;
int closest_dist = 0x7FFFFFFF;
SDL_Point center;
SDL_Point delta;
SDL_Rect rect;
CHECK_WINDOW_MAGIC(window, -1);
if (SDL_WINDOWPOS_ISUNDEFINED(window->x) ||
SDL_WINDOWPOS_ISCENTERED(window->x)) {
displayIndex = (window->x & 0xFFFF);
if (displayIndex >= _this->num_displays) {
displayIndex = 0;
}
return displayIndex;
}
if (SDL_WINDOWPOS_ISUNDEFINED(window->y) ||
SDL_WINDOWPOS_ISCENTERED(window->y)) {
displayIndex = (window->y & 0xFFFF);
if (displayIndex >= _this->num_displays) {
displayIndex = 0;
}
return displayIndex;
}
/* Find the display containing the window */
for (i = 0; i < _this->num_displays; ++i) {
SDL_VideoDisplay *display = &_this->displays[i];
if (display->fullscreen_window == window) {
return i;
}
}
center.x = window->x + window->w / 2;
center.y = window->y + window->h / 2;
for (i = 0; i < _this->num_displays; ++i) {
SDL_GetDisplayBounds(i, &rect);
if (SDL_EnclosePoints(&center, 1, &rect, NULL)) {
return i;
}
delta.x = center.x - (rect.x + rect.w / 2);
delta.y = center.y - (rect.y + rect.h / 2);
dist = (delta.x*delta.x + delta.y*delta.y);
if (dist < closest_dist) {
closest = i;
closest_dist = dist;
}
}
if (closest < 0) {
SDL_SetError("Couldn't find any displays");
}
return closest;
}
SDL_WINDOWPOS_ISUNDEFINED
#define SDL_WINDOWPOS_ISUNDEFINED(X)
Definition: SDL_video.h:121
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_Window::x
int x
Definition: SDL_sysvideo.h:77
rect
SDL_Rect rect
Definition: testrelative.c:27
SDL_Point
The structure that defines a point.
Definition: SDL_rect.h:48
SDL_WINDOWPOS_ISCENTERED
#define SDL_WINDOWPOS_ISCENTERED(X)
Definition: SDL_video.h:130
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_Point::x
int x
Definition: SDL_rect.h:50
SDL_Point::y
int y
Definition: SDL_rect.h:51
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_Window::y
int y
Definition: SDL_sysvideo.h:77
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_GetDisplayBounds
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0...
Definition: SDL_video.c:663
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_VideoDisplay::fullscreen_window
SDL_Window * fullscreen_window
Definition: SDL_sysvideo.h:129
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
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 in i)
Definition: SDL_x11sym.h:42
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_Rect::h
int h
Definition: SDL_rect.h:67
SDL_EnclosePoints
#define SDL_EnclosePoints
Definition: SDL_dynapi_overrides.h:302
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Rect::y
int y
Definition: SDL_rect.h:66
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64

int SDL_GetWindowDisplayMode | ( | SDL_Window * | window,
|  | SDL_DisplayMode * | mode
| ) |  |

Fill in information about the display mode used when a fullscreen window is visible.

See also
  SDL_SetWindowDisplayMode()
  SDL_SetWindowFullscreen()

Definition at line 1070 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDisplay::desktop_mode, SDL_Window::flags, SDL_Window::fullscreen_mode, SDL_DisplayMode::h, SDL_Rect::h, SDL_GetClosestDisplayModeForDisplay(), SDL_GetDisplayForWindow(), SDL_InvalidParamError, SDL_SetError, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_DisplayMode::w, SDL_Rect::w, and SDL_Window::windowed.

Referenced by SDL_SetWindowDisplayMode(), and SDL_UpdateFullscreenMode().

{
SDL_DisplayMode fullscreen_mode;
SDL_VideoDisplay *display;
CHECK_WINDOW_MAGIC(window, -1);
if (!mode) {
return SDL_InvalidParamError("mode");
}
fullscreen_mode = window->fullscreen_mode;
if (!fullscreen_mode.w) {
fullscreen_mode.w = window->windowed.w;
}
if (!fullscreen_mode.h) {
fullscreen_mode.h = window->windowed.h;
}
display = SDL_GetDisplayForWindow(window);
/* if in desktop size mode, just return the size of the desktop */
if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) {
fullscreen_mode = display->desktop_mode;
} else if (!SDL_GetClosestDisplayModeForDisplay(SDL_GetDisplayForWindow(window),
&fullscreen_mode,
&fullscreen_mode)) {
return SDL_SetError("Couldn't find display mode match");
}
if (mode) {
*mode = fullscreen_mode;
}
return 0;
}
SDL_Window::fullscreen_mode
SDL_DisplayMode fullscreen_mode
Definition: SDL_sysvideo.h:87
SDL_DisplayMode::w
int w
Definition: SDL_video.h:56
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_Window::windowed
SDL_Rect windowed
Definition: SDL_sysvideo.h:85
SDL_GetDisplayForWindow
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:1039
SDL_DisplayMode::h
int h
Definition: SDL_video.h:57
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_VideoDisplay::desktop_mode
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:126
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_Rect::h
int h
Definition: SDL_rect.h:67
SDL_GetClosestDisplayModeForDisplay
static SDL_DisplayMode * SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
Definition: SDL_video.c:810
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOW_FULLSCREEN_DESKTOP
Definition: SDL_video.h:109

Uint32 SDL_GetWindowFlags | ( | SDL_Window * | window | ) |

Get the window flags.

Definition at line 1571 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, and SDL_Window::flags.

Referenced by SDL_ShowMessageBox().

{
CHECK_WINDOW_MAGIC(window, 0);
return window->flags;
}
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

SDL_Window* SDL_GetWindowFromID | ( | Uint32 | id | ) |

Get a window from a stored ID, or NULL if it doesn't exist.

Definition at line 1555 of file SDL_video.c.

References SDL_Window::id, SDL_Window::next, NULL, window, and SDL_VideoDevice::windows.

{
SDL_Window *window;
if (!_this) {
return NULL;
}
for (window = _this->windows; window; window = window->next) {
if (window->id == id) {
return window;
}
}
return NULL;
}
SDL_Window::next
SDL_Window * next
Definition: SDL_sysvideo.h:109
window
SDL_Window * window
Definition: testautomation_render.c:26
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
NULL
#define NULL
Definition: begin_code.h:143
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:74

int SDL_GetWindowGammaRamp | ( | SDL_Window * | window,
|  | Uint16 * | red,
|  | Uint16 * | green,
|  | Uint16 * | blue
| ) |  |

Get the gamma ramp for a window.

Parameters

  window | The window from which the gamma ramp should be queried.
  red | A pointer to a 256 element array of 16-bit quantities to hold the translation table for the red channel, or NULL.
  green | A pointer to a 256 element array of 16-bit quantities to hold the translation table for the green channel, or NULL.
  blue | A pointer to a 256 element array of 16-bit quantities to hold the translation table for the blue channel, or NULL.

Returns
  0 on success, or -1 if gamma ramps are unsupported.

See also
  SDL_SetWindowGammaRamp()

Definition at line 2182 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::gamma, SDL_VideoDevice::GetWindowGammaRamp, i, SDL_Window::saved_gamma, SDL_malloc, SDL_memcpy, and SDL_OutOfMemory.

Referenced by SDL_SetWindowGammaRamp().

{
CHECK_WINDOW_MAGIC(window, -1);
if (!window->gamma) {
int i;
window->gamma = (Uint16 *)SDL_malloc(256*6*sizeof(Uint16));
if (!window->gamma) {
return SDL_OutOfMemory();
}
window->saved_gamma = window->gamma + 3*256;
if (_this->GetWindowGammaRamp) {
if (_this->GetWindowGammaRamp(_this, window, window->gamma) < 0) {
return -1;
}
} else {
/* Create an identity gamma ramp */
for (i = 0; i < 256; ++i) {
Uint16 value = (Uint16)((i << 8) | i);
window->gamma[0*256+i] = value;
window->gamma[1*256+i] = value;
window->gamma[2*256+i] = value;
}
}
SDL_memcpy(window->saved_gamma, window->gamma, 3*256*sizeof(Uint16));
}
if (red) {
SDL_memcpy(red, &window->gamma[0*256], 256*sizeof(Uint16));
}
if (green) {
SDL_memcpy(green, &window->gamma[1*256], 256*sizeof(Uint16));
}
if (blue) {
SDL_memcpy(blue, &window->gamma[2*256], 256*sizeof(Uint16));
}
return 0;
}
SDL_Window::saved_gamma
Uint16 * saved_gamma
Definition: SDL_sysvideo.h:91
red
const GLubyte GLuint red
Definition: SDL_glfuncs.h:78
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
blue
GLbyte GLbyte blue
Definition: SDL_opengl_glext.h:379
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 in i)
Definition: SDL_x11sym.h:42
SDL_OutOfMemory
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
SDL_VideoDevice::GetWindowGammaRamp
int(* GetWindowGammaRamp)(_THIS, SDL_Window *window, Uint16 *ramp)
Definition: SDL_sysvideo.h:212
green
GLbyte green
Definition: SDL_opengl_glext.h:379
Uint16
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:147
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380
SDL_Window::gamma
Uint16 * gamma
Definition: SDL_sysvideo.h:90
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

SDL_bool SDL_GetWindowGrab | ( | SDL_Window * | window | ) |

Get a window's input grab mode.

Returns
  This returns SDL_TRUE if input is grabbed, and SDL_FALSE otherwise.

See also
  SDL_SetWindowGrab()

Definition at line 2274 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::grabbed_window, SDL_assert, SDL_FALSE, and SDL_WINDOW_INPUT_GRABBED.

{
CHECK_WINDOW_MAGIC(window, SDL_FALSE);
SDL_assert(!_this->grabbed_window || ((_this->grabbed_window->flags & SDL_WINDOW_INPUT_GRABBED) != 0));
return window == _this->grabbed_window;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:167
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_VideoDevice::grabbed_window
SDL_Window * grabbed_window
Definition: SDL_sysvideo.h:282
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOW_INPUT_GRABBED
Definition: SDL_video.h:106

Uint32 SDL_GetWindowID | ( | SDL_Window * | window | ) |

Get the numeric ID of a window, for logging purposes.

Definition at line 1547 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, and SDL_Window::id.

{
CHECK_WINDOW_MAGIC(window, 0);
return window->id;
}
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:74
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

void SDL_GetWindowMaximumSize | ( | SDL_Window * | window,
|  | int * | w,
|  | int * | h
| ) |  |

Get the maximum size of a window's client area.

Parameters

  window | The window to query.
  w | Pointer to variable for storing the maximum width, may be NULL
  h | Pointer to variable for storing the maximum height, may be NULL

See also
  SDL_GetWindowMinimumSize()
  SDL_SetWindowMaximumSize()

Definition at line 1923 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::max_h, and SDL_Window::max_w.

{
CHECK_WINDOW_MAGIC(window,);
if (max_w) {
*max_w = window->max_w;
}
if (max_h) {
*max_h = window->max_h;
}
}
SDL_Window::max_w
int max_w
Definition: SDL_sysvideo.h:80
SDL_Window::max_h
int max_h
Definition: SDL_sysvideo.h:80
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

void SDL_GetWindowMinimumSize | ( | SDL_Window * | window,
|  | int * | w,
|  | int * | h
| ) |  |

Get the minimum size of a window's client area.

Parameters

  window | The window to query.
  w | Pointer to variable for storing the minimum width, may be NULL
  h | Pointer to variable for storing the minimum height, may be NULL

See also
  SDL_GetWindowMaximumSize()
  SDL_SetWindowMinimumSize()

Definition at line 1887 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::min_h, and SDL_Window::min_w.

{
CHECK_WINDOW_MAGIC(window,);
if (min_w) {
*min_w = window->min_w;
}
if (min_h) {
*min_h = window->min_h;
}
}
SDL_Window::min_w
int min_w
Definition: SDL_sysvideo.h:79
SDL_Window::min_h
int min_h
Definition: SDL_sysvideo.h:79
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

Uint32 SDL_GetWindowPixelFormat | ( | SDL_Window * | window | ) |

Get the pixel format associated with the window.

Definition at line 1107 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDisplay::current_mode, SDL_DisplayMode::format, SDL_GetDisplayForWindow(), and SDL_PIXELFORMAT_UNKNOWN.

{
SDL_VideoDisplay *display;
CHECK_WINDOW_MAGIC(window, SDL_PIXELFORMAT_UNKNOWN);
display = SDL_GetDisplayForWindow(window);
return display->current_mode.format;
}
SDL_GetDisplayForWindow
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:1039
SDL_PIXELFORMAT_UNKNOWN
Definition: SDL_pixels.h:172
SDL_VideoDisplay::current_mode
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:127
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_DisplayMode::format
Uint32 format
Definition: SDL_video.h:55

void SDL_GetWindowPosition | ( | SDL_Window * | window,
|  | int * | x,
|  | int * | y
| ) |  |

Get the position of a window.

Parameters

  window | The window to query.
  x | Pointer to variable for storing the x position, in screen coordinates. May be NULL.
  y | Pointer to variable for storing the y position, in screen coordinates. May be NULL.

See also
  SDL_SetWindowPosition()

Definition at line 1739 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_GetDisplayBounds(), SDL_GetWindowDisplayIndex(), SDL_WINDOW_FULLSCREEN, SDL_zero, SDL_Rect::x, SDL_Window::x, SDL_Rect::y, and SDL_Window::y.

{
CHECK_WINDOW_MAGIC(window,);
/* Fullscreen windows are always at their display's origin */
if (window->flags & SDL_WINDOW_FULLSCREEN) {
int displayIndex;
if (x) {
*x = 0;
}
if (y) {
*y = 0;
}
/* Find the window's monitor and update to the
monitor offset. */
displayIndex = SDL_GetWindowDisplayIndex(window);
if (displayIndex >= 0) {
SDL_Rect bounds;
SDL_zero(bounds);
SDL_GetDisplayBounds(displayIndex, &bounds);
if (x) {
*x = bounds.x;
}
if (y) {
*y = bounds.y;
}
}
} else {
if (x) {
*x = window->x;
}
if (y) {
*y = window->y;
}
}
}
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
SDL_Window::x
int x
Definition: SDL_sysvideo.h:77
y
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1567
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
SDL_Window::y
int y
Definition: SDL_sysvideo.h:77
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_GetDisplayBounds
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0...
Definition: SDL_video.c:663
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_GetWindowDisplayIndex
int SDL_GetWindowDisplayIndex(SDL_Window *window)
Get the display index associated with a window.
Definition: SDL_video.c:979
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_Rect::y
int y
Definition: SDL_rect.h:66
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64

void SDL_GetWindowSize | ( | SDL_Window * | window,
|  | int * | w,
|  | int * | h
| ) |  |

Get the size of a window's client area.

Parameters

  window | The window to query.
  w | Pointer to variable for storing the width, in screen coordinates. May be NULL.
  h | Pointer to variable for storing the height, in screen coordinates. May be NULL.

The window size in screen coordinates may differ from the size in pixels, if the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() to get the real client area size in pixels.

See also
  SDL_SetWindowSize()

Definition at line 1851 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::h, and SDL_Window::w.

Referenced by SDL_GL_GetDrawableSize().

{
CHECK_WINDOW_MAGIC(window,);
if (w) {
*w = window->w;
}
if (h) {
*h = window->h;
}
}
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
w
GLubyte GLubyte GLubyte GLubyte w
Definition: SDL_opengl_glext.h:731
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
h
GLfloat GLfloat GLfloat GLfloat h
Definition: SDL_opengl_glext.h:1946

SDL_Surface* SDL_GetWindowSurface | ( | SDL_Window * | window | ) |

Get the SDL surface associated with the window.

Returns
  The window's framebuffer surface, or NULL on error.

A new surface will be created with the optimal format for the window, if necessary. This surface will be freed when the window is destroyed.

Note
  You may not combine this with 3D or the rendering API on this window.

See also
  SDL_UpdateWindowSurface()
  SDL_UpdateWindowSurfaceRects()

Definition at line 2078 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Surface::flags, NULL, SDL_CreateWindowFramebuffer(), SDL_DONTFREE, SDL_FreeSurface, SDL_TRUE, SDL_Window::surface, and SDL_Window::surface_valid.

{
CHECK_WINDOW_MAGIC(window, NULL);
if (!window->surface_valid) {
if (window->surface) {
window->surface->flags &= ~SDL_DONTFREE;
SDL_FreeSurface(window->surface);
}
window->surface = SDL_CreateWindowFramebuffer(window);
if (window->surface) {
window->surface_valid = SDL_TRUE;
window->surface->flags |= SDL_DONTFREE;
}
}
return window->surface;
}
SDL_DONTFREE
#define SDL_DONTFREE
Definition: SDL_surface.h:55
SDL_Surface::flags
Uint32 flags
Definition: SDL_surface.h:71
SDL_FreeSurface
#define SDL_FreeSurface
Definition: SDL_dynapi_overrides.h:450
SDL_TRUE
Definition: SDL_stdinc.h:129
NULL
#define NULL
Definition: begin_code.h:143
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::surface_valid
SDL_bool surface_valid
Definition: SDL_sysvideo.h:94
SDL_Window::surface
SDL_Surface * surface
Definition: SDL_sysvideo.h:93
SDL_CreateWindowFramebuffer
static SDL_Surface * SDL_CreateWindowFramebuffer(SDL_Window *window)
Definition: SDL_video.c:2054

const char* SDL_GetWindowTitle | ( | SDL_Window * | window | ) |

Get the title of a window, in UTF-8 format.

See also
  SDL_SetWindowTitle()

Definition at line 1596 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, and SDL_Window::title.

{
CHECK_WINDOW_MAGIC(window, "");
return window->title ? window->title : "";
}
SDL_Window::title
char * title
Definition: SDL_sysvideo.h:75
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

SDL_bool SDL_GetWindowWMInfo | ( | SDL_Window * | window,
|  | SDL_SysWMinfo * | info
| ) |  |

This function allows access to driver-dependent window information.

Parameters

  window | The window about which information is being requested
  info | This structure must be initialized with the SDL version, and is then filled in with information about the given window.

Returns
  SDL_TRUE if the function is implemented and the version member of the `info` struct is valid, SDL_FALSE otherwise.

You typically use this function like this:

SDL_SysWMinfo info;
SDL_VERSION(&info.version);
if ( SDL_GetWindowWMInfo(window, &info) ) { ... }

Definition at line 3379 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDevice::GetWindowWMInfo, SDL_FALSE, SDL_InvalidParamError, SDL_SYSWM_UNKNOWN, SDL_Unsupported, and SDL_SysWMinfo::subsystem.

Referenced by SDL_MessageboxValidForDriver().

{
CHECK_WINDOW_MAGIC(window, SDL_FALSE);
if (!info) {
SDL_InvalidParamError("info");
return SDL_FALSE;
}
info->subsystem = SDL_SYSWM_UNKNOWN;
if (!_this->GetWindowWMInfo) {
SDL_Unsupported();
return SDL_FALSE;
}
return (_this->GetWindowWMInfo(_this, window, info));
}
SDL_SYSWM_UNKNOWN
Definition: SDL_syswm.h:114
SDL_SysWMinfo::subsystem
SDL_SYSWM_TYPE subsystem
Definition: SDL_syswm.h:184
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::GetWindowWMInfo
SDL_bool(* GetWindowWMInfo)(_THIS, SDL_Window *window, struct SDL_SysWMinfo *info)
Definition: SDL_sysvideo.h:227
SDL_FALSE
Definition: SDL_stdinc.h:128
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Unsupported
#define SDL_Unsupported()
Definition: SDL_error.h:53

SDL_GLContext SDL_GL_CreateContext | ( | SDL_Window * | window | ) |

Create an OpenGL context for use with an OpenGL window, and make it current.

See also
  SDL_GL_DeleteContext()

Definition at line 3135 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDevice::current_glctx, SDL_VideoDevice::current_glctx_tls, SDL_VideoDevice::current_glwin, SDL_VideoDevice::current_glwin_tls, SDL_Window::flags, SDL_VideoDevice::GL_CreateContext, NULL, SDL_SetError, SDL_TLSSet, SDL_WINDOW_OPENGL, and window.

Referenced by ShouldUseTextureFramebuffer().

{
SDL_GLContext ctx = NULL;
CHECK_WINDOW_MAGIC(window, NULL);
if (!(window->flags & SDL_WINDOW_OPENGL)) {
SDL_SetError("The specified window isn't an OpenGL window");
return NULL;
}
ctx = _this->GL_CreateContext(_this, window);
/* Creating a context is assumed to make it current in the SDL driver. */
if (ctx) {
_this->current_glwin = window;
_this->current_glctx = ctx;
SDL_TLSSet(_this->current_glwin_tls, window, NULL);
SDL_TLSSet(_this->current_glctx_tls, ctx, NULL);
}
return ctx;
}
SDL_TLSSet
#define SDL_TLSSet
Definition: SDL_dynapi_overrides.h:486
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_VideoDevice::current_glwin_tls
SDL_TLSID current_glwin_tls
Definition: SDL_sysvideo.h:327
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_GLContext
void * SDL_GLContext
An opaque handle to an OpenGL context.
Definition: SDL_video.h:164
SDL_VideoDevice::current_glctx
SDL_GLContext current_glctx
Definition: SDL_sysvideo.h:326
SDL_VideoDevice::GL_CreateContext
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:237
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_VideoDevice::current_glctx_tls
SDL_TLSID current_glctx_tls
Definition: SDL_sysvideo.h:328
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_VideoDevice::current_glwin
SDL_Window * current_glwin
Definition: SDL_sysvideo.h:325

void SDL_GL_DeleteContext | ( | SDL_GLContext | context | ) |

Delete an OpenGL context.

See also
  SDL_GL_CreateContext()

Definition at line 3266 of file SDL_video.c.

References SDL_PixelFormat::Amask, SDL_PixelFormat::BytesPerPixel, SDL_Surface::flags, SDL_Surface::format, SDL_VideoDevice::GL_DeleteContext, SDL_Surface::h, NULL, SDL_Surface::pitch, SDL_Surface::pixels, SDL_free(), SDL_GL_GetCurrentContext(), SDL_GL_MakeCurrent(), SDL_malloc, SDL_memset, and SDL_Surface::w.

Referenced by ShouldUseTextureFramebuffer().

{
if (!_this || !context) {
return;
}
if (SDL_GL_GetCurrentContext() == context) {
SDL_GL_MakeCurrent(NULL, NULL);
}
_this->GL_DeleteContext(_this, context);
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_GL_MakeCurrent
int SDL_GL_MakeCurrent(SDL_Window *window, SDL_GLContext ctx)
Set up an OpenGL context for rendering into an OpenGL window.
Definition: SDL_video.c:3158
NULL
#define NULL
Definition: begin_code.h:143
SDL_GL_GetCurrentContext
SDL_GLContext SDL_GL_GetCurrentContext(void)
Get the currently active OpenGL context.
Definition: SDL_video.c:3199
SDL_VideoDevice::GL_DeleteContext
void(* GL_DeleteContext)(_THIS, SDL_GLContext context)
Definition: SDL_sysvideo.h:243

SDL_bool SDL_GL_ExtensionSupported | ( | const char * | extension | ) |

Return true if an OpenGL extension is supported for the current context.

Definition at line 2656 of file SDL_video.c.

References APIENTRY, GL_EXTENSIONS, GL_NUM_EXTENSIONS, GL_VERSION, i, isAtLeastGL3(), SDL_FALSE, SDL_getenv, SDL_GL_GetProcAddress(), SDL_strchr, SDL_strcmp, SDL_strlen, SDL_strstr, SDL_TRUE, and void.

{
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
const GLubyte *(APIENTRY * glGetStringFunc) (GLenum);
const char *extensions;
const char *start;
const char *where, *terminator;
/* Extension names should not have spaces. */
where = SDL_strchr(extension, ' ');
if (where || *extension == '\0') {
return SDL_FALSE;
}
/* See if there's an environment variable override */
start = SDL_getenv(extension);
if (start && *start == '0') {
return SDL_FALSE;
}
/* Lookup the available extensions */
glGetStringFunc = SDL_GL_GetProcAddress("glGetString");
if (!glGetStringFunc) {
return SDL_FALSE;
}
if (isAtLeastGL3((const char *) glGetStringFunc(GL_VERSION))) {
const GLubyte *(APIENTRY * glGetStringiFunc) (GLenum, GLuint);
void (APIENTRY * glGetIntegervFunc) (GLenum pname, GLint * params);
GLint num_exts = 0;
GLint i;
glGetStringiFunc = SDL_GL_GetProcAddress("glGetStringi");
glGetIntegervFunc = SDL_GL_GetProcAddress("glGetIntegerv");
if ((!glGetStringiFunc) || (!glGetIntegervFunc)) {
return SDL_FALSE;
}
#ifndef GL_NUM_EXTENSIONS
#define GL_NUM_EXTENSIONS 0x821D
#endif
glGetIntegervFunc(GL_NUM_EXTENSIONS, &num_exts);
for (i = 0; i < num_exts; i++) {
const char *thisext = (const char *) glGetStringiFunc(GL_EXTENSIONS, i);
if (SDL_strcmp(thisext, extension) == 0) {
return SDL_TRUE;
}
}
return SDL_FALSE;
}
/* Try the old way with glGetString(GL_EXTENSIONS) ... */
extensions = (const char *) glGetStringFunc(GL_EXTENSIONS);
if (!extensions) {
return SDL_FALSE;
}
/*
* It takes a bit of care to be fool-proof about parsing the OpenGL
* extensions string. Don't be fooled by sub-strings, etc.
*/
start = extensions;
for (;;) {
where = SDL_strstr(start, extension);
if (!where)
break;
terminator = where + SDL_strlen(extension);
if (where == start || *(where - 1) == ' ')
if (*terminator == ' ' || *terminator == '\0')
return SDL_TRUE;
start = terminator;
}
return SDL_FALSE;
#else
return SDL_FALSE;
#endif
}
APIENTRY
#define APIENTRY
Definition: SDL_opengl.h:132
GLint
int GLint
Definition: SDL_opengl.h:175
GL_EXTENSIONS
#define GL_EXTENSIONS
Definition: SDL_opengl.h:709
start
GLuint start
Definition: SDL_opengl.h:1564
GL_VERSION
#define GL_VERSION
Definition: SDL_opengl.h:708
SDL_strchr
#define SDL_strchr
Definition: SDL_dynapi_overrides.h:407
GL_NUM_EXTENSIONS
#define GL_NUM_EXTENSIONS
isAtLeastGL3
static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr)
Definition: SDL_video.c:2650
params
const GLfloat * params
Definition: SDL_opengl_glext.h:371
SDL_TRUE
Definition: SDL_stdinc.h:129
GLubyte
unsigned char GLubyte
Definition: SDL_opengl.h:176
SDL_getenv
#define SDL_getenv
Definition: SDL_dynapi_overrides.h:384
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 in i)
Definition: SDL_x11sym.h:42
GLenum
unsigned int GLenum
Definition: SDL_opengl.h:169
pname
GLenum pname
Definition: SDL_opengl_glext.h:530
GLuint
unsigned int GLuint
Definition: SDL_opengl.h:178
void
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
Definition: SDL_dynapi_procs.h:93
SDL_strlen
#define SDL_strlen
Definition: SDL_dynapi_overrides.h:399
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_GL_GetProcAddress
void * SDL_GL_GetProcAddress(const char *proc)
Get the address of an OpenGL function.
Definition: SDL_video.c:2611
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423
SDL_strstr
#define SDL_strstr
Definition: SDL_dynapi_overrides.h:409

int SDL_GL_GetAttribute | ( | SDL_GLattr | attr,
|  | int * | value
| ) |  |

Get the actual value for an attribute from the current context.

Definition at line 2899 of file SDL_video.c.

References SDL_VideoDevice::accelerated, APIENTRY, SDL_VideoDevice::double_buffer, SDL_VideoDevice::flags, SDL_VideoDevice::framebuffer_srgb_capable, GL_ACCUM_ALPHA_BITS, GL_ACCUM_BLUE_BITS, GL_ACCUM_GREEN_BITS, GL_ACCUM_RED_BITS, GL_ALPHA_BITS, GL_BACK_LEFT, GL_BLUE_BITS, SDL_VideoDevice::gl_config, GL_CONTEXT_RELEASE_BEHAVIOR, GL_CONTEXT_RELEASE_BEHAVIOR_KHR, GL_DEPTH, GL_DEPTH_BITS, GL_DOUBLEBUFFER, GL_FRAMEBUFFER, GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, GL_GREEN_BITS, GL_INVALID_ENUM, GL_INVALID_VALUE, GL_NO_ERROR, GL_RED_BITS, GL_SAMPLE_BUFFERS, GL_SAMPLES, GL_STENCIL, GL_STENCIL_BITS, GL_STEREO, GL_VERSION, isAtLeastGL3(), SDL_VideoDevice::major_version, SDL_VideoDevice::minor_version, SDL_VideoDevice::profile_mask, SDL_VideoDevice::retained_backing, SDL_GL_ACCELERATED_VISUAL, SDL_GL_ACCUM_ALPHA_SIZE, SDL_GL_ACCUM_BLUE_SIZE, SDL_GL_ACCUM_GREEN_SIZE, SDL_GL_ACCUM_RED_SIZE, SDL_GL_ALPHA_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_CONTEXT_EGL, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_MAJOR_VERSION, SDL_GL_CONTEXT_MINOR_VERSION, SDL_GL_CONTEXT_PROFILE_ES, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_RELEASE_BEHAVIOR, SDL_GL_DEPTH_SIZE, SDL_GL_DOUBLEBUFFER, SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, SDL_GL_GetProcAddress(), SDL_GL_GREEN_SIZE, SDL_GL_MULTISAMPLEBUFFERS, SDL_GL_MULTISAMPLESAMPLES, SDL_GL_RED_SIZE, SDL_GL_RETAINED_BACKING, SDL_GL_SHARE_WITH_CURRENT_CONTEXT, SDL_GL_STENCIL_SIZE, SDL_GL_STEREO, SDL_SetError, SDL_Unsupported, SDL_VideoDevice::share_with_current_context, and void.

{
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
GLenum (APIENTRY *glGetErrorFunc) (void);
GLenum attrib = 0;
GLenum error = 0;
/*
* Some queries in Core Profile desktop OpenGL 3+ contexts require
* glGetFramebufferAttachmentParameteriv instead of glGetIntegerv. Note that
* the enums we use for the former function don't exist in OpenGL ES 2, and
* the function itself doesn't exist prior to OpenGL 3 and OpenGL ES 2.
*/
#if SDL_VIDEO_OPENGL
const GLubyte *(APIENTRY *glGetStringFunc) (GLenum name);
void (APIENTRY *glGetFramebufferAttachmentParameterivFunc) (GLenum target, GLenum attachment, GLenum pname, GLint* params);
GLenum attachment = GL_BACK_LEFT;
GLenum attachmentattrib = 0;
#endif
/* Clear value in any case */
*value = 0;
switch (attr) {
case SDL_GL_RED_SIZE:
#if SDL_VIDEO_OPENGL
attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE;
#endif
attrib = GL_RED_BITS;
break;
case SDL_GL_BLUE_SIZE:
#if SDL_VIDEO_OPENGL
attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;
#endif
attrib = GL_BLUE_BITS;
break;
case SDL_GL_GREEN_SIZE:
#if SDL_VIDEO_OPENGL
attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;
#endif
attrib = GL_GREEN_BITS;
break;
case SDL_GL_ALPHA_SIZE:
#if SDL_VIDEO_OPENGL
attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;
#endif
attrib = GL_ALPHA_BITS;
break;
case SDL_GL_DOUBLEBUFFER:
#if SDL_VIDEO_OPENGL
attrib = GL_DOUBLEBUFFER;
break;
#else
/* OpenGL ES 1.0 and above specifications have EGL_SINGLE_BUFFER */
/* parameter which switches double buffer to single buffer. OpenGL ES */
/* SDL driver must set proper value after initialization */
*value = _this->gl_config.double_buffer;
return 0;
#endif
case SDL_GL_DEPTH_SIZE:
#if SDL_VIDEO_OPENGL
attachment = GL_DEPTH;
attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;
#endif
attrib = GL_DEPTH_BITS;
break;
case SDL_GL_STENCIL_SIZE:
#if SDL_VIDEO_OPENGL
attachment = GL_STENCIL;
attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;
#endif
attrib = GL_STENCIL_BITS;
break;
#if SDL_VIDEO_OPENGL
case SDL_GL_ACCUM_RED_SIZE:
attrib = GL_ACCUM_RED_BITS;
break;
case SDL_GL_ACCUM_GREEN_SIZE:
attrib = GL_ACCUM_GREEN_BITS;
break;
case SDL_GL_ACCUM_BLUE_SIZE:
attrib = GL_ACCUM_BLUE_BITS;
break;
case SDL_GL_ACCUM_ALPHA_SIZE:
attrib = GL_ACCUM_ALPHA_BITS;
break;
case SDL_GL_STEREO:
attrib = GL_STEREO;
break;
#else
case SDL_GL_ACCUM_RED_SIZE:
case SDL_GL_ACCUM_GREEN_SIZE:
case SDL_GL_ACCUM_BLUE_SIZE:
case SDL_GL_ACCUM_ALPHA_SIZE:
case SDL_GL_STEREO:
/* none of these are supported in OpenGL ES */
*value = 0;
return 0;
#endif
case SDL_GL_MULTISAMPLEBUFFERS:
attrib = GL_SAMPLE_BUFFERS;
break;
case SDL_GL_MULTISAMPLESAMPLES:
attrib = GL_SAMPLES;
break;
case SDL_GL_CONTEXT_RELEASE_BEHAVIOR:
#if SDL_VIDEO_OPENGL
attrib = GL_CONTEXT_RELEASE_BEHAVIOR;
#else
attrib = GL_CONTEXT_RELEASE_BEHAVIOR_KHR;
#endif
break;
case SDL_GL_BUFFER_SIZE:
{
int rsize = 0, gsize = 0, bsize = 0, asize = 0;
/* There doesn't seem to be a single flag in OpenGL for this! */
if (SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &rsize) < 0) {
return -1;
}
if (SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &gsize) < 0) {
return -1;
}
if (SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &bsize) < 0) {
return -1;
}
if (SDL_GL_GetAttribute(SDL_GL_ALPHA_SIZE, &asize) < 0) {
return -1;
}
*value = rsize + gsize + bsize + asize;
return 0;
}
case SDL_GL_ACCELERATED_VISUAL:
{
/* FIXME: How do we get this information? */
*value = (_this->gl_config.accelerated != 0);
return 0;
}
case SDL_GL_RETAINED_BACKING:
{
*value = _this->gl_config.retained_backing;
return 0;
}
case SDL_GL_CONTEXT_MAJOR_VERSION:
{
*value = _this->gl_config.major_version;
return 0;
}
case SDL_GL_CONTEXT_MINOR_VERSION:
{
*value = _this->gl_config.minor_version;
return 0;
}
case SDL_GL_CONTEXT_EGL:
/* FIXME: SDL_GL_CONTEXT_EGL to be deprecated in SDL 2.1 */
{
if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) {
*value = 1;
}
else {
*value = 0;
}
return 0;
}
case SDL_GL_CONTEXT_FLAGS:
{
*value = _this->gl_config.flags;
return 0;
}
case SDL_GL_CONTEXT_PROFILE_MASK:
{
*value = _this->gl_config.profile_mask;
return 0;
}
case SDL_GL_SHARE_WITH_CURRENT_CONTEXT:
{
*value = _this->gl_config.share_with_current_context;
return 0;
}
case SDL_GL_FRAMEBUFFER_SRGB_CAPABLE:
{
*value = _this->gl_config.framebuffer_srgb_capable;
return 0;
}
default:
return SDL_SetError("Unknown OpenGL attribute");
}
#if SDL_VIDEO_OPENGL
glGetStringFunc = SDL_GL_GetProcAddress("glGetString");
if (!glGetStringFunc) {
return SDL_SetError("Failed getting OpenGL glGetString entry point");
}
if (attachmentattrib && isAtLeastGL3((const char *) glGetStringFunc(GL_VERSION))) {
glGetFramebufferAttachmentParameterivFunc = SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameteriv");
if (glGetFramebufferAttachmentParameterivFunc) {
glGetFramebufferAttachmentParameterivFunc(GL_FRAMEBUFFER, attachment, attachmentattrib, (GLint *) value);
} else {
return SDL_SetError("Failed getting OpenGL glGetFramebufferAttachmentParameteriv entry point");
}
} else
#endif
{
void (APIENTRY *glGetIntegervFunc) (GLenum pname, GLint * params);
glGetIntegervFunc = SDL_GL_GetProcAddress("glGetIntegerv");
if (glGetIntegervFunc) {
glGetIntegervFunc(attrib, (GLint *) value);
} else {
return SDL_SetError("Failed getting OpenGL glGetIntegerv entry point");
}
}
glGetErrorFunc = SDL_GL_GetProcAddress("glGetError");
if (!glGetErrorFunc) {
return SDL_SetError("Failed getting OpenGL glGetError entry point");
}
error = glGetErrorFunc();
if (error != GL_NO_ERROR) {
if (error == GL_INVALID_ENUM) {
return SDL_SetError("OpenGL error: GL_INVALID_ENUM");
} else if (error == GL_INVALID_VALUE) {
return SDL_SetError("OpenGL error: GL_INVALID_VALUE");
}
return SDL_SetError("OpenGL error: %08X", error);
}
return 0;
#else
return SDL_Unsupported();
#endif /* SDL_VIDEO_OPENGL */
}
GL_STENCIL_BITS
#define GL_STENCIL_BITS
Definition: SDL_opengl.h:467
GL_INVALID_ENUM
#define GL_INVALID_ENUM
Definition: SDL_opengl.h:713
GL_SAMPLE_BUFFERS
#define GL_SAMPLE_BUFFERS
Definition: SDL_opengl.h:1832
GL_BACK_LEFT
#define GL_BACK_LEFT
Definition: SDL_opengl.h:492
GL_CONTEXT_RELEASE_BEHAVIOR_KHR
#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR
Definition: SDL_video.c:50
GL_DOUBLEBUFFER
#define GL_DOUBLEBUFFER
Definition: SDL_opengl.h:514
SDL_GL_ACCUM_RED_SIZE
Definition: SDL_video.h:179
SDL_GL_ACCUM_BLUE_SIZE
Definition: SDL_video.h:181
SDL_VideoDevice::minor_version
int minor_version
Definition: SDL_sysvideo.h:308
APIENTRY
#define APIENTRY
Definition: SDL_opengl.h:132
GL_RED_BITS
#define GL_RED_BITS
Definition: SDL_opengl.h:506
GLint
int GLint
Definition: SDL_opengl.h:175
GL_CONTEXT_RELEASE_BEHAVIOR
#define GL_CONTEXT_RELEASE_BEHAVIOR
Definition: SDL_opengl_glext.h:2992
GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE
Definition: SDL_opengl_glext.h:994
SDL_GL_ACCUM_ALPHA_SIZE
Definition: SDL_video.h:182
SDL_VideoDevice::retained_backing
int retained_backing
Definition: SDL_sysvideo.h:314
SDL_VideoDevice::profile_mask
int profile_mask
Definition: SDL_sysvideo.h:310
SDL_GL_ACCELERATED_VISUAL
Definition: SDL_video.h:186
GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
Definition: SDL_opengl_glext.h:996
GL_SAMPLES
#define GL_SAMPLES
Definition: SDL_opengl.h:1833
GL_DEPTH_BITS
#define GL_DEPTH_BITS
Definition: SDL_opengl.h:321
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
GL_VERSION
#define GL_VERSION
Definition: SDL_opengl.h:708
SDL_GL_RED_SIZE
Definition: SDL_video.h:171
GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
Definition: SDL_opengl_glext.h:999
GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
Definition: SDL_opengl_glext.h:997
GL_ACCUM_ALPHA_BITS
#define GL_ACCUM_ALPHA_BITS
Definition: SDL_opengl.h:376
GL_FRAMEBUFFER
#define GL_FRAMEBUFFER
Definition: SDL_opengl_glext.h:1051
SDL_GL_STEREO
Definition: SDL_video.h:183
SDL_GL_CONTEXT_MINOR_VERSION
Definition: SDL_video.h:189
GL_NO_ERROR
#define GL_NO_ERROR
Definition: SDL_opengl.h:712
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
SDL_VideoDevice::accelerated
int accelerated
Definition: SDL_sysvideo.h:306
GL_BLUE_BITS
#define GL_BLUE_BITS
Definition: SDL_opengl.h:508
SDL_GL_CONTEXT_FLAGS
Definition: SDL_video.h:191
isAtLeastGL3
static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr)
Definition: SDL_video.c:2650
SDL_VideoDevice::major_version
int major_version
Definition: SDL_sysvideo.h:307
params
const GLfloat * params
Definition: SDL_opengl_glext.h:371
GL_STENCIL
#define GL_STENCIL
Definition: SDL_opengl.h:519
SDL_GL_STENCIL_SIZE
Definition: SDL_video.h:178
SDL_GL_CONTEXT_MAJOR_VERSION
Definition: SDL_video.h:188
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
SDL_GL_MULTISAMPLEBUFFERS
Definition: SDL_video.h:184
SDL_VideoDevice::double_buffer
int double_buffer
Definition: SDL_sysvideo.h:298
SDL_GL_RETAINED_BACKING
Definition: SDL_video.h:187
GL_ALPHA_BITS
#define GL_ALPHA_BITS
Definition: SDL_opengl.h:505
target
GLenum target
Definition: SDL_opengl_glext.h:1551
SDL_GL_ALPHA_SIZE
Definition: SDL_video.h:174
SDL_GL_CONTEXT_RELEASE_BEHAVIOR
Definition: SDL_video.h:195
GL_DEPTH
#define GL_DEPTH
Definition: SDL_opengl.h:518
GL_ACCUM_RED_BITS
#define GL_ACCUM_RED_BITS
Definition: SDL_opengl.h:373
GL_INVALID_VALUE
#define GL_INVALID_VALUE
Definition: SDL_opengl.h:714
SDL_GL_ACCUM_GREEN_SIZE
Definition: SDL_video.h:180
SDL_VideoDevice::framebuffer_srgb_capable
int framebuffer_srgb_capable
Definition: SDL_sysvideo.h:313
GLubyte
unsigned char GLubyte
Definition: SDL_opengl.h:176
SDL_GL_DEPTH_SIZE
Definition: SDL_video.h:177
GL_ACCUM_GREEN_BITS
#define GL_ACCUM_GREEN_BITS
Definition: SDL_opengl.h:374
GL_STEREO
#define GL_STEREO
Definition: SDL_opengl.h:515
SDL_GL_CONTEXT_PROFILE_MASK
Definition: SDL_video.h:192
SDL_VideoDevice::share_with_current_context
int share_with_current_context
Definition: SDL_sysvideo.h:311
SDL_GL_CONTEXT_EGL
Definition: SDL_video.h:190
SDL_GL_DOUBLEBUFFER
Definition: SDL_video.h:176
GLenum
unsigned int GLenum
Definition: SDL_opengl.h:169
pname
GLenum pname
Definition: SDL_opengl_glext.h:530
SDL_VideoDevice::flags
int flags
Definition: SDL_sysvideo.h:309
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
void
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
Definition: SDL_dynapi_procs.h:93
GL_ACCUM_BLUE_BITS
#define GL_ACCUM_BLUE_BITS
Definition: SDL_opengl.h:375
attachment
GLenum attachment
Definition: SDL_opengl_glext.h:1178
SDL_GL_MULTISAMPLESAMPLES
Definition: SDL_video.h:185
SDL_GL_GetProcAddress
void * SDL_GL_GetProcAddress(const char *proc)
Get the address of an OpenGL function.
Definition: SDL_video.c:2611
SDL_GL_SHARE_WITH_CURRENT_CONTEXT
Definition: SDL_video.h:193
GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
Definition: SDL_opengl_glext.h:998
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
Definition: SDL_video.h:194
SDL_GL_GetAttribute
int SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
Get the actual value for an attribute from the current context.
Definition: SDL_video.c:2899
GL_GREEN_BITS
#define GL_GREEN_BITS
Definition: SDL_opengl.h:507
SDL_GL_CONTEXT_PROFILE_ES
Definition: SDL_video.h:202
SDL_GL_GREEN_SIZE
Definition: SDL_video.h:172
SDL_GL_BLUE_SIZE
Definition: SDL_video.h:173
SDL_GL_BUFFER_SIZE
Definition: SDL_video.h:175
SDL_Unsupported
#define SDL_Unsupported()
Definition: SDL_error.h:53
GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
Definition: SDL_opengl_glext.h:995

SDL_GLContext SDL_GL_GetCurrentContext | ( | void |  | ) |

Get the currently active OpenGL context.

Definition at line 3199 of file SDL_video.c.

References SDL_VideoDevice::current_glctx_tls, NULL, SDL_TLSGet, and SDL_UninitializedVideo().

Referenced by SDL_GL_DeleteContext(), SDL_GL_GetSwapInterval(), SDL_GL_MakeCurrent(), and SDL_GL_SetSwapInterval().

{
if (!_this) {
SDL_UninitializedVideo();
return NULL;
}
return (SDL_GLContext)SDL_TLSGet(_this->current_glctx_tls);
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_GLContext
void * SDL_GLContext
An opaque handle to an OpenGL context.
Definition: SDL_video.h:164
SDL_TLSGet
#define SDL_TLSGet
Definition: SDL_dynapi_overrides.h:485
NULL
#define NULL
Definition: begin_code.h:143
SDL_VideoDevice::current_glctx_tls
SDL_TLSID current_glctx_tls
Definition: SDL_sysvideo.h:328
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

SDL_Window* SDL_GL_GetCurrentWindow | ( | void |  | ) |

Get the currently active OpenGL window.

Definition at line 3189 of file SDL_video.c.

References SDL_VideoDevice::current_glwin_tls, NULL, SDL_TLSGet, and SDL_UninitializedVideo().

Referenced by SDL_GL_MakeCurrent(), and SDL_GL_SwapWindow().

{
if (!_this) {
SDL_UninitializedVideo();
return NULL;
}
return (SDL_Window *)SDL_TLSGet(_this->current_glwin_tls);
}
SDL_VideoDevice::current_glwin_tls
SDL_TLSID current_glwin_tls
Definition: SDL_sysvideo.h:327
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_TLSGet
#define SDL_TLSGet
Definition: SDL_dynapi_overrides.h:485
NULL
#define NULL
Definition: begin_code.h:143
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

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).

Parameters

  window | Window from which the drawable size should be queried
  w | Pointer to variable for storing the width in pixels, may be NULL
  h | Pointer to variable for storing the height in pixels, may be NULL

This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with high-DPI support (Apple calls this "Retina"), and not disabled by the SDL_HINT_VIDEO_HIGHDPI_DISABLED hint.

See also
  SDL_GetWindowSize()
  SDL_CreateWindow()

Definition at line 3208 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDevice::GL_GetDrawableSize, and SDL_GetWindowSize().

{
CHECK_WINDOW_MAGIC(window,);
if (_this->GL_GetDrawableSize) {
_this->GL_GetDrawableSize(_this, window, w, h);
} else {
SDL_GetWindowSize(window, w, h);
}
}
SDL_VideoDevice::GL_GetDrawableSize
void(* GL_GetDrawableSize)(_THIS, SDL_Window *window, int *w, int *h)
Definition: SDL_sysvideo.h:239
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_GetWindowSize
void SDL_GetWindowSize(SDL_Window *window, int *w, int *h)
Get the size of a window&#39;s client area.
Definition: SDL_video.c:1851
w
GLubyte GLubyte GLubyte GLubyte w
Definition: SDL_opengl_glext.h:731
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
h
GLfloat GLfloat GLfloat GLfloat h
Definition: SDL_opengl_glext.h:1946

void* SDL_GL_GetProcAddress | ( | const char * | proc | ) |

Get the address of an OpenGL function.

Definition at line 2611 of file SDL_video.c.

References SDL_VideoDevice::driver_loaded, SDL_VideoDevice::gl_config, SDL_VideoDevice::GL_GetProcAddress, NULL, SDL_SetError, and SDL_UninitializedVideo().

Referenced by SDL_GL_ExtensionSupported(), SDL_GL_GetAttribute(), and ShouldUseTextureFramebuffer().

{
void *func;
if (!_this) {
SDL_UninitializedVideo();
return NULL;
}
func = NULL;
if (_this->GL_GetProcAddress) {
if (_this->gl_config.driver_loaded) {
func = _this->GL_GetProcAddress(_this, proc);
} else {
SDL_SetError("No GL driver has been loaded");
}
} else {
SDL_SetError("No dynamic GL support in video driver");
}
return func;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
SDL_VideoDevice::driver_loaded
int driver_loaded
Definition: SDL_sysvideo.h:315
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
func
GLenum func
Definition: SDL_opengl_glext.h:657
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419
SDL_VideoDevice::GL_GetProcAddress
void *(* GL_GetProcAddress)(_THIS, const char *proc)
Definition: SDL_sysvideo.h:235

int SDL_GL_GetSwapInterval | ( | void |  | ) |

Get the swap interval for the current OpenGL context.

Returns
  0 if there is no vertical retrace synchronization, 1 if the buffer swap is synchronized with the vertical retrace, and -1 if late swaps happen immediately instead of waiting for the next retrace. If the system can't determine the swap interval, or there isn't a valid current context, this will return 0 as a safe default.

See also
  SDL_GL_SetSwapInterval()

Definition at line 3234 of file SDL_video.c.

References SDL_VideoDevice::GL_GetSwapInterval, NULL, and SDL_GL_GetCurrentContext().

{
if (!_this) {
return 0;
} else if (SDL_GL_GetCurrentContext() == NULL) {
return 0;
} else if (_this->GL_GetSwapInterval) {
return _this->GL_GetSwapInterval(_this);
} else {
return 0;
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
NULL
#define NULL
Definition: begin_code.h:143
SDL_GL_GetCurrentContext
SDL_GLContext SDL_GL_GetCurrentContext(void)
Get the currently active OpenGL context.
Definition: SDL_video.c:3199
SDL_VideoDevice::GL_GetSwapInterval
int(* GL_GetSwapInterval)(_THIS)
Definition: SDL_sysvideo.h:241

int SDL_GL_LoadLibrary | ( | const char * | path | ) |

Dynamically load an OpenGL library.

Parameters

  path | The platform dependent OpenGL library name, or NULL to open the default OpenGL library.

Returns
  0 on success, or -1 if the library couldn't be loaded.

This should be done after initializing the video driver, but before creating any OpenGL windows. If no OpenGL library is loaded, the default library will be loaded upon creation of the first OpenGL window.

Note
  If you do this, you need to retrieve all of the GL functions used in your program from the dynamic library using SDL_GL_GetProcAddress().

See also
  SDL_GL_GetProcAddress()
  SDL_GL_UnloadLibrary()

Definition at line 2582 of file SDL_video.c.

References SDL_VideoDevice::driver_loaded, SDL_VideoDevice::driver_path, SDL_VideoDevice::gl_config, SDL_VideoDevice::GL_LoadLibrary, SDL_VideoDevice::GL_UnloadLibrary, retval, SDL_SetError, SDL_strcmp, and SDL_UninitializedVideo().

Referenced by SDL_CreateWindow(), and SDL_RecreateWindow().

{
int retval;
if (!_this) {
return SDL_UninitializedVideo();
}
if (_this->gl_config.driver_loaded) {
if (path && SDL_strcmp(path, _this->gl_config.driver_path) != 0) {
return SDL_SetError("OpenGL library already loaded");
}
retval = 0;
} else {
if (!_this->GL_LoadLibrary) {
return SDL_SetError("No dynamic GL support in video driver");
}
retval = _this->GL_LoadLibrary(_this, path);
}
if (retval == 0) {
++_this->gl_config.driver_loaded;
} else {
if (_this->GL_UnloadLibrary) {
_this->GL_UnloadLibrary(_this);
}
}
return (retval);
}
SDL_VideoDevice::GL_LoadLibrary
int(* GL_LoadLibrary)(_THIS, const char *path)
Definition: SDL_sysvideo.h:234
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_VideoDevice::driver_loaded
int driver_loaded
Definition: SDL_sysvideo.h:315
SDL_VideoDevice::driver_path
char driver_path[256]
Definition: SDL_sysvideo.h:316
SDL_VideoDevice::GL_UnloadLibrary
void(* GL_UnloadLibrary)(_THIS)
Definition: SDL_sysvideo.h:236
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419
path
GLsizei const GLchar *const * path
Definition: SDL_opengl_glext.h:3730
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423

int SDL_GL_MakeCurrent | ( | SDL_Window * | window,
|  | SDL_GLContext | context
| ) |  |

Set up an OpenGL context for rendering into an OpenGL window.

Note
  The context must have been created with a compatible window.

Definition at line 3158 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_VideoDevice::current_glctx, SDL_VideoDevice::current_glctx_tls, SDL_VideoDevice::current_glwin, SDL_VideoDevice::current_glwin_tls, SDL_Window::flags, SDL_VideoDevice::GL_MakeCurrent, NULL, retval, SDL_GL_GetCurrentContext(), SDL_GL_GetCurrentWindow(), SDL_SetError, SDL_TLSSet, SDL_WINDOW_OPENGL, and window.

Referenced by SDL_DestroyWindow(), and SDL_GL_DeleteContext().

{
int retval;
if (window == SDL_GL_GetCurrentWindow() &&
ctx == SDL_GL_GetCurrentContext()) {
/* We're already current. */
return 0;
}
if (!ctx) {
window = NULL;
} else {
CHECK_WINDOW_MAGIC(window, -1);
if (!(window->flags & SDL_WINDOW_OPENGL)) {
return SDL_SetError("The specified window isn't an OpenGL window");
}
}
retval = _this->GL_MakeCurrent(_this, window, ctx);
if (retval == 0) {
_this->current_glwin = window;
_this->current_glctx = ctx;
SDL_TLSSet(_this->current_glwin_tls, window, NULL);
SDL_TLSSet(_this->current_glctx_tls, ctx, NULL);
}
return retval;
}
SDL_TLSSet
#define SDL_TLSSet
Definition: SDL_dynapi_overrides.h:486
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_VideoDevice::current_glwin_tls
SDL_TLSID current_glwin_tls
Definition: SDL_sysvideo.h:327
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_VideoDevice::current_glctx
SDL_GLContext current_glctx
Definition: SDL_sysvideo.h:326
SDL_VideoDevice::GL_MakeCurrent
int(* GL_MakeCurrent)(_THIS, SDL_Window *window, SDL_GLContext context)
Definition: SDL_sysvideo.h:238
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_VideoDevice::current_glctx_tls
SDL_TLSID current_glctx_tls
Definition: SDL_sysvideo.h:328
SDL_GL_GetCurrentContext
SDL_GLContext SDL_GL_GetCurrentContext(void)
Get the currently active OpenGL context.
Definition: SDL_video.c:3199
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_GL_GetCurrentWindow
SDL_Window * SDL_GL_GetCurrentWindow(void)
Get the currently active OpenGL window.
Definition: SDL_video.c:3189
SDL_VideoDevice::current_glwin
SDL_Window * current_glwin
Definition: SDL_sysvideo.h:325

void SDL_GL_ResetAttributes | ( | void |  | ) |

Reset all previously set OpenGL context attributes to their default values.

Definition at line 2740 of file SDL_video.c.

References SDL_VideoDevice::accelerated, SDL_VideoDevice::accum_alpha_size, SDL_VideoDevice::accum_blue_size, SDL_VideoDevice::accum_green_size, SDL_VideoDevice::accum_red_size, SDL_VideoDevice::alpha_size, SDL_VideoDevice::blue_size, SDL_VideoDevice::buffer_size, SDL_VideoDevice::depth_size, SDL_VideoDevice::double_buffer, SDL_VideoDevice::flags, SDL_VideoDevice::framebuffer_srgb_capable, SDL_VideoDevice::gl_config, SDL_VideoDevice::green_size, SDL_VideoDevice::major_version, SDL_VideoDevice::minor_version, SDL_VideoDevice::multisamplebuffers, SDL_VideoDevice::multisamplesamples, SDL_VideoDevice::profile_mask, SDL_VideoDevice::red_size, SDL_VideoDevice::release_behavior, SDL_VideoDevice::retained_backing, SDL_GL_CONTEXT_PROFILE_ES, SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH, SDL_VideoDevice::share_with_current_context, SDL_VideoDevice::stencil_size, and SDL_VideoDevice::stereo.

Referenced by SDL_VideoInit().

{
if (!_this) {
return;
}
_this->gl_config.red_size = 3;
_this->gl_config.green_size = 3;
_this->gl_config.blue_size = 2;
_this->gl_config.alpha_size = 0;
_this->gl_config.buffer_size = 0;
_this->gl_config.depth_size = 16;
_this->gl_config.stencil_size = 0;
_this->gl_config.double_buffer = 1;
_this->gl_config.accum_red_size = 0;
_this->gl_config.accum_green_size = 0;
_this->gl_config.accum_blue_size = 0;
_this->gl_config.accum_alpha_size = 0;
_this->gl_config.stereo = 0;
_this->gl_config.multisamplebuffers = 0;
_this->gl_config.multisamplesamples = 0;
_this->gl_config.retained_backing = 1;
_this->gl_config.accelerated = -1; /* accelerated or not, both are fine */
_this->gl_config.profile_mask = 0;
#if SDL_VIDEO_OPENGL
_this->gl_config.major_version = 2;
_this->gl_config.minor_version = 1;
#elif SDL_VIDEO_OPENGL_ES2
_this->gl_config.major_version = 2;
_this->gl_config.minor_version = 0;
_this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
#elif SDL_VIDEO_OPENGL_ES
_this->gl_config.major_version = 1;
_this->gl_config.minor_version = 1;
_this->gl_config.profile_mask = SDL_GL_CONTEXT_PROFILE_ES;
#endif
_this->gl_config.flags = 0;
_this->gl_config.framebuffer_srgb_capable = 0;
_this->gl_config.release_behavior = SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH;
_this->gl_config.share_with_current_context = 0;
}
SDL_VideoDevice::accum_alpha_size
int accum_alpha_size
Definition: SDL_sysvideo.h:302
SDL_VideoDevice::accum_blue_size
int accum_blue_size
Definition: SDL_sysvideo.h:301
SDL_VideoDevice::buffer_size
int buffer_size
Definition: SDL_sysvideo.h:296
SDL_VideoDevice::minor_version
int minor_version
Definition: SDL_sysvideo.h:308
SDL_VideoDevice::blue_size
int blue_size
Definition: SDL_sysvideo.h:293
SDL_VideoDevice::accum_red_size
int accum_red_size
Definition: SDL_sysvideo.h:299
SDL_VideoDevice::retained_backing
int retained_backing
Definition: SDL_sysvideo.h:314
SDL_VideoDevice::profile_mask
int profile_mask
Definition: SDL_sysvideo.h:310
SDL_VideoDevice::stereo
int stereo
Definition: SDL_sysvideo.h:303
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
SDL_VideoDevice::accelerated
int accelerated
Definition: SDL_sysvideo.h:306
SDL_VideoDevice::multisamplebuffers
int multisamplebuffers
Definition: SDL_sysvideo.h:304
SDL_VideoDevice::multisamplesamples
int multisamplesamples
Definition: SDL_sysvideo.h:305
SDL_VideoDevice::major_version
int major_version
Definition: SDL_sysvideo.h:307
SDL_VideoDevice::depth_size
int depth_size
Definition: SDL_sysvideo.h:295
SDL_VideoDevice::red_size
int red_size
Definition: SDL_sysvideo.h:291
SDL_VideoDevice::double_buffer
int double_buffer
Definition: SDL_sysvideo.h:298
SDL_VideoDevice::green_size
int green_size
Definition: SDL_sysvideo.h:292
SDL_VideoDevice::alpha_size
int alpha_size
Definition: SDL_sysvideo.h:294
SDL_VideoDevice::framebuffer_srgb_capable
int framebuffer_srgb_capable
Definition: SDL_sysvideo.h:313
SDL_VideoDevice::release_behavior
int release_behavior
Definition: SDL_sysvideo.h:312
SDL_VideoDevice::stencil_size
int stencil_size
Definition: SDL_sysvideo.h:297
SDL_VideoDevice::share_with_current_context
int share_with_current_context
Definition: SDL_sysvideo.h:311
SDL_VideoDevice::flags
int flags
Definition: SDL_sysvideo.h:309
SDL_VideoDevice::accum_green_size
int accum_green_size
Definition: SDL_sysvideo.h:300
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
Definition: SDL_video.h:216
SDL_GL_CONTEXT_PROFILE_ES
Definition: SDL_video.h:202

int SDL_GL_SetAttribute | ( | SDL_GLattr | attr,
|  | int | value
| ) |  |

Set an OpenGL window attribute before window creation.

Definition at line 2784 of file SDL_video.c.

References SDL_VideoDevice::accelerated, SDL_VideoDevice::accum_alpha_size, SDL_VideoDevice::accum_blue_size, SDL_VideoDevice::accum_green_size, SDL_VideoDevice::accum_red_size, SDL_VideoDevice::alpha_size, SDL_VideoDevice::blue_size, SDL_VideoDevice::buffer_size, SDL_VideoDevice::depth_size, SDL_VideoDevice::double_buffer, SDL_VideoDevice::flags, SDL_VideoDevice::framebuffer_srgb_capable, SDL_VideoDevice::gl_config, SDL_VideoDevice::green_size, SDL_VideoDevice::major_version, SDL_VideoDevice::minor_version, SDL_VideoDevice::multisamplebuffers, SDL_VideoDevice::multisamplesamples, SDL_VideoDevice::profile_mask, SDL_VideoDevice::red_size, SDL_VideoDevice::release_behavior, SDL_VideoDevice::retained_backing, retval, SDL_GL_ACCELERATED_VISUAL, SDL_GL_ACCUM_ALPHA_SIZE, SDL_GL_ACCUM_BLUE_SIZE, SDL_GL_ACCUM_GREEN_SIZE, SDL_GL_ACCUM_RED_SIZE, SDL_GL_ALPHA_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_CONTEXT_DEBUG_FLAG, SDL_GL_CONTEXT_EGL, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG, SDL_GL_CONTEXT_MAJOR_VERSION, SDL_GL_CONTEXT_MINOR_VERSION, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY, SDL_GL_CONTEXT_PROFILE_CORE, SDL_GL_CONTEXT_PROFILE_ES, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_RELEASE_BEHAVIOR, SDL_GL_CONTEXT_RESET_ISOLATION_FLAG, SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG, SDL_GL_DEPTH_SIZE, SDL_GL_DOUBLEBUFFER, SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, SDL_GL_GREEN_SIZE, SDL_GL_MULTISAMPLEBUFFERS, SDL_GL_MULTISAMPLESAMPLES, SDL_GL_RED_SIZE, SDL_GL_RETAINED_BACKING, SDL_GL_SHARE_WITH_CURRENT_CONTEXT, SDL_GL_STENCIL_SIZE, SDL_GL_STEREO, SDL_SetError, SDL_UninitializedVideo(), SDL_Unsupported, SDL_VideoDevice::share_with_current_context, SDL_VideoDevice::stencil_size, and SDL_VideoDevice::stereo.

{
#if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
int retval;
if (!_this) {
return SDL_UninitializedVideo();
}
retval = 0;
switch (attr) {
case SDL_GL_RED_SIZE:
_this->gl_config.red_size = value;
break;
case SDL_GL_GREEN_SIZE:
_this->gl_config.green_size = value;
break;
case SDL_GL_BLUE_SIZE:
_this->gl_config.blue_size = value;
break;
case SDL_GL_ALPHA_SIZE:
_this->gl_config.alpha_size = value;
break;
case SDL_GL_DOUBLEBUFFER:
_this->gl_config.double_buffer = value;
break;
case SDL_GL_BUFFER_SIZE:
_this->gl_config.buffer_size = value;
break;
case SDL_GL_DEPTH_SIZE:
_this->gl_config.depth_size = value;
break;
case SDL_GL_STENCIL_SIZE:
_this->gl_config.stencil_size = value;
break;
case SDL_GL_ACCUM_RED_SIZE:
_this->gl_config.accum_red_size = value;
break;
case SDL_GL_ACCUM_GREEN_SIZE:
_this->gl_config.accum_green_size = value;
break;
case SDL_GL_ACCUM_BLUE_SIZE:
_this->gl_config.accum_blue_size = value;
break;
case SDL_GL_ACCUM_ALPHA_SIZE:
_this->gl_config.accum_alpha_size = value;
break;
case SDL_GL_STEREO:
_this->gl_config.stereo = value;
break;
case SDL_GL_MULTISAMPLEBUFFERS:
_this->gl_config.multisamplebuffers = value;
break;
case SDL_GL_MULTISAMPLESAMPLES:
_this->gl_config.multisamplesamples = value;
break;
case SDL_GL_ACCELERATED_VISUAL:
_this->gl_config.accelerated = value;
break;
case SDL_GL_RETAINED_BACKING:
_this->gl_config.retained_backing = value;
break;
case SDL_GL_CONTEXT_MAJOR_VERSION:
_this->gl_config.major_version = value;
break;
case SDL_GL_CONTEXT_MINOR_VERSION:
_this->gl_config.minor_version = value;
break;
case SDL_GL_CONTEXT_EGL:
/* FIXME: SDL_GL_CONTEXT_EGL to be deprecated in SDL 2.1 */
if (value != 0) {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
} else {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0);
};
break;
case SDL_GL_CONTEXT_FLAGS:
if (value & ~(SDL_GL_CONTEXT_DEBUG_FLAG |
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG |
SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG |
SDL_GL_CONTEXT_RESET_ISOLATION_FLAG)) {
retval = SDL_SetError("Unknown OpenGL context flag %d", value);
break;
}
_this->gl_config.flags = value;
break;
case SDL_GL_CONTEXT_PROFILE_MASK:
if (value != 0 &&
value != SDL_GL_CONTEXT_PROFILE_CORE &&
value != SDL_GL_CONTEXT_PROFILE_COMPATIBILITY &&
value != SDL_GL_CONTEXT_PROFILE_ES) {
retval = SDL_SetError("Unknown OpenGL context profile %d", value);
break;
}
_this->gl_config.profile_mask = value;
break;
case SDL_GL_SHARE_WITH_CURRENT_CONTEXT:
_this->gl_config.share_with_current_context = value;
break;
case SDL_GL_FRAMEBUFFER_SRGB_CAPABLE:
_this->gl_config.framebuffer_srgb_capable = value;
break;
case SDL_GL_CONTEXT_RELEASE_BEHAVIOR:
_this->gl_config.release_behavior = value;
break;
default:
retval = SDL_SetError("Unknown OpenGL attribute");
break;
}
return retval;
#else
return SDL_Unsupported();
#endif /* SDL_VIDEO_OPENGL */
}
SDL_VideoDevice::accum_alpha_size
int accum_alpha_size
Definition: SDL_sysvideo.h:302
SDL_VideoDevice::accum_blue_size
int accum_blue_size
Definition: SDL_sysvideo.h:301
SDL_GL_ACCUM_RED_SIZE
Definition: SDL_video.h:179
SDL_VideoDevice::buffer_size
int buffer_size
Definition: SDL_sysvideo.h:296
SDL_GL_ACCUM_BLUE_SIZE
Definition: SDL_video.h:181
SDL_VideoDevice::minor_version
int minor_version
Definition: SDL_sysvideo.h:308
SDL_VideoDevice::blue_size
int blue_size
Definition: SDL_sysvideo.h:293
SDL_VideoDevice::accum_red_size
int accum_red_size
Definition: SDL_sysvideo.h:299
SDL_GL_ACCUM_ALPHA_SIZE
Definition: SDL_video.h:182
SDL_VideoDevice::retained_backing
int retained_backing
Definition: SDL_sysvideo.h:314
SDL_VideoDevice::profile_mask
int profile_mask
Definition: SDL_sysvideo.h:310
SDL_GL_ACCELERATED_VISUAL
Definition: SDL_video.h:186
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG
Definition: SDL_video.h:208
SDL_GL_RED_SIZE
Definition: SDL_video.h:171
SDL_VideoDevice::stereo
int stereo
Definition: SDL_sysvideo.h:303
SDL_GL_STEREO
Definition: SDL_video.h:183
SDL_GL_CONTEXT_MINOR_VERSION
Definition: SDL_video.h:189
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
SDL_VideoDevice::accelerated
int accelerated
Definition: SDL_sysvideo.h:306
SDL_GL_CONTEXT_FLAGS
Definition: SDL_video.h:191
SDL_VideoDevice::multisamplebuffers
int multisamplebuffers
Definition: SDL_sysvideo.h:304
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_VideoDevice::multisamplesamples
int multisamplesamples
Definition: SDL_sysvideo.h:305
SDL_VideoDevice::major_version
int major_version
Definition: SDL_sysvideo.h:307
SDL_GL_STENCIL_SIZE
Definition: SDL_video.h:178
SDL_GL_CONTEXT_MAJOR_VERSION
Definition: SDL_video.h:188
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
SDL_GL_MULTISAMPLEBUFFERS
Definition: SDL_video.h:184
SDL_VideoDevice::depth_size
int depth_size
Definition: SDL_sysvideo.h:295
SDL_VideoDevice::red_size
int red_size
Definition: SDL_sysvideo.h:291
SDL_VideoDevice::double_buffer
int double_buffer
Definition: SDL_sysvideo.h:298
SDL_GL_RETAINED_BACKING
Definition: SDL_video.h:187
SDL_GL_ALPHA_SIZE
Definition: SDL_video.h:174
SDL_GL_CONTEXT_RELEASE_BEHAVIOR
Definition: SDL_video.h:195
SDL_VideoDevice::green_size
int green_size
Definition: SDL_sysvideo.h:292
SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
Definition: SDL_video.h:201
SDL_VideoDevice::alpha_size
int alpha_size
Definition: SDL_sysvideo.h:294
SDL_GL_ACCUM_GREEN_SIZE
Definition: SDL_video.h:180
SDL_VideoDevice::framebuffer_srgb_capable
int framebuffer_srgb_capable
Definition: SDL_sysvideo.h:313
SDL_GL_DEPTH_SIZE
Definition: SDL_video.h:177
SDL_VideoDevice::release_behavior
int release_behavior
Definition: SDL_sysvideo.h:312
SDL_VideoDevice::stencil_size
int stencil_size
Definition: SDL_sysvideo.h:297
SDL_GL_CONTEXT_PROFILE_MASK
Definition: SDL_video.h:192
SDL_VideoDevice::share_with_current_context
int share_with_current_context
Definition: SDL_sysvideo.h:311
SDL_GL_CONTEXT_EGL
Definition: SDL_video.h:190
SDL_GL_DOUBLEBUFFER
Definition: SDL_video.h:176
SDL_VideoDevice::flags
int flags
Definition: SDL_sysvideo.h:309
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_GL_MULTISAMPLESAMPLES
Definition: SDL_video.h:185
SDL_GL_SetAttribute
int SDL_GL_SetAttribute(SDL_GLattr attr, int value)
Set an OpenGL window attribute before window creation.
Definition: SDL_video.c:2784
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419
SDL_GL_SHARE_WITH_CURRENT_CONTEXT
Definition: SDL_video.h:193
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
Definition: SDL_video.h:194
SDL_VideoDevice::accum_green_size
int accum_green_size
Definition: SDL_sysvideo.h:300
SDL_GL_CONTEXT_DEBUG_FLAG
Definition: SDL_video.h:207
SDL_GL_CONTEXT_PROFILE_ES
Definition: SDL_video.h:202
SDL_GL_GREEN_SIZE
Definition: SDL_video.h:172
SDL_GL_CONTEXT_RESET_ISOLATION_FLAG
Definition: SDL_video.h:210
SDL_GL_BLUE_SIZE
Definition: SDL_video.h:173
SDL_GL_BUFFER_SIZE
Definition: SDL_video.h:175
SDL_Unsupported
#define SDL_Unsupported()
Definition: SDL_error.h:53
SDL_GL_CONTEXT_PROFILE_CORE
Definition: SDL_video.h:200
SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG
Definition: SDL_video.h:209

int SDL_GL_SetSwapInterval | ( | int | interval | ) |

Set the swap interval for the current OpenGL context.

Parameters

  interval | 0 for immediate updates, 1 for updates synchronized with the vertical retrace. If the system supports it, you may specify -1 to allow late swaps to happen immediately instead of waiting for the next retrace.

Returns
  0 on success, or -1 if setting the swap interval is not supported.

See also
  SDL_GL_GetSwapInterval()

Definition at line 3220 of file SDL_video.c.

References SDL_VideoDevice::GL_SetSwapInterval, NULL, SDL_GL_GetCurrentContext(), SDL_SetError, and SDL_UninitializedVideo().

{
if (!_this) {
return SDL_UninitializedVideo();
} else if (SDL_GL_GetCurrentContext() == NULL) {
return SDL_SetError("No OpenGL context has been made current");
} else if (_this->GL_SetSwapInterval) {
return _this->GL_SetSwapInterval(_this, interval);
} else {
return SDL_SetError("Setting the swap interval is not supported");
}
}
SDL_VideoDevice::GL_SetSwapInterval
int(* GL_SetSwapInterval)(_THIS, int interval)
Definition: SDL_sysvideo.h:240
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_GL_GetCurrentContext
SDL_GLContext SDL_GL_GetCurrentContext(void)
Get the currently active OpenGL context.
Definition: SDL_video.c:3199
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

void SDL_GL_SwapWindow | ( | SDL_Window * | window | ) |

Swap the OpenGL buffers for a window, if double-buffering is supported.

Definition at line 3248 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::GL_SwapWindow, SDL_GL_GetCurrentWindow(), SDL_SetError, and SDL_WINDOW_OPENGL.

{
CHECK_WINDOW_MAGIC(window,);
if (!(window->flags & SDL_WINDOW_OPENGL)) {
SDL_SetError("The specified window isn't an OpenGL window");
return;
}
if (SDL_GL_GetCurrentWindow() != window) {
SDL_SetError("The specified window has not been made current");
return;
}
_this->GL_SwapWindow(_this, window);
}
SDL_VideoDevice::GL_SwapWindow
void(* GL_SwapWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:242
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_GL_GetCurrentWindow
SDL_Window * SDL_GL_GetCurrentWindow(void)
Get the currently active OpenGL window.
Definition: SDL_video.c:3189

void SDL_GL_UnloadLibrary | ( | void |  | ) |

Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().

See also
  SDL_GL_LoadLibrary()

Definition at line 2633 of file SDL_video.c.

References SDL_VideoDevice::driver_loaded, SDL_VideoDevice::gl_config, SDL_VideoDevice::GL_UnloadLibrary, SDL_INLINE, and SDL_UninitializedVideo().

Referenced by SDL_DestroyWindow(), and SDL_RecreateWindow().

{
if (!_this) {
SDL_UninitializedVideo();
return;
}
if (_this->gl_config.driver_loaded > 0) {
if (--_this->gl_config.driver_loaded > 0) {
return;
}
if (_this->GL_UnloadLibrary) {
_this->GL_UnloadLibrary(_this);
}
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
SDL_VideoDevice::driver_loaded
int driver_loaded
Definition: SDL_sysvideo.h:315
SDL_VideoDevice::GL_UnloadLibrary
void(* GL_UnloadLibrary)(_THIS)
Definition: SDL_sysvideo.h:236
SDL_UninitializedVideo
static int SDL_UninitializedVideo()
Definition: SDL_video.c:419

SDL_bool SDL_HasScreenKeyboardSupport | ( | void |  | ) |

Returns whether the platform has some screen keyboard support.

Returns
  SDL_TRUE if some keyboard support is available else SDL_FALSE.

Note
  Not all screen keyboard functions are supported on all platforms.

See also
  SDL_IsScreenKeyboardShown()

Definition at line 3453 of file SDL_video.c.

References SDL_VideoDevice::HasScreenKeyboardSupport, and SDL_FALSE.

Referenced by SDL_VideoInit().

{
if (_this && _this->HasScreenKeyboardSupport) {
return _this->HasScreenKeyboardSupport(_this);
}
return SDL_FALSE;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::HasScreenKeyboardSupport
SDL_bool(* HasScreenKeyboardSupport)(_THIS)
Definition: SDL_sysvideo.h:260
SDL_FALSE
Definition: SDL_stdinc.h:128

void SDL_HideWindow | ( | SDL_Window * | window | ) |

Hide a window.

See also
  SDL_ShowWindow()

Definition at line 1950 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::HideWindow, SDL_Window::is_hiding, SDL_FALSE, SDL_SendWindowEvent(), SDL_TRUE, SDL_UpdateFullscreenMode(), SDL_WINDOW_SHOWN, and SDL_WINDOWEVENT_HIDDEN.

Referenced by SDL_DestroyWindow(), and SDL_RecreateWindow().

{
CHECK_WINDOW_MAGIC(window,);
if (!(window->flags & SDL_WINDOW_SHOWN)) {
return;
}
window->is_hiding = SDL_TRUE;
SDL_UpdateFullscreenMode(window, SDL_FALSE);
if (_this->HideWindow) {
_this->HideWindow(_this, window);
}
window->is_hiding = SDL_FALSE;
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIDDEN, 0, 0);
}
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:74
SDL_WINDOWEVENT_HIDDEN
Definition: SDL_video.h:140
SDL_WINDOW_SHOWN
Definition: SDL_video.h:100
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::HideWindow
void(* HideWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:204
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_FALSE
Definition: SDL_stdinc.h:128
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_Window::is_hiding
SDL_bool is_hiding
Definition: SDL_sysvideo.h:96

SDL_bool SDL_IsScreenKeyboardShown | ( | SDL_Window * | window | ) |

Returns whether the screen keyboard is shown for given window.

Parameters

  window | The window for which screen keyboard should be queried.

Returns
  SDL_TRUE if screen keyboard is shown else SDL_FALSE.

See also
  SDL_HasScreenKeyboardSupport()

Definition at line 3462 of file SDL_video.c.

References SDL_VideoDevice::IsScreenKeyboardShown, and SDL_FALSE.

{
if (window && _this && _this->IsScreenKeyboardShown) {
return _this->IsScreenKeyboardShown(_this, window);
}
return SDL_FALSE;
}
SDL_VideoDevice::IsScreenKeyboardShown
SDL_bool(* IsScreenKeyboardShown)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:263
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_FALSE
Definition: SDL_stdinc.h:128

SDL_bool SDL_IsScreenSaverEnabled | ( | void |  | ) |

Returns whether the screensaver is currently enabled (default on).

See also
  SDL_EnableScreenSaver()
  SDL_DisableScreenSaver()

Definition at line 2493 of file SDL_video.c.

References SDL_FALSE, SDL_TRUE, and SDL_VideoDevice::suspend_screensaver.

{
if (!_this) {
return SDL_TRUE;
}
return _this->suspend_screensaver ? SDL_FALSE : SDL_TRUE;
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_VideoDevice::suspend_screensaver
SDL_bool suspend_screensaver
Definition: SDL_sysvideo.h:278

SDL_bool SDL_IsTextInputActive | ( | void |  | ) |

Return whether or not Unicode text input events are enabled.

See also
  SDL_StartTextInput()
  SDL_StopTextInput()

Definition at line 3418 of file SDL_video.c.

References SDL_ENABLE, SDL_GetEventState, and SDL_TEXTINPUT.

{
return (SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE);
}
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:718
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:731
SDL_TEXTINPUT
Definition: SDL_events.h:96

void SDL_MaximizeWindow | ( | SDL_Window * | window | ) |

Make a window as large as possible.

See also
  SDL_RestoreWindow()

Definition at line 1982 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::MaximizeWindow, and SDL_WINDOW_MAXIMIZED.

Referenced by SDL_FinishWindowCreation().

{
CHECK_WINDOW_MAGIC(window,);
if (window->flags & SDL_WINDOW_MAXIMIZED) {
return;
}
/* !!! FIXME: should this check if the window is resizable? */
if (_this->MaximizeWindow) {
_this->MaximizeWindow(_this, window);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_WINDOW_MAXIMIZED
Definition: SDL_video.h:105
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_VideoDevice::MaximizeWindow
void(* MaximizeWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:206
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

static SDL_UNUSED SDL_bool SDL_MessageboxValidForDriver | ( | const SDL_MessageBoxData * | messageboxdata,
|  | SDL_SYSWM_TYPE | drivertype
| ) |  |

static

Definition at line 3490 of file SDL_video.c.

References SDL_GetWindowWMInfo(), SDL_TRUE, SDL_VERSION, SDL_SysWMinfo::subsystem, SDL_SysWMinfo::version, and SDL_MessageBoxData::window.

Referenced by SDL_ShowMessageBox().

{
SDL_SysWMinfo info;
SDL_Window *window = messageboxdata->window;
if (!window) {
return SDL_TRUE;
}
SDL_VERSION(&info.version);
if (!SDL_GetWindowWMInfo(window, &info)) {
return SDL_TRUE;
} else {
return (info.subsystem == drivertype);
}
}
SDL_MessageBoxData::window
SDL_Window * window
Definition: SDL_messagebox.h:95
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_SysWMinfo::version
SDL_version version
Definition: SDL_syswm.h:183
SDL_SysWMinfo::subsystem
SDL_SYSWM_TYPE subsystem
Definition: SDL_syswm.h:184
SDL_VERSION
#define SDL_VERSION(x)
Macro to determine SDL version program was compiled against.
Definition: SDL_version.h:79
SDL_SysWMinfo
Definition: SDL_syswm.h:181
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_GetWindowWMInfo
SDL_bool SDL_GetWindowWMInfo(SDL_Window *window, struct SDL_SysWMinfo *info)
This function allows access to driver-dependent window information.
Definition: SDL_video.c:3379
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71

void SDL_MinimizeWindow | ( | SDL_Window * | window | ) |

Minimize a window to an iconic representation.

See also
  SDL_RestoreWindow()

Definition at line 1998 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::MinimizeWindow, SDL_FALSE, SDL_UpdateFullscreenMode(), and SDL_WINDOW_MINIMIZED.

Referenced by SDL_FinishWindowCreation(), SDL_OnWindowFocusLost(), and SDL_UpdateFullscreenMode().

{
CHECK_WINDOW_MAGIC(window,);
if (window->flags & SDL_WINDOW_MINIMIZED) {
return;
}
SDL_UpdateFullscreenMode(window, SDL_FALSE);
if (_this->MinimizeWindow) {
_this->MinimizeWindow(_this, window);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_WINDOW_MINIMIZED
Definition: SDL_video.h:104
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_VideoDevice::MinimizeWindow
void(* MinimizeWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:207
SDL_FALSE
Definition: SDL_stdinc.h:128
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

void SDL_OnWindowEnter | ( | SDL_Window * | window | ) |

Definition at line 2330 of file SDL_video.c.

References SDL_VideoDevice::OnWindowEnter.

Referenced by SDL_SendWindowEvent().

{
if (_this->OnWindowEnter) {
_this->OnWindowEnter(_this, window);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::OnWindowEnter
void(* OnWindowEnter)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:218

void SDL_OnWindowFocusGained | ( | SDL_Window * | window | ) |

Definition at line 2343 of file SDL_video.c.

References SDL_Window::gamma, SDL_Window::h, SDL_Mouse::relative_mode, SDL_GetMouse(), SDL_SetMouseFocus(), SDL_UpdateWindowGrab(), SDL_WarpMouseInWindow, SDL_VideoDevice::SetWindowGammaRamp, and SDL_Window::w.

Referenced by SDL_SendWindowEvent().

{
SDL_Mouse *mouse = SDL_GetMouse();
if (window->gamma && _this->SetWindowGammaRamp) {
_this->SetWindowGammaRamp(_this, window, window->gamma);
}
if (mouse && mouse->relative_mode) {
SDL_SetMouseFocus(window);
SDL_WarpMouseInWindow(window, window->w/2, window->h/2);
}
SDL_UpdateWindowGrab(window);
}
SDL_GetMouse
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:66
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_SetMouseFocus
void SDL_SetMouseFocus(SDL_Window *window)
Definition: SDL_mouse.c:103
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_Mouse::relative_mode
SDL_bool relative_mode
Definition: SDL_mouse_c.h:84
SDL_UpdateWindowGrab
void SDL_UpdateWindowGrab(SDL_Window *window)
Definition: SDL_video.c:2227
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_Mouse
Definition: SDL_mouse_c.h:43
SDL_WarpMouseInWindow
#define SDL_WarpMouseInWindow
Definition: SDL_dynapi_overrides.h:254
SDL_Window::gamma
Uint16 * gamma
Definition: SDL_sysvideo.h:90
SDL_VideoDevice::SetWindowGammaRamp
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
Definition: SDL_sysvideo.h:211

void SDL_OnWindowFocusLost | ( | SDL_Window * | window | ) |

Definition at line 2387 of file SDL_video.c.

References SDL_Window::gamma, SDL_Window::saved_gamma, SDL_MinimizeWindow(), SDL_UpdateWindowGrab(), SDL_VideoDevice::SetWindowGammaRamp, and ShouldMinimizeOnFocusLoss().

Referenced by SDL_SendWindowEvent().

{
if (window->gamma && _this->SetWindowGammaRamp) {
_this->SetWindowGammaRamp(_this, window, window->saved_gamma);
}
SDL_UpdateWindowGrab(window);
if (ShouldMinimizeOnFocusLoss(window)) {
SDL_MinimizeWindow(window);
}
}
SDL_Window::saved_gamma
Uint16 * saved_gamma
Definition: SDL_sysvideo.h:91
SDL_MinimizeWindow
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
Definition: SDL_video.c:1998
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_UpdateWindowGrab
void SDL_UpdateWindowGrab(SDL_Window *window)
Definition: SDL_video.c:2227
SDL_Window::gamma
Uint16 * gamma
Definition: SDL_sysvideo.h:90
SDL_VideoDevice::SetWindowGammaRamp
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
Definition: SDL_sysvideo.h:211
ShouldMinimizeOnFocusLoss
static SDL_bool ShouldMinimizeOnFocusLoss(SDL_Window *window)
Definition: SDL_video.c:2360

void SDL_OnWindowHidden | ( | SDL_Window * | window | ) |

Definition at line 2295 of file SDL_video.c.

References SDL_FALSE, and SDL_UpdateFullscreenMode().

Referenced by SDL_SendWindowEvent().

{
SDL_UpdateFullscreenMode(window, SDL_FALSE);
}
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_FALSE
Definition: SDL_stdinc.h:128

void SDL_OnWindowLeave | ( | SDL_Window * | window | ) |

Definition at line 2338 of file SDL_video.c.

Referenced by SDL_SendWindowEvent().

{
}

void SDL_OnWindowMinimized | ( | SDL_Window * | window | ) |

Definition at line 2308 of file SDL_video.c.

References SDL_FALSE, and SDL_UpdateFullscreenMode().

Referenced by SDL_SendWindowEvent().

{
SDL_UpdateFullscreenMode(window, SDL_FALSE);
}
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_FALSE
Definition: SDL_stdinc.h:128

void SDL_OnWindowResized | ( | SDL_Window * | window | ) |

Definition at line 2301 of file SDL_video.c.

References SDL_Window::h, SDL_FALSE, SDL_SendWindowEvent(), SDL_WINDOWEVENT_SIZE_CHANGED, SDL_Window::surface_valid, and SDL_Window::w.

Referenced by SDL_SendWindowEvent(), SDL_SetWindowSize(), and SDL_UpdateFullscreenMode().

{
window->surface_valid = SDL_FALSE;
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SIZE_CHANGED, window->w, window->h);
}
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:74
SDL_WINDOWEVENT_SIZE_CHANGED
Definition: SDL_video.h:146
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_Window::surface_valid
SDL_bool surface_valid
Definition: SDL_sysvideo.h:94

void SDL_OnWindowRestored | ( | SDL_Window * | window | ) |

Definition at line 2314 of file SDL_video.c.

References FULLSCREEN_VISIBLE, SDL_TRUE, and SDL_UpdateFullscreenMode().

Referenced by SDL_OnWindowShown(), and SDL_SendWindowEvent().

{
/*
* FIXME: Is this fine to just remove this, or should it be preserved just
* for the fullscreen case? In principle it seems like just hiding/showing
* windows shouldn't affect the stacking order; maybe the right fix is to
* re-decouple OnWindowShown and OnWindowRestored.
*/
/*SDL_RaiseWindow(window);*/
if (FULLSCREEN_VISIBLE(window)) {
SDL_UpdateFullscreenMode(window, SDL_TRUE);
}
}
FULLSCREEN_VISIBLE
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:111
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_TRUE
Definition: SDL_stdinc.h:129

void SDL_OnWindowShown | ( | SDL_Window * | window | ) |

Definition at line 2289 of file SDL_video.c.

References SDL_OnWindowRestored().

Referenced by SDL_SendWindowEvent().

{
SDL_OnWindowRestored(window);
}
SDL_OnWindowRestored
void SDL_OnWindowRestored(SDL_Window *window)
Definition: SDL_video.c:2314

void SDL_RaiseWindow | ( | SDL_Window * | window | ) |

Raise a window above other windows and set the input focus.

Definition at line 1969 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::RaiseWindow, and SDL_WINDOW_SHOWN.

Referenced by SDL_ShowMessageBox().

{
CHECK_WINDOW_MAGIC(window,);
if (!(window->flags & SDL_WINDOW_SHOWN)) {
return;
}
if (_this->RaiseWindow) {
_this->RaiseWindow(_this, window);
}
}
SDL_WINDOW_SHOWN
Definition: SDL_video.h:100
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::RaiseWindow
void(* RaiseWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:205
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

int SDL_RecreateWindow | ( | SDL_Window * | window,
|  | Uint32 | flags
| ) |  |

Definition at line 1469 of file SDL_video.c.

References CREATE_FLAGS, SDL_VideoDevice::CreateWindow, SDL_VideoDevice::DestroyWindow, SDL_VideoDevice::DestroyWindowFramebuffer, SDL_Surface::flags, SDL_Window::flags, SDL_VideoDevice::GL_CreateContext, SDL_Window::hit_test, SDL_Window::icon, SDL_Window::is_destroying, SDL_Window::last_fullscreen_flags, NULL, SDL_DONTFREE, SDL_FALSE, SDL_FinishWindowCreation(), SDL_FreeSurface, SDL_GL_LoadLibrary(), SDL_GL_UnloadLibrary(), SDL_HideWindow(), SDL_SetError, SDL_TRUE, SDL_WINDOW_FOREIGN, SDL_WINDOW_HIDDEN, SDL_WINDOW_OPENGL, SDL_VideoDevice::SetWindowHitTest, SDL_VideoDevice::SetWindowIcon, SDL_VideoDevice::SetWindowTitle, SDL_Window::surface, and SDL_Window::title.

{
SDL_bool loaded_opengl = SDL_FALSE;
if ((flags & SDL_WINDOW_OPENGL) && !_this->GL_CreateContext) {
return SDL_SetError("No OpenGL support in video driver");
}
if (window->flags & SDL_WINDOW_FOREIGN) {
/* Can't destroy and re-create foreign windows, hrm */
flags |= SDL_WINDOW_FOREIGN;
} else {
flags &= ~SDL_WINDOW_FOREIGN;
}
/* Restore video mode, etc. */
SDL_HideWindow(window);
/* Tear down the old native window */
if (window->surface) {
window->surface->flags &= ~SDL_DONTFREE;
SDL_FreeSurface(window->surface);
window->surface = NULL;
}
if (_this->DestroyWindowFramebuffer) {
_this->DestroyWindowFramebuffer(_this, window);
}
if (_this->DestroyWindow && !(flags & SDL_WINDOW_FOREIGN)) {
_this->DestroyWindow(_this, window);
}
if ((window->flags & SDL_WINDOW_OPENGL) != (flags & SDL_WINDOW_OPENGL)) {
if (flags & SDL_WINDOW_OPENGL) {
if (SDL_GL_LoadLibrary(NULL) < 0) {
return -1;
}
loaded_opengl = SDL_TRUE;
} else {
SDL_GL_UnloadLibrary();
}
}
window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN);
window->last_fullscreen_flags = window->flags;
window->is_destroying = SDL_FALSE;
if (_this->CreateWindow && !(flags & SDL_WINDOW_FOREIGN)) {
if (_this->CreateWindow(_this, window) < 0) {
if (loaded_opengl) {
SDL_GL_UnloadLibrary();
window->flags &= ~SDL_WINDOW_OPENGL;
}
return -1;
}
}
if (flags & SDL_WINDOW_FOREIGN) {
window->flags |= SDL_WINDOW_FOREIGN;
}
if (_this->SetWindowTitle && window->title) {
_this->SetWindowTitle(_this, window);
}
if (_this->SetWindowIcon && window->icon) {
_this->SetWindowIcon(_this, window, window->icon);
}
if (window->hit_test) {
_this->SetWindowHitTest(window, SDL_TRUE);
}
SDL_FinishWindowCreation(window, flags);
return 0;
}
SDL_VideoDevice::SetWindowHitTest
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
Definition: SDL_sysvideo.h:274
SDL_GL_LoadLibrary
int SDL_GL_LoadLibrary(const char *path)
Dynamically load an OpenGL library.
Definition: SDL_video.c:2582
SDL_DONTFREE
#define SDL_DONTFREE
Definition: SDL_surface.h:55
SDL_Window::is_destroying
SDL_bool is_destroying
Definition: SDL_sysvideo.h:97
SDL_HideWindow
void SDL_HideWindow(SDL_Window *window)
Hide a window.
Definition: SDL_video.c:1950
SDL_WINDOW_HIDDEN
Definition: SDL_video.h:101
SDL_Surface::flags
Uint32 flags
Definition: SDL_surface.h:71
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
CREATE_FLAGS
#define CREATE_FLAGS
Definition: SDL_video.c:1287
SDL_VideoDevice::GL_CreateContext
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:237
SDL_FreeSurface
#define SDL_FreeSurface
Definition: SDL_dynapi_overrides.h:450
SDL_GL_UnloadLibrary
void SDL_GL_UnloadLibrary(void)
Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
Definition: SDL_video.c:2633
SDL_VideoDevice::DestroyWindow
void(* DestroyWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:214
SDL_VideoDevice::SetWindowIcon
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
Definition: SDL_sysvideo.h:198
SDL_Window::title
char * title
Definition: SDL_sysvideo.h:75
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_VideoDevice::DestroyWindowFramebuffer
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:217
NULL
#define NULL
Definition: begin_code.h:143
SDL_Window::hit_test
SDL_HitTest hit_test
Definition: SDL_sysvideo.h:101
SDL_Window::last_fullscreen_flags
Uint32 last_fullscreen_flags
Definition: SDL_sysvideo.h:82
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_Window::icon
SDL_Surface * icon
Definition: SDL_sysvideo.h:76
SDL_VideoDevice::CreateWindow
int(* CreateWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:195
SDL_FinishWindowCreation
static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
Definition: SDL_video.c:1291
SDL_FALSE
Definition: SDL_stdinc.h:128
flags
GLbitfield flags
Definition: SDL_opengl_glext.h:1480
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
SDL_VideoDevice::SetWindowTitle
void(* SetWindowTitle)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:197
SDL_WINDOW_FOREIGN
Definition: SDL_video.h:110
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_Window::surface
SDL_Surface * surface
Definition: SDL_sysvideo.h:93

static void SDL_RestoreMousePosition | ( | SDL_Window * | window | ) |

static

Definition at line 1118 of file SDL_video.c.

References SDL_GetMouseFocus, SDL_GetMouseState, SDL_WarpMouseInWindow, window, and WINRT_DetectWindowFlags().

Referenced by SDL_UpdateFullscreenMode().

{
int x, y;
if (window == SDL_GetMouseFocus()) {
SDL_GetMouseState(&x, &y);
SDL_WarpMouseInWindow(window, x, y);
}
}
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
y
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1567
SDL_GetMouseFocus
#define SDL_GetMouseFocus
Definition: SDL_dynapi_overrides.h:251
SDL_WarpMouseInWindow
#define SDL_WarpMouseInWindow
Definition: SDL_dynapi_overrides.h:254
SDL_GetMouseState
#define SDL_GetMouseState
Definition: SDL_dynapi_overrides.h:252

void SDL_RestoreWindow | ( | SDL_Window * | window | ) |

Restore the size and position of a minimized or maximized window.

See also
  SDL_MaximizeWindow()
  SDL_MinimizeWindow()

Definition at line 2014 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_VideoDevice::RestoreWindow, SDL_WINDOW_MAXIMIZED, and SDL_WINDOW_MINIMIZED.

{
CHECK_WINDOW_MAGIC(window,);
if (!(window->flags & (SDL_WINDOW_MAXIMIZED | SDL_WINDOW_MINIMIZED))) {
return;
}
if (_this->RestoreWindow) {
_this->RestoreWindow(_this, window);
}
}
SDL_VideoDevice::RestoreWindow
void(* RestoreWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:208
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_WINDOW_MINIMIZED
Definition: SDL_video.h:104
SDL_WINDOW_MAXIMIZED
Definition: SDL_video.h:105
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

static int SDL_SetDisplayModeForDisplay | ( | SDL_VideoDisplay * | display,
|  | const SDL_DisplayMode * | mode
| ) |  |

static

Definition at line 930 of file SDL_video.c.

References SDL_VideoDisplay::current_mode, SDL_VideoDisplay::desktop_mode, SDL_DisplayMode::format, SDL_DisplayMode::h, SDL_DisplayMode::refresh_rate, SDL_GetClosestDisplayModeForDisplay(), SDL_memcmp, SDL_SetError, SDL_VideoDevice::SetDisplayMode, and SDL_DisplayMode::w.

Referenced by SDL_SetWindowDisplayMode(), and SDL_UpdateFullscreenMode().

{
SDL_DisplayMode display_mode;
SDL_DisplayMode current_mode;
if (mode) {
display_mode = *mode;
/* Default to the current mode */
if (!display_mode.format) {
display_mode.format = display->current_mode.format;
}
if (!display_mode.w) {
display_mode.w = display->current_mode.w;
}
if (!display_mode.h) {
display_mode.h = display->current_mode.h;
}
if (!display_mode.refresh_rate) {
display_mode.refresh_rate = display->current_mode.refresh_rate;
}
/* Get a good video mode, the closest one possible */
if (!SDL_GetClosestDisplayModeForDisplay(display, &display_mode, &display_mode)) {
return SDL_SetError("No video mode large enough for %dx%d",
display_mode.w, display_mode.h);
}
} else {
display_mode = display->desktop_mode;
}
/* See if there's anything left to do */
current_mode = display->current_mode;
if (SDL_memcmp(&display_mode, &current_mode, sizeof(display_mode)) == 0) {
return 0;
}
/* Actually change the display mode */
if (!_this->SetDisplayMode) {
return SDL_SetError("Video driver doesn't support changing display mode");
}
if (_this->SetDisplayMode(_this, display, &display_mode) < 0) {
return -1;
}
display->current_mode = display_mode;
return 0;
}
SDL_DisplayMode::w
int w
Definition: SDL_video.h:56
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_DisplayMode::refresh_rate
int refresh_rate
Definition: SDL_video.h:58
SDL_VideoDevice::SetDisplayMode
int(* SetDisplayMode)(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
Definition: SDL_sysvideo.h:189
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_memcmp
#define SDL_memcmp
Definition: SDL_dynapi_overrides.h:395
SDL_VideoDisplay::current_mode
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:127
mode
GLenum mode
Definition: SDL_opengl_glext.h:1122
SDL_DisplayMode::h
int h
Definition: SDL_video.h:57
SDL_VideoDisplay::desktop_mode
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:126
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_GetClosestDisplayModeForDisplay
static SDL_DisplayMode * SDL_GetClosestDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode, SDL_DisplayMode *closest)
Definition: SDL_video.c:810
SDL_DisplayMode::format
Uint32 format
Definition: SDL_video.h:55

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 keyboard placement.

See also
  SDL_StartTextInput()

Definition at line 3445 of file SDL_video.c.

References SDL_VideoDevice::SetTextInputRect.

{
if (_this && _this->SetTextInputRect) {
_this->SetTextInputRect(_this, rect);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::SetTextInputRect
void(* SetTextInputRect)(_THIS, SDL_Rect *rect)
Definition: SDL_sysvideo.h:257

void SDL_SetWindowBordered | ( | SDL_Window * | window,
|  | SDL_bool | bordered
| ) |  |

Set the border state of a window.

This will add or remove the window's SDL_WINDOW_BORDERLESS flag and add or remove the border from the actual window. This is a no-op if the window's border already matches the requested state.

Parameters

  window | The window of which to change the border state.
  bordered | SDL_FALSE to remove border, SDL_TRUE to add border.

Note
  You can't change the border state of a fullscreen window.

See also
  SDL_GetWindowFlags()

Definition at line 1781 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_FALSE, SDL_WINDOW_BORDERLESS, SDL_WINDOW_FULLSCREEN, and SDL_VideoDevice::SetWindowBordered.

{
CHECK_WINDOW_MAGIC(window,);
if (!(window->flags & SDL_WINDOW_FULLSCREEN)) {
const int want = (bordered != SDL_FALSE); /* normalize the flag. */
const int have = ((window->flags & SDL_WINDOW_BORDERLESS) == 0);
if ((want != have) && (_this->SetWindowBordered)) {
if (want) {
window->flags &= ~SDL_WINDOW_BORDERLESS;
} else {
window->flags |= SDL_WINDOW_BORDERLESS;
}
_this->SetWindowBordered(_this, window, (SDL_bool) want);
}
}
}
SDL_VideoDevice::SetWindowBordered
void(* SetWindowBordered)(_THIS, SDL_Window *window, SDL_bool bordered)
Definition: SDL_sysvideo.h:209
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_WINDOW_BORDERLESS
Definition: SDL_video.h:102
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

int SDL_SetWindowBrightness | ( | SDL_Window * | window,
|  | float | brightness
| ) |  |

Set the brightness (gamma correction) for a window.

Returns
  0 on success, or -1 if setting the brightness isn't supported.

See also
  SDL_GetWindowBrightness()
  SDL_SetWindowGammaRamp()

Definition at line 2124 of file SDL_video.c.

References SDL_Window::brightness, CHECK_WINDOW_MAGIC, SDL_CalculateGammaRamp, and SDL_SetWindowGammaRamp().

{
Uint16 ramp[256];
int status;
CHECK_WINDOW_MAGIC(window, -1);
SDL_CalculateGammaRamp(brightness, ramp);
status = SDL_SetWindowGammaRamp(window, ramp, ramp, ramp);
if (status == 0) {
window->brightness = brightness;
}
return status;
}
SDL_SetWindowGammaRamp
int SDL_SetWindowGammaRamp(SDL_Window *window, const Uint16 *red, const Uint16 *green, const Uint16 *blue)
Set the gamma ramp for a window.
Definition: SDL_video.c:2148
SDL_Window::brightness
float brightness
Definition: SDL_sysvideo.h:89
Uint16
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:147
SDL_CalculateGammaRamp
#define SDL_CalculateGammaRamp
Definition: SDL_dynapi_overrides.h:296
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

void* SDL_SetWindowData | ( | SDL_Window * | window,
|  | const char * | name,
|  | void * | userdata
| ) |  |

Associate an arbitrary named pointer with a window.

Parameters

  window | The window to associate with the pointer.
  name | The name of the pointer.
  userdata | The associated pointer.

Returns
  The previous value associated with 'name'

Note
  The name is case-sensitive.

See also
  SDL_GetWindowData()

Definition at line 1626 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_WindowUserData::data, SDL_Window::data, SDL_WindowUserData::name, SDL_WindowUserData::next, NULL, SDL_free(), SDL_InvalidParamError, SDL_malloc, SDL_strcmp, and SDL_strdup.

Referenced by SDL_CreateWindowTexture(), and SDL_DestroyWindowTexture().

{
SDL_WindowUserData *prev, *data;
CHECK_WINDOW_MAGIC(window, NULL);
/* Input validation */
if (name == NULL || name[0] == '\0') {
SDL_InvalidParamError("name");
return NULL;
}
/* See if the named data already exists */
prev = NULL;
for (data = window->data; data; prev = data, data = data->next) {
if (data->name && SDL_strcmp(data->name, name) == 0) {
void *last_value = data->data;
if (userdata) {
/* Set the new value */
data->data = userdata;
} else {
/* Delete this value */
if (prev) {
prev->next = data->next;
} else {
window->data = data->next;
}
SDL_free(data->name);
SDL_free(data);
}
return last_value;
}
}
/* Add new data to the window */
if (userdata) {
data = (SDL_WindowUserData *)SDL_malloc(sizeof(*data));
data->name = SDL_strdup(name);
data->data = userdata;
data->next = window->data;
window->data = data;
}
return NULL;
}
SDL_WindowUserData
Definition: SDL_sysvideo.h:63
SDL_WindowUserData::data
void * data
Definition: SDL_sysvideo.h:66
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_WindowUserData::next
struct SDL_WindowUserData * next
Definition: SDL_sysvideo.h:67
SDL_WindowUserData::name
char * name
Definition: SDL_sysvideo.h:65
SDL_free
void SDL_free(void *mem)
NULL
#define NULL
Definition: begin_code.h:143
SDL_strdup
#define SDL_strdup
Definition: SDL_dynapi_overrides.h:403
SDL_malloc
#define SDL_malloc
Definition: SDL_dynapi_overrides.h:380
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::data
SDL_WindowUserData * data
Definition: SDL_sysvideo.h:104

int SDL_SetWindowDisplayMode | ( | SDL_Window * | window,
|  | const SDL_DisplayMode * | mode
| ) |  |

Set the display mode used when a fullscreen window is visible.

By default the window's dimensions and the desktop format and refresh rate are used.

Parameters

  window | The window for which the display mode should be set.
  mode | The mode to use, or NULL for the default mode.

Returns
  0 on success, or -1 if setting the display mode failed.

See also
  SDL_GetWindowDisplayMode()
  SDL_SetWindowFullscreen()

Definition at line 1050 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_Window::fullscreen_mode, FULLSCREEN_VISIBLE, SDL_GetDisplayForWindow(), SDL_GetWindowDisplayMode(), SDL_SetDisplayModeForDisplay(), SDL_WINDOW_FULLSCREEN_DESKTOP, and SDL_zero.

{
CHECK_WINDOW_MAGIC(window, -1);
if (mode) {
window->fullscreen_mode = *mode;
} else {
SDL_zero(window->fullscreen_mode);
}
if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
SDL_DisplayMode fullscreen_mode;
if (SDL_GetWindowDisplayMode(window, &fullscreen_mode) == 0) {
SDL_SetDisplayModeForDisplay(SDL_GetDisplayForWindow(window), &fullscreen_mode);
}
}
return 0;
}
SDL_Window::fullscreen_mode
SDL_DisplayMode fullscreen_mode
Definition: SDL_sysvideo.h:87
FULLSCREEN_VISIBLE
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:111
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_GetWindowDisplayMode
int SDL_GetWindowDisplayMode(SDL_Window *window, SDL_DisplayMode *mode)
Fill in information about the display mode used when a fullscreen window is visible.
Definition: SDL_video.c:1070
SDL_GetDisplayForWindow
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:1039
mode
GLenum mode
Definition: SDL_opengl_glext.h:1122
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
SDL_SetDisplayModeForDisplay
static int SDL_SetDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
Definition: SDL_video.c:930
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOW_FULLSCREEN_DESKTOP
Definition: SDL_video.h:109

int SDL_SetWindowFullscreen | ( | SDL_Window * | window,
|  | Uint32 | flags
| ) |  |

Set a window's fullscreen state.

Returns
  0 on success, or -1 if setting the display mode failed.

See also
  SDL_SetWindowDisplayMode()
  SDL_GetWindowDisplayMode()

Definition at line 2028 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, FULLSCREEN_MASK, FULLSCREEN_VISIBLE, and SDL_UpdateFullscreenMode().

Referenced by SDL_FinishWindowCreation().

{
Uint32 oldflags;
CHECK_WINDOW_MAGIC(window, -1);
flags &= FULLSCREEN_MASK;
if (flags == (window->flags & FULLSCREEN_MASK)) {
return 0;
}
/* clear the previous flags and OR in the new ones */
oldflags = window->flags & FULLSCREEN_MASK;
window->flags &= ~FULLSCREEN_MASK;
window->flags |= flags;
if (SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)) == 0) {
return 0;
}
window->flags &= ~FULLSCREEN_MASK;
window->flags |= oldflags;
return -1;
}
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
FULLSCREEN_VISIBLE
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:111
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
flags
GLbitfield flags
Definition: SDL_opengl_glext.h:1480
FULLSCREEN_MASK
#define FULLSCREEN_MASK
Definition: SDL_video.c:138
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

int SDL_SetWindowGammaRamp | ( | SDL_Window * | window,
|  | const Uint16 * | red,
|  | const Uint16 * | green,
|  | const Uint16 * | blue
| ) |  |

Set the gamma ramp for a window.

Parameters

  window | The window for which the gamma ramp should be set.
  red | The translation table for the red channel, or NULL.
  green | The translation table for the green channel, or NULL.
  blue | The translation table for the blue channel, or NULL.

Returns
  0 on success, or -1 if gamma ramps are unsupported.

Set the gamma translation table for the red, green, and blue channels of the video hardware. Each table is an array of 256 16-bit quantities, representing a mapping between the input and output for that channel. The input is the index into the array, and the output is the 16-bit gamma value at that index, scaled to the output color precision.

See also
  SDL_GetWindowGammaRamp()

Definition at line 2148 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_Window::gamma, NULL, SDL_assert, SDL_GetWindowGammaRamp(), SDL_memcpy, SDL_Unsupported, SDL_WINDOW_INPUT_FOCUS, and SDL_VideoDevice::SetWindowGammaRamp.

Referenced by SDL_SetWindowBrightness().

{
CHECK_WINDOW_MAGIC(window, -1);
if (!_this->SetWindowGammaRamp) {
return SDL_Unsupported();
}
if (!window->gamma) {
if (SDL_GetWindowGammaRamp(window, NULL, NULL, NULL) < 0) {
return -1;
}
SDL_assert(window->gamma != NULL);
}
if (red) {
SDL_memcpy(&window->gamma[0*256], red, 256*sizeof(Uint16));
}
if (green) {
SDL_memcpy(&window->gamma[1*256], green, 256*sizeof(Uint16));
}
if (blue) {
SDL_memcpy(&window->gamma[2*256], blue, 256*sizeof(Uint16));
}
if (window->flags & SDL_WINDOW_INPUT_FOCUS) {
return _this->SetWindowGammaRamp(_this, window, window->gamma);
} else {
return 0;
}
}
red
const GLubyte GLuint red
Definition: SDL_glfuncs.h:78
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
blue
GLbyte GLbyte blue
Definition: SDL_opengl_glext.h:379
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:167
NULL
#define NULL
Definition: begin_code.h:143
SDL_WINDOW_INPUT_FOCUS
Definition: SDL_video.h:107
green
GLbyte green
Definition: SDL_opengl_glext.h:379
Uint16
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:147
SDL_GetWindowGammaRamp
int SDL_GetWindowGammaRamp(SDL_Window *window, Uint16 *red, Uint16 *green, Uint16 *blue)
Get the gamma ramp for a window.
Definition: SDL_video.c:2182
SDL_Window::gamma
Uint16 * gamma
Definition: SDL_sysvideo.h:90
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_VideoDevice::SetWindowGammaRamp
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
Definition: SDL_sysvideo.h:211
SDL_Unsupported
#define SDL_Unsupported()
Definition: SDL_error.h:53

void SDL_SetWindowGrab | ( | SDL_Window * | window,
|  | SDL_bool | grabbed
| ) |  |

Set a window's input grab mode.

Parameters

  window | The window for which the input grab mode should be set.
  grabbed | This is SDL_TRUE to grab input, and SDL_FALSE to release input.

If the caller enables a grab while another window is currently grabbed, the other window loses its grab in favor of the caller's window.

See also
  SDL_GetWindowGrab()

Definition at line 2258 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_UpdateWindowGrab(), and SDL_WINDOW_INPUT_GRABBED.

Referenced by SDL_FinishWindowCreation().

{
CHECK_WINDOW_MAGIC(window,);
if (!!grabbed == !!(window->flags & SDL_WINDOW_INPUT_GRABBED)) {
return;
}
if (grabbed) {
window->flags |= SDL_WINDOW_INPUT_GRABBED;
} else {
window->flags &= ~SDL_WINDOW_INPUT_GRABBED;
}
SDL_UpdateWindowGrab(window);
}
SDL_UpdateWindowGrab
void SDL_UpdateWindowGrab(SDL_Window *window)
Definition: SDL_video.c:2227
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOW_INPUT_GRABBED
Definition: SDL_video.h:106

int SDL_SetWindowHitTest | ( | SDL_Window * | window,
|  | SDL_HitTest | callback,
|  | void * | callback_data
| ) |  |

Provide a callback that decides if a window region has special properties.

Normally windows are dragged and resized by decorations provided by the system window manager (a title bar, borders, etc), but for some apps, it makes sense to drag them from somewhere else inside the window itself; for example, one might have a borderless window that wants to be draggable from any part, or simulate its own title bar, etc.

This function lets the app provide a callback that designates pieces of a given window as special. This callback is run during event processing if we need to tell the OS to treat a region of the window specially; the use of this callback is known as "hit testing."

Mouse input may not be delivered to your application if it is within a special area; the OS will often apply that input to moving the window or resizing the window and not deliver it to the application.

Specifying NULL for a callback disables hit-testing. Hit-testing is disabled by default.

Platforms that don't support this functionality will return -1 unconditionally, even if you're attempting to disable hit-testing.

Your callback may fire at any time, and its firing does not indicate any specific behavior (for example, on Windows, this certainly might fire when the OS is deciding whether to drag your window, but it fires for lots of other reasons, too, some unrelated to anything you probably care about and when the mouse isn't actually at the location it is testing). Since this can fire at any time, you should try to keep your callback efficient, devoid of allocations, etc.

Parameters

  window | The window to set hit-testing on.
  callback | The callback to call when doing a hit-test.
  callback_data | An app-defined void pointer passed to the callback.

Returns
  0 on success, -1 on error (including unsupported).

Definition at line 3633 of file SDL_video.c.

References callback(), CHECK_WINDOW_MAGIC, SDL_Window::hit_test, SDL_Window::hit_test_data, NULL, SDL_Unsupported, and SDL_VideoDevice::SetWindowHitTest.

{
CHECK_WINDOW_MAGIC(window, -1);
if (!_this->SetWindowHitTest) {
return SDL_Unsupported();
} else if (_this->SetWindowHitTest(window, callback != NULL) == -1) {
return -1;
}
window->hit_test = callback;
window->hit_test_data = userdata;
return 0;
}
SDL_VideoDevice::SetWindowHitTest
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
Definition: SDL_sysvideo.h:274
SDL_Window::hit_test_data
void * hit_test_data
Definition: SDL_sysvideo.h:102
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
callback
static Uint32 callback(Uint32 interval, void *param)
Definition: testtimer.c:34
NULL
#define NULL
Definition: begin_code.h:143
SDL_Window::hit_test
SDL_HitTest hit_test
Definition: SDL_sysvideo.h:101
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Unsupported
#define SDL_Unsupported()
Definition: SDL_error.h:53

void SDL_SetWindowIcon | ( | SDL_Window * | window,
|  | SDL_Surface * | icon
| ) |  |

Set the icon for a window.

Parameters

  window | The window for which the icon should be set.
  icon | The icon for the window.

Definition at line 1604 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::icon, SDL_ConvertSurfaceFormat, SDL_FreeSurface, SDL_PIXELFORMAT_ARGB8888, and SDL_VideoDevice::SetWindowIcon.

{
CHECK_WINDOW_MAGIC(window,);
if (!icon) {
return;
}
SDL_FreeSurface(window->icon);
/* Convert the icon into ARGB8888 */
window->icon = SDL_ConvertSurfaceFormat(icon, SDL_PIXELFORMAT_ARGB8888, 0);
if (!window->icon) {
return;
}
if (_this->SetWindowIcon) {
_this->SetWindowIcon(_this, window, window->icon);
}
}
SDL_PIXELFORMAT_ARGB8888
Definition: SDL_pixels.h:247
SDL_ConvertSurfaceFormat
#define SDL_ConvertSurfaceFormat
Definition: SDL_dynapi_overrides.h:468
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_FreeSurface
#define SDL_FreeSurface
Definition: SDL_dynapi_overrides.h:450
SDL_VideoDevice::SetWindowIcon
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
Definition: SDL_sysvideo.h:198
SDL_Window::icon
SDL_Surface * icon
Definition: SDL_sysvideo.h:76
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116

void SDL_SetWindowMaximumSize | ( | SDL_Window * | window,
|  | int | max_w,
|  | int | max_h
| ) |  |

Set the maximum size of a window's client area.

Parameters

  window | The window to set a new maximum size.
  max_w | The maximum width of the window, must be >0
  max_h | The maximum height of the window, must be >0

Note
  You can't change the maximum size of a fullscreen window, it automatically matches the size of the display mode.

See also
  SDL_GetWindowMaximumSize()
  SDL_SetWindowMinimumSize()

Definition at line 1899 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_Window::h, SDL_Window::max_h, SDL_Window::max_w, SDL_InvalidParamError, SDL_min, SDL_SetWindowSize(), SDL_WINDOW_FULLSCREEN, SDL_VideoDevice::SetWindowMaximumSize, and SDL_Window::w.

{
CHECK_WINDOW_MAGIC(window,);
if (max_w <= 0) {
SDL_InvalidParamError("max_w");
return;
}
if (max_h <= 0) {
SDL_InvalidParamError("max_h");
return;
}
if (!(window->flags & SDL_WINDOW_FULLSCREEN)) {
window->max_w = max_w;
window->max_h = max_h;
if (_this->SetWindowMaximumSize) {
_this->SetWindowMaximumSize(_this, window);
}
/* Ensure that window is not larger than maximal size */
SDL_SetWindowSize(window, SDL_min(window->w, window->max_w), SDL_min(window->h, window->max_h));
}
}
SDL_min
#define SDL_min(x, y)
Definition: SDL_stdinc.h:345
SDL_SetWindowSize
void SDL_SetWindowSize(SDL_Window *window, int w, int h)
Set the size of a window&#39;s client area.
Definition: SDL_video.c:1799
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_VideoDevice::SetWindowMaximumSize
void(* SetWindowMaximumSize)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:202
SDL_Window::max_w
int max_w
Definition: SDL_sysvideo.h:80
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
SDL_Window::max_h
int max_h
Definition: SDL_sysvideo.h:80
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

void SDL_SetWindowMinimumSize | ( | SDL_Window * | window,
|  | int | min_w,
|  | int | min_h
| ) |  |

Set the minimum size of a window's client area.

Parameters

  window | The window to set a new minimum size.
  min_w | The minimum width of the window, must be >0
  min_h | The minimum height of the window, must be >0

Note
  You can't change the minimum size of a fullscreen window, it automatically matches the size of the display mode.

See also
  SDL_GetWindowMinimumSize()
  SDL_SetWindowMaximumSize()

Definition at line 1863 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_Window::h, SDL_Window::min_h, SDL_Window::min_w, SDL_InvalidParamError, SDL_max, SDL_SetWindowSize(), SDL_WINDOW_FULLSCREEN, SDL_VideoDevice::SetWindowMinimumSize, and SDL_Window::w.

{
CHECK_WINDOW_MAGIC(window,);
if (min_w <= 0) {
SDL_InvalidParamError("min_w");
return;
}
if (min_h <= 0) {
SDL_InvalidParamError("min_h");
return;
}
if (!(window->flags & SDL_WINDOW_FULLSCREEN)) {
window->min_w = min_w;
window->min_h = min_h;
if (_this->SetWindowMinimumSize) {
_this->SetWindowMinimumSize(_this, window);
}
/* Ensure that window is not smaller than minimal size */
SDL_SetWindowSize(window, SDL_max(window->w, window->min_w), SDL_max(window->h, window->min_h));
}
}
SDL_SetWindowSize
void SDL_SetWindowSize(SDL_Window *window, int w, int h)
Set the size of a window&#39;s client area.
Definition: SDL_video.c:1799
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_max
#define SDL_max(x, y)
Definition: SDL_stdinc.h:346
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_Window::min_w
int min_w
Definition: SDL_sysvideo.h:79
SDL_VideoDevice::SetWindowMinimumSize
void(* SetWindowMinimumSize)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:201
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_Window::min_h
int min_h
Definition: SDL_sysvideo.h:79
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

void SDL_SetWindowPosition | ( | SDL_Window * | window,
|  | int | x,
|  | int | y
| ) |  |

Set the position of a window.

Parameters

  window | The window to reposition.
  x | The x coordinate of the window in screen coordinates, or SDL_WINDOWPOS_CENTERED or SDL_WINDOWPOS_UNDEFINED.
  y | The y coordinate of the window in screen coordinates, or SDL_WINDOWPOS_CENTERED or SDL_WINDOWPOS_UNDEFINED.

Note
  The window coordinate origin is the upper left of the display.

See also
  SDL_GetWindowPosition()

Definition at line 1694 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_Rect::h, SDL_Window::h, SDL_VideoDevice::num_displays, SDL_GetDisplayBounds(), SDL_SendWindowEvent(), SDL_WINDOW_FULLSCREEN, SDL_WINDOWEVENT_MOVED, SDL_WINDOWPOS_ISCENTERED, SDL_WINDOWPOS_ISUNDEFINED, SDL_zero, SDL_VideoDevice::SetWindowPosition, SDL_Rect::w, SDL_Window::w, SDL_Window::windowed, SDL_Rect::x, SDL_Window::x, SDL_Rect::y, and SDL_Window::y.

{
CHECK_WINDOW_MAGIC(window,);
if (SDL_WINDOWPOS_ISCENTERED(x) || SDL_WINDOWPOS_ISCENTERED(y)) {
int displayIndex = (x & 0xFFFF);
SDL_Rect bounds;
if (displayIndex > _this->num_displays) {
displayIndex = 0;
}
SDL_zero(bounds);
SDL_GetDisplayBounds(displayIndex, &bounds);
if (SDL_WINDOWPOS_ISCENTERED(x)) {
x = bounds.x + (bounds.w - window->w) / 2;
}
if (SDL_WINDOWPOS_ISCENTERED(y)) {
y = bounds.y + (bounds.h - window->h) / 2;
}
}
if ((window->flags & SDL_WINDOW_FULLSCREEN)) {
if (!SDL_WINDOWPOS_ISUNDEFINED(x)) {
window->windowed.x = x;
}
if (!SDL_WINDOWPOS_ISUNDEFINED(y)) {
window->windowed.y = y;
}
} else {
if (!SDL_WINDOWPOS_ISUNDEFINED(x)) {
window->x = x;
}
if (!SDL_WINDOWPOS_ISUNDEFINED(y)) {
window->y = y;
}
if (_this->SetWindowPosition) {
_this->SetWindowPosition(_this, window);
}
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MOVED, x, y);
}
}
SDL_WINDOWPOS_ISUNDEFINED
#define SDL_WINDOWPOS_ISUNDEFINED(X)
Definition: SDL_video.h:121
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
SDL_Window::x
int x
Definition: SDL_sysvideo.h:77
SDL_WINDOWPOS_ISCENTERED
#define SDL_WINDOWPOS_ISCENTERED(X)
Definition: SDL_video.h:130
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:74
SDL_Window::windowed
SDL_Rect windowed
Definition: SDL_sysvideo.h:85
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
y
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1567
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
SDL_Window::y
int y
Definition: SDL_sysvideo.h:77
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_GetDisplayBounds
int SDL_GetDisplayBounds(int displayIndex, SDL_Rect *rect)
Get the desktop area represented by a display, with the primary display located at 0...
Definition: SDL_video.c:663
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_VideoDevice::SetWindowPosition
void(* SetWindowPosition)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:199
SDL_Rect::h
int h
Definition: SDL_rect.h:67
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOWEVENT_MOVED
Definition: SDL_video.h:143
SDL_Rect::y
int y
Definition: SDL_rect.h:66
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64

void SDL_SetWindowSize | ( | SDL_Window * | window,
|  | int | w,
|  | int | h
| ) |  |

Set the size of a window's client area.

Parameters

  window | The window to resize.
  w | The width of the window, in screen coordinates. Must be >0.
  h | The height of the window, in screen coordinates. Must be >0.

Note
  You can't change the size of a fullscreen window, it automatically matches the size of the display mode.

The window size in screen coordinates may differ from the size in pixels, if the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() to get the real client area size in pixels.

See also
  SDL_GetWindowSize()

Definition at line 1799 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, FULLSCREEN_VISIBLE, SDL_Rect::h, SDL_Window::h, SDL_Window::last_fullscreen_flags, SDL_Window::max_h, SDL_Window::max_w, SDL_Window::min_h, SDL_Window::min_w, SDL_InvalidParamError, SDL_OnWindowResized(), SDL_TRUE, SDL_UpdateFullscreenMode(), SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_VideoDevice::SetWindowSize, SDL_Rect::w, SDL_Window::w, and SDL_Window::windowed.

Referenced by SDL_SetWindowMaximumSize(), and SDL_SetWindowMinimumSize().

{
CHECK_WINDOW_MAGIC(window,);
if (w <= 0) {
SDL_InvalidParamError("w");
return;
}
if (h <= 0) {
SDL_InvalidParamError("h");
return;
}
/* Make sure we don't exceed any window size limits */
if (window->min_w && w < window->min_w)
{
w = window->min_w;
}
if (window->max_w && w > window->max_w)
{
w = window->max_w;
}
if (window->min_h && h < window->min_h)
{
h = window->min_h;
}
if (window->max_h && h > window->max_h)
{
h = window->max_h;
}
window->windowed.w = w;
window->windowed.h = h;
if (window->flags & SDL_WINDOW_FULLSCREEN) {
if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
window->last_fullscreen_flags = 0;
SDL_UpdateFullscreenMode(window, SDL_TRUE);
}
} else {
window->w = w;
window->h = h;
if (_this->SetWindowSize) {
_this->SetWindowSize(_this, window);
}
if (window->w == w && window->h == h) {
/* We didn't get a SDL_WINDOWEVENT_RESIZED event (by design) */
SDL_OnWindowResized(window);
}
}
}
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
FULLSCREEN_VISIBLE
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:111
SDL_VideoDevice::SetWindowSize
void(* SetWindowSize)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:200
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_Window::windowed
SDL_Rect windowed
Definition: SDL_sysvideo.h:85
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_Window::min_w
int min_w
Definition: SDL_sysvideo.h:79
SDL_UpdateFullscreenMode
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1133
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_Window::last_fullscreen_flags
Uint32 last_fullscreen_flags
Definition: SDL_sysvideo.h:82
SDL_Window::min_h
int min_h
Definition: SDL_sysvideo.h:79
SDL_Window::max_w
int max_w
Definition: SDL_sysvideo.h:80
SDL_Rect::h
int h
Definition: SDL_rect.h:67
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
SDL_Window::max_h
int max_h
Definition: SDL_sysvideo.h:80
w
GLubyte GLubyte GLubyte GLubyte w
Definition: SDL_opengl_glext.h:731
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
h
GLfloat GLfloat GLfloat GLfloat h
Definition: SDL_opengl_glext.h:1946
SDL_WINDOW_FULLSCREEN_DESKTOP
Definition: SDL_video.h:109
SDL_OnWindowResized
void SDL_OnWindowResized(SDL_Window *window)
Definition: SDL_video.c:2301

void SDL_SetWindowTitle | ( | SDL_Window * | window,
|  | const char * | title
| ) |  |

Set the title of a window, in UTF-8 format.

See also
  SDL_GetWindowTitle()

Definition at line 1579 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_free(), SDL_strdup, SDL_VideoDevice::SetWindowTitle, and SDL_Window::title.

Referenced by SDL_CreateWindow().

{
CHECK_WINDOW_MAGIC(window,);
if (title == window->title) {
return;
}
SDL_free(window->title);
window->title = SDL_strdup(title ? title : "");
if (_this->SetWindowTitle) {
_this->SetWindowTitle(_this, window);
}
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_free
void SDL_free(void *mem)
SDL_Window::title
char * title
Definition: SDL_sysvideo.h:75
SDL_strdup
#define SDL_strdup
Definition: SDL_dynapi_overrides.h:403
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_VideoDevice::SetWindowTitle
void(* SetWindowTitle)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:197

SDL_bool SDL_ShouldAllowTopmost | ( | void |  | ) |

Definition at line 3619 of file SDL_video.c.

References SDL_FALSE, SDL_GetHint, SDL_HINT_ALLOW_TOPMOST, and SDL_TRUE.

{
const char *hint = SDL_GetHint(SDL_HINT_ALLOW_TOPMOST);
if (hint) {
if (*hint == '0') {
return SDL_FALSE;
} else {
return SDL_TRUE;
}
}
return SDL_TRUE;
}
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_HINT_ALLOW_TOPMOST
#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...
Definition: SDL_hints.h:345
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_FALSE
Definition: SDL_stdinc.h:128

int SDL_ShowMessageBox | ( | const SDL_MessageBoxData * | messageboxdata,
|  | int * | buttonid
| ) |  |

Create a modal message box.

Parameters

  messageboxdata | The SDL_MessageBoxData structure with title, text, etc.
  buttonid | The pointer to which user id of hit button should be copied.

Returns
  -1 on error, otherwise 0 and buttonid contains user id of button hit or -1 if dialog was closed.

Note
  This function should be called on the thread that created the parent window, or on the main thread if the messagebox has no parent. It will block execution of that thread until the user clicks a button or closes the messagebox.

Definition at line 3508 of file SDL_video.c.

References retval, SDL_CaptureMouse, SDL_FALSE, SDL_GetKeyboardFocus, SDL_GetRelativeMouseMode, SDL_GetWindowFlags(), SDL_InvalidParamError, SDL_MessageboxValidForDriver(), SDL_RaiseWindow(), SDL_ResetKeyboard(), SDL_SetError, SDL_SetRelativeMouseMode, SDL_ShowCursor, SDL_SYSWM_COCOA, SDL_SYSWM_UIKIT, SDL_SYSWM_WINDOWS, SDL_SYSWM_WINRT, SDL_SYSWM_X11, SDL_TRUE, SDL_WINDOW_MOUSE_CAPTURE, and SDL_VideoDevice::ShowMessageBox.

Referenced by SDL_ShowSimpleMessageBox().

{
int dummybutton;
int retval = -1;
SDL_bool relative_mode;
int show_cursor_prev;
SDL_bool mouse_captured;
SDL_Window *current_window;
if (!messageboxdata) {
return SDL_InvalidParamError("messageboxdata");
}
current_window = SDL_GetKeyboardFocus();
mouse_captured = current_window && ((SDL_GetWindowFlags(current_window) & SDL_WINDOW_MOUSE_CAPTURE) != 0);
relative_mode = SDL_GetRelativeMouseMode();
SDL_CaptureMouse(SDL_FALSE);
SDL_SetRelativeMouseMode(SDL_FALSE);
show_cursor_prev = SDL_ShowCursor(1);
SDL_ResetKeyboard();
if (!buttonid) {
buttonid = &dummybutton;
}
if (_this && _this->ShowMessageBox) {
retval = _this->ShowMessageBox(_this, messageboxdata, buttonid);
}
/* It's completely fine to call this function before video is initialized */
#if SDL_VIDEO_DRIVER_ANDROID
if (retval == -1 &&
Android_ShowMessageBox(messageboxdata, buttonid) == 0) {
retval = 0;
}
#endif
#if SDL_VIDEO_DRIVER_WINDOWS
if (retval == -1 &&
SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_WINDOWS) &&
WIN_ShowMessageBox(messageboxdata, buttonid) == 0) {
retval = 0;
}
#endif
#if SDL_VIDEO_DRIVER_WINRT
if (retval == -1 &&
SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_WINRT) &&
WINRT_ShowMessageBox(messageboxdata, buttonid) == 0) {
retval = 0;
}
#endif
#if SDL_VIDEO_DRIVER_COCOA
if (retval == -1 &&
SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_COCOA) &&
Cocoa_ShowMessageBox(messageboxdata, buttonid) == 0) {
retval = 0;
}
#endif
#if SDL_VIDEO_DRIVER_UIKIT
if (retval == -1 &&
SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_UIKIT) &&
UIKit_ShowMessageBox(messageboxdata, buttonid) == 0) {
retval = 0;
}
#endif
#if SDL_VIDEO_DRIVER_X11
if (retval == -1 &&
SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_X11) &&
X11_ShowMessageBox(messageboxdata, buttonid) == 0) {
retval = 0;
}
#endif
if (retval == -1) {
SDL_SetError("No message system available");
}
if (current_window) {
SDL_RaiseWindow(current_window);
if (mouse_captured) {
SDL_CaptureMouse(SDL_TRUE);
}
}
SDL_ShowCursor(show_cursor_prev);
SDL_SetRelativeMouseMode(relative_mode);
return retval;
}
SDL_MessageboxValidForDriver
static SDL_UNUSED SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype)
Definition: SDL_video.c:3490
SDL_SetRelativeMouseMode
#define SDL_SetRelativeMouseMode
Definition: SDL_dynapi_overrides.h:255
SDL_SYSWM_X11
Definition: SDL_syswm.h:116
SDL_GetKeyboardFocus
#define SDL_GetKeyboardFocus
Definition: SDL_dynapi_overrides.h:222
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_SYSWM_WINRT
Definition: SDL_syswm.h:122
SDL_RaiseWindow
void SDL_RaiseWindow(SDL_Window *window)
Raise a window above other windows and set the input focus.
Definition: SDL_video.c:1969
SDL_GetWindowFlags
Uint32 SDL_GetWindowFlags(SDL_Window *window)
Get the window flags.
Definition: SDL_video.c:1571
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_SYSWM_WINDOWS
Definition: SDL_syswm.h:115
retval
SDL_bool retval
Definition: testgamecontroller.c:65
SDL_WINDOW_MOUSE_CAPTURE
Definition: SDL_video.h:112
SDL_GetRelativeMouseMode
#define SDL_GetRelativeMouseMode
Definition: SDL_dynapi_overrides.h:256
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_VideoDevice::ShowMessageBox
int(* ShowMessageBox)(_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid)
Definition: SDL_sysvideo.h:271
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_ResetKeyboard
void SDL_ResetKeyboard(void)
Definition: SDL_keyboard.c:564
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_CaptureMouse
#define SDL_CaptureMouse
Definition: SDL_dynapi_overrides.h:588
SDL_SYSWM_UIKIT
Definition: SDL_syswm.h:119
SDL_ShowCursor
#define SDL_ShowCursor
Definition: SDL_dynapi_overrides.h:264
SDL_SYSWM_COCOA
Definition: SDL_syswm.h:118

int SDL_ShowSimpleMessageBox | ( | Uint32 | flags,
|  | const char * | title,
|  | const char * | message,
|  | SDL_Window * | window
| ) |  |

Create a simple modal message box.

Parameters

  flags | SDL_MessageBoxFlags
  title | UTF-8 title text
  message | UTF-8 message text
  window | The parent window, or NULL for no parent

Returns
  0 on success, -1 on error

See also
  SDL_ShowMessageBox

Definition at line 3597 of file SDL_video.c.

References button, SDL_MessageBoxData::buttons, SDL_MessageBoxButtonData::flags, SDL_MessageBoxData::flags, SDL_MessageBoxData::message, NULL, SDL_MessageBoxData::numbuttons, SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, SDL_ShowMessageBox(), SDL_zero, SDL_MessageBoxButtonData::text, SDL_MessageBoxData::title, window, and SDL_MessageBoxData::window.

{
SDL_MessageBoxData data;
SDL_MessageBoxButtonData button;
SDL_zero(data);
data.flags = flags;
data.title = title;
data.message = message;
data.numbuttons = 1;
data.buttons = &button;
data.window = window;
SDL_zero(button);
button.flags |= SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT;
button.flags |= SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT;
button.text = "OK";
return SDL_ShowMessageBox(&data, NULL);
}
SDL_MessageBoxData::message
const char * message
Definition: SDL_messagebox.h:97
button
SDL_Texture * button
Definition: testgamecontroller.c:67
SDL_MessageBoxData::title
const char * title
Definition: SDL_messagebox.h:96
SDL_MessageBoxData::window
SDL_Window * window
Definition: SDL_messagebox.h:95
message
GLuint GLsizei const GLchar * message
Definition: SDL_opengl_glext.h:2483
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_MessageBoxData::flags
Uint32 flags
Definition: SDL_messagebox.h:94
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_MessageBoxButtonData
Individual button data.
Definition: SDL_messagebox.h:56
SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT
Definition: SDL_messagebox.h:50
SDL_MessageBoxData::numbuttons
int numbuttons
Definition: SDL_messagebox.h:99
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
SDL_MessageBoxButtonData::flags
Uint32 flags
Definition: SDL_messagebox.h:58
SDL_MessageBoxData::buttons
const SDL_MessageBoxButtonData * buttons
Definition: SDL_messagebox.h:100
SDL_MessageBoxData
MessageBox structure containing title, text, window, etc.
Definition: SDL_messagebox.h:92
NULL
#define NULL
Definition: begin_code.h:143
SDL_ShowMessageBox
int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
Create a modal message box.
Definition: SDL_video.c:3508
flags
GLbitfield flags
Definition: SDL_opengl_glext.h:1480
SDL_MessageBoxButtonData::text
const char * text
Definition: SDL_messagebox.h:60
SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT
Definition: SDL_messagebox.h:49

void SDL_ShowWindow | ( | SDL_Window * | window | ) |

Show a window.

See also
  SDL_HideWindow()

Definition at line 1935 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, SDL_SendWindowEvent(), SDL_WINDOW_SHOWN, SDL_WINDOWEVENT_SHOWN, and SDL_VideoDevice::ShowWindow.

Referenced by SDL_FinishWindowCreation().

{
CHECK_WINDOW_MAGIC(window,);
if (window->flags & SDL_WINDOW_SHOWN) {
return;
}
if (_this->ShowWindow) {
_this->ShowWindow(_this, window);
}
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SHOWN, 0, 0);
}
SDL_VideoDevice::ShowWindow
void(* ShowWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:203
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:74
SDL_WINDOW_SHOWN
Definition: SDL_video.h:100
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_WINDOWEVENT_SHOWN
Definition: SDL_video.h:139
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

void SDL_StartTextInput | ( | void |  | ) |

Start accepting Unicode text input events. This function will show the on-screen keyboard if supported.

See also
  SDL_StopTextInput()
  SDL_SetTextInputRect()
  SDL_HasScreenKeyboardSupport()

Definition at line 3397 of file SDL_video.c.

References SDL_ENABLE, SDL_EventState, SDL_GetFocusWindow(), SDL_TEXTEDITING, SDL_TEXTINPUT, SDL_VideoDevice::ShowScreenKeyboard, SDL_VideoDevice::StartTextInput, and window.

Referenced by SDL_VideoInit().

{
SDL_Window *window;
/* First, enable text events */
SDL_EventState(SDL_TEXTINPUT, SDL_ENABLE);
SDL_EventState(SDL_TEXTEDITING, SDL_ENABLE);
/* Then show the on-screen keyboard, if any */
window = SDL_GetFocusWindow();
if (window && _this && _this->ShowScreenKeyboard) {
_this->ShowScreenKeyboard(_this, window);
}
/* Finally start the text input system */
if (_this && _this->StartTextInput) {
_this->StartTextInput(_this);
}
}
SDL_GetFocusWindow
SDL_Window * SDL_GetFocusWindow(void)
Definition: SDL_video.c:2403
window
SDL_Window * window
Definition: testautomation_render.c:26
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:718
SDL_VideoDevice::StartTextInput
void(* StartTextInput)(_THIS)
Definition: SDL_sysvideo.h:255
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_TEXTINPUT
Definition: SDL_events.h:96
SDL_VideoDevice::ShowScreenKeyboard
void(* ShowScreenKeyboard)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:261
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_EventState
#define SDL_EventState
Definition: SDL_dynapi_overrides.h:137
SDL_TEXTEDITING
Definition: SDL_events.h:95

void SDL_StopTextInput | ( | void |  | ) |

Stop receiving any text input events. This function will hide the on-screen keyboard if supported.

See also
  SDL_StartTextInput()
  SDL_HasScreenKeyboardSupport()

Definition at line 3424 of file SDL_video.c.

References SDL_VideoDevice::HideScreenKeyboard, SDL_DISABLE, SDL_EventState, SDL_GetFocusWindow(), SDL_TEXTEDITING, SDL_TEXTINPUT, SDL_VideoDevice::StopTextInput, and window.

{
SDL_Window *window;
/* Stop the text input system */
if (_this && _this->StopTextInput) {
_this->StopTextInput(_this);
}
/* Hide the on-screen keyboard, if any */
window = SDL_GetFocusWindow();
if (window && _this && _this->HideScreenKeyboard) {
_this->HideScreenKeyboard(_this, window);
}
/* Finally disable text events */
SDL_EventState(SDL_TEXTINPUT, SDL_DISABLE);
SDL_EventState(SDL_TEXTEDITING, SDL_DISABLE);
}
SDL_GetFocusWindow
SDL_Window * SDL_GetFocusWindow(void)
Definition: SDL_video.c:2403
window
SDL_Window * window
Definition: testautomation_render.c:26
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDevice::StopTextInput
void(* StopTextInput)(_THIS)
Definition: SDL_sysvideo.h:256
SDL_DISABLE
#define SDL_DISABLE
Definition: SDL_events.h:717
SDL_TEXTINPUT
Definition: SDL_events.h:96
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_EventState
#define SDL_EventState
Definition: SDL_dynapi_overrides.h:137
SDL_TEXTEDITING
Definition: SDL_events.h:95
SDL_VideoDevice::HideScreenKeyboard
void(* HideScreenKeyboard)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:262

static int SDL_UninitializedVideo | ( |  | ) |

static

Definition at line 419 of file SDL_video.c.

References SDL_SetError.

Referenced by SDL_CreateWindowFrom(), SDL_GetCurrentVideoDriver(), SDL_GetNumVideoDisplays(), SDL_GL_GetCurrentContext(), SDL_GL_GetCurrentWindow(), SDL_GL_GetProcAddress(), SDL_GL_LoadLibrary(), SDL_GL_SetAttribute(), SDL_GL_SetSwapInterval(), and SDL_GL_UnloadLibrary().

{
return SDL_SetError("Video subsystem has not been initialized");
}
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36

static int SDL_UpdateFullscreenMode | ( | SDL_Window * | window,
|  | SDL_bool | fullscreen
| ) |  |

static

Definition at line 1133 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Window::flags, FULLSCREEN_MASK, FULLSCREEN_VISIBLE, SDL_VideoDisplay::fullscreen_window, SDL_DisplayMode::h, SDL_Window::h, SDL_Window::is_destroying, SDL_Window::is_hiding, SDL_Window::last_fullscreen_flags, SDL_Window::next, NULL, SDL_FALSE, SDL_GetDisplayForWindow(), SDL_GetWindowDisplayMode(), SDL_MinimizeWindow(), SDL_OnWindowResized(), SDL_RestoreMousePosition(), SDL_SendWindowEvent(), SDL_SetDisplayModeForDisplay(), SDL_TRUE, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_WINDOWEVENT_RESIZED, SDL_zero, SDL_VideoDevice::SetWindowFullscreen, SDL_DisplayMode::w, SDL_Window::w, SDL_VideoDevice::windows, and WINRT_DetectWindowFlags().

Referenced by SDL_CreateWindow(), SDL_HideWindow(), SDL_MinimizeWindow(), SDL_OnWindowHidden(), SDL_OnWindowMinimized(), SDL_OnWindowRestored(), SDL_SetWindowFullscreen(), and SDL_SetWindowSize().

{
SDL_VideoDisplay *display;
SDL_Window *other;
CHECK_WINDOW_MAGIC(window,-1);
/* if we are in the process of hiding don't go back to fullscreen */
if ( window->is_hiding && fullscreen )
return 0;
#ifdef __MACOSX__
/* if the window is going away and no resolution change is necessary,
do nothing, or else we may trigger an ugly double-transition
*/
if (window->is_destroying && (window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP)
return 0;
/* If we're switching between a fullscreen Space and "normal" fullscreen, we need to get back to normal first. */
if (fullscreen && ((window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP) && ((window->flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN)) {
if (!Cocoa_SetWindowFullscreenSpace(window, SDL_FALSE)) {
return -1;
}
} else if (fullscreen && ((window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN) && ((window->flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP)) {
display = SDL_GetDisplayForWindow(window);
SDL_SetDisplayModeForDisplay(display, NULL);
if (_this->SetWindowFullscreen) {
_this->SetWindowFullscreen(_this, window, display, SDL_FALSE);
}
}
if (Cocoa_SetWindowFullscreenSpace(window, fullscreen)) {
if (Cocoa_IsWindowInFullscreenSpace(window) != fullscreen) {
return -1;
}
window->last_fullscreen_flags = window->flags;
return 0;
}
#elif __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10)
/* HACK: WinRT 8.x apps can't choose whether or not they are fullscreen
or not. The user can choose this, via OS-provided UI, but this can't
be set programmatically.
Just look at what SDL's WinRT video backend code detected with regards
to fullscreen (being active, or not), and figure out a return/error code
from that.
*/
if (fullscreen == !(WINRT_DetectWindowFlags(window) & FULLSCREEN_MASK)) {
/* Uh oh, either:
1. fullscreen was requested, and we're already windowed
2. windowed-mode was requested, and we're already fullscreen
WinRT 8.x can't resolve either programmatically, so we're
giving up.
*/
return -1;
} else {
/* Whatever was requested, fullscreen or windowed mode, is already
in-place.
*/
return 0;
}
#endif
display = SDL_GetDisplayForWindow(window);
if (fullscreen) {
/* Hide any other fullscreen windows */
if (display->fullscreen_window &&
display->fullscreen_window != window) {
SDL_MinimizeWindow(display->fullscreen_window);
}
}
/* See if anything needs to be done now */
if ((display->fullscreen_window == window) == fullscreen) {
if ((window->last_fullscreen_flags & FULLSCREEN_MASK) == (window->flags & FULLSCREEN_MASK)) {
return 0;
}
}
/* See if there are any fullscreen windows */
for (other = _this->windows; other; other = other->next) {
SDL_bool setDisplayMode = SDL_FALSE;
if (other == window) {
setDisplayMode = fullscreen;
} else if (FULLSCREEN_VISIBLE(other) &&
SDL_GetDisplayForWindow(other) == display) {
setDisplayMode = SDL_TRUE;
}
if (setDisplayMode) {
SDL_DisplayMode fullscreen_mode;
SDL_zero(fullscreen_mode);
if (SDL_GetWindowDisplayMode(other, &fullscreen_mode) == 0) {
SDL_bool resized = SDL_TRUE;
if (other->w == fullscreen_mode.w && other->h == fullscreen_mode.h) {
resized = SDL_FALSE;
}
/* only do the mode change if we want exclusive fullscreen */
if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
if (SDL_SetDisplayModeForDisplay(display, &fullscreen_mode) < 0) {
return -1;
}
} else {
if (SDL_SetDisplayModeForDisplay(display, NULL) < 0) {
return -1;
}
}
if (_this->SetWindowFullscreen) {
_this->SetWindowFullscreen(_this, other, display, SDL_TRUE);
}
display->fullscreen_window = other;
/* Generate a mode change event here */
if (resized) {
SDL_SendWindowEvent(other, SDL_WINDOWEVENT_RESIZED,
fullscreen_mode.w, fullscreen_mode.h);
} else {
SDL_OnWindowResized(other);
}
SDL_RestoreMousePosition(other);
window->last_fullscreen_flags = window->flags;
return 0;
}
}
}
/* Nope, restore the desktop mode */
SDL_SetDisplayModeForDisplay(display, NULL);
if (_this->SetWindowFullscreen) {
_this->SetWindowFullscreen(_this, window, display, SDL_FALSE);
}
display->fullscreen_window = NULL;
/* Generate a mode change event here */
SDL_OnWindowResized(window);
/* Restore the cursor position */
SDL_RestoreMousePosition(window);
window->last_fullscreen_flags = window->flags;
return 0;
}
SDL_Window::next
SDL_Window * next
Definition: SDL_sysvideo.h:109
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_DisplayMode::w
int w
Definition: SDL_video.h:56
FULLSCREEN_VISIBLE
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:111
SDL_RestoreMousePosition
static void SDL_RestoreMousePosition(SDL_Window *window)
Definition: SDL_video.c:1118
SDL_DisplayMode
The structure that defines a display mode.
Definition: SDL_video.h:53
SDL_Window::is_destroying
SDL_bool is_destroying
Definition: SDL_sysvideo.h:97
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:74
SDL_MinimizeWindow
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
Definition: SDL_video.c:1998
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_GetWindowDisplayMode
int SDL_GetWindowDisplayMode(SDL_Window *window, SDL_DisplayMode *mode)
Fill in information about the display mode used when a fullscreen window is visible.
Definition: SDL_video.c:1070
SDL_GetDisplayForWindow
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
Definition: SDL_video.c:1039
SDL_zero
#define SDL_zero(x)
Definition: SDL_stdinc.h:355
SDL_DisplayMode::h
int h
Definition: SDL_video.h:57
WINRT_DetectWindowFlags
Uint32 WINRT_DetectWindowFlags(SDL_Window *window)
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_SetDisplayModeForDisplay
static int SDL_SetDisplayModeForDisplay(SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
Definition: SDL_video.c:930
SDL_VideoDisplay::fullscreen_window
SDL_Window * fullscreen_window
Definition: SDL_sysvideo.h:129
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
NULL
#define NULL
Definition: begin_code.h:143
SDL_Window::last_fullscreen_flags
Uint32 last_fullscreen_flags
Definition: SDL_sysvideo.h:82
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
SDL_VideoDevice::SetWindowFullscreen
void(* SetWindowFullscreen)(_THIS, SDL_Window *window, SDL_VideoDisplay *display, SDL_bool fullscreen)
Definition: SDL_sysvideo.h:210
SDL_WINDOWEVENT_RESIZED
Definition: SDL_video.h:145
FULLSCREEN_MASK
#define FULLSCREEN_MASK
Definition: SDL_video.c:138
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_WINDOW_FULLSCREEN_DESKTOP
Definition: SDL_video.h:109
SDL_OnWindowResized
void SDL_OnWindowResized(SDL_Window *window)
Definition: SDL_video.c:2301
SDL_Window::is_hiding
SDL_bool is_hiding
Definition: SDL_sysvideo.h:96

void SDL_UpdateWindowGrab | ( | SDL_Window * | window | ) |

Definition at line 2227 of file SDL_video.c.

References SDL_Window::flags, SDL_VideoDevice::grabbed_window, NULL, SDL_FALSE, SDL_GetMouse(), SDL_TRUE, SDL_WINDOW_INPUT_FOCUS, SDL_WINDOW_INPUT_GRABBED, SDL_VideoDevice::SetWindowGrab, and window.

Referenced by SDL_OnWindowFocusGained(), SDL_OnWindowFocusLost(), SDL_SetRelativeMouseMode(), and SDL_SetWindowGrab().

{
SDL_Window *grabbed_window;
SDL_bool grabbed;
if ((SDL_GetMouse()->relative_mode || (window->flags & SDL_WINDOW_INPUT_GRABBED)) &&
(window->flags & SDL_WINDOW_INPUT_FOCUS)) {
grabbed = SDL_TRUE;
} else {
grabbed = SDL_FALSE;
}
grabbed_window = _this->grabbed_window;
if (grabbed) {
if (grabbed_window && (grabbed_window != window)) {
/* stealing a grab from another window! */
grabbed_window->flags &= ~SDL_WINDOW_INPUT_GRABBED;
if (_this->SetWindowGrab) {
_this->SetWindowGrab(_this, grabbed_window, SDL_FALSE);
}
}
_this->grabbed_window = window;
} else if (grabbed_window == window) {
_this->grabbed_window = NULL; /* ungrabbing. */
}
if (_this->SetWindowGrab) {
_this->SetWindowGrab(_this, window, grabbed);
}
}
SDL_GetMouse
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:66
window
SDL_Window * window
Definition: testautomation_render.c:26
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_TRUE
Definition: SDL_stdinc.h:129
NULL
#define NULL
Definition: begin_code.h:143
SDL_WINDOW_INPUT_FOCUS
Definition: SDL_video.h:107
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_VideoDevice::grabbed_window
SDL_Window * grabbed_window
Definition: SDL_sysvideo.h:282
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_VideoDevice::SetWindowGrab
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
Definition: SDL_sysvideo.h:213
SDL_WINDOW_INPUT_GRABBED
Definition: SDL_video.h:106

int SDL_UpdateWindowSurface | ( | SDL_Window * | window | ) |

Copy the window surface to the screen.

Returns
  0 on success, or -1 on error.

See also
  SDL_GetWindowSurface()
  SDL_UpdateWindowSurfaceRects()

Definition at line 2097 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_Rect::h, SDL_Window::h, SDL_UpdateWindowSurfaceRects(), SDL_Rect::w, SDL_Window::w, SDL_Rect::x, and SDL_Rect::y.

{
SDL_Rect full_rect;
CHECK_WINDOW_MAGIC(window, -1);
full_rect.x = 0;
full_rect.y = 0;
full_rect.w = window->w;
full_rect.h = window->h;
return SDL_UpdateWindowSurfaceRects(window, &full_rect, 1);
}
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_UpdateWindowSurfaceRects
int SDL_UpdateWindowSurfaceRects(SDL_Window *window, const SDL_Rect *rects, int numrects)
Copy a number of rectangles on the window surface to the screen.
Definition: SDL_video.c:2111
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_Rect::w
int w
Definition: SDL_rect.h:67
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_Rect::h
int h
Definition: SDL_rect.h:67
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Rect::y
int y
Definition: SDL_rect.h:66
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64

int SDL_UpdateWindowSurfaceRects | ( | SDL_Window * | window,
|  | const SDL_Rect * | rects,
|  | int | numrects
| ) |  |

Copy a number of rectangles on the window surface to the screen.

Returns
  0 on success, or -1 on error.

See also
  SDL_GetWindowSurface()
  SDL_UpdateWindowSurfaceRect()

Definition at line 2111 of file SDL_video.c.

References CHECK_WINDOW_MAGIC, SDL_SetError, SDL_Window::surface_valid, and SDL_VideoDevice::UpdateWindowFramebuffer.

Referenced by SDL_UpdateWindowSurface().

{
CHECK_WINDOW_MAGIC(window, -1);
if (!window->surface_valid) {
return SDL_SetError("Window surface is invalid, please call SDL_GetWindowSurface() to get a new surface");
}
return _this->UpdateWindowFramebuffer(_this, window, rects, numrects);
}
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_VideoDevice::UpdateWindowFramebuffer
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
Definition: SDL_sysvideo.h:216
CHECK_WINDOW_MAGIC
#define CHECK_WINDOW_MAGIC(window, retval)
Definition: SDL_video.c:116
SDL_Window::surface_valid
SDL_bool surface_valid
Definition: SDL_sysvideo.h:94

static int SDL_UpdateWindowTexture | ( | SDL_VideoDevice * | unused,
|  | SDL_Window * | window,
|  | const SDL_Rect * | rects,
|  | int | numrects
| ) |  |

static

Definition at line 348 of file SDL_video.c.

References SDL_WindowTextureData::bytes_per_pixel, SDL_Window::h, NULL, SDL_WindowTextureData::pitch, SDL_WindowTextureData::pixels, rect, SDL_WindowTextureData::renderer, SDL_GetSpanEnclosingRect(), SDL_GetWindowData(), SDL_RenderCopy, SDL_RenderPresent, SDL_SetError, SDL_UpdateTexture, SDL_WINDOWTEXTUREDATA, SDL_WindowTextureData::texture, SDL_Window::w, SDL_Rect::x, and SDL_Rect::y.

Referenced by SDL_VideoInit().

{
SDL_WindowTextureData *data;
SDL_Rect rect;
void *src;
data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA);
if (!data || !data->texture) {
return SDL_SetError("No window texture data");
}
/* Update a single rect that contains subrects for best DMA performance */
if (SDL_GetSpanEnclosingRect(window->w, window->h, numrects, rects, &rect)) {
src = (void *)((Uint8 *)data->pixels +
rect.y * data->pitch +
rect.x * data->bytes_per_pixel);
if (SDL_UpdateTexture(data->texture, &rect, src, data->pitch) < 0) {
return -1;
}
if (SDL_RenderCopy(data->renderer, data->texture, NULL, NULL) < 0) {
return -1;
}
SDL_RenderPresent(data->renderer);
}
return 0;
}
SDL_GetWindowData
void * SDL_GetWindowData(SDL_Window *window, const char *name)
Retrieve the data pointer associated with a window.
Definition: SDL_video.c:1673
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
SDL_WindowTextureData::bytes_per_pixel
int bytes_per_pixel
Definition: SDL_video.c:156
SDL_WindowTextureData::texture
SDL_Texture * texture
Definition: SDL_video.c:153
rect
SDL_Rect rect
Definition: testrelative.c:27
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_UpdateTexture
#define SDL_UpdateTexture
Definition: SDL_dynapi_overrides.h:321
SDL_RenderCopy
#define SDL_RenderCopy
Definition: SDL_dynapi_overrides.h:349
SDL_WINDOWTEXTUREDATA
#define SDL_WINDOWTEXTUREDATA
Definition: SDL_video.c:149
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_Rect::x
int x
Definition: SDL_rect.h:66
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
SDL_WindowTextureData
Definition: SDL_video.c:151
SDL_WindowTextureData::renderer
SDL_Renderer * renderer
Definition: SDL_video.c:152
SDL_WindowTextureData::pitch
int pitch
Definition: SDL_video.c:155
src
GLenum src
Definition: SDL_opengl_glext.h:1737
SDL_Rect::y
int y
Definition: SDL_rect.h:66
SDL_WindowTextureData::pixels
void * pixels
Definition: SDL_video.c:154
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
SDL_GetSpanEnclosingRect
SDL_bool SDL_GetSpanEnclosingRect(int width, int height, int numrects, const SDL_Rect *rects, SDL_Rect *span)
Definition: SDL_rect.c:463
SDL_RenderPresent
#define SDL_RenderPresent
Definition: SDL_dynapi_overrides.h:352

int SDL_VideoInit | ( | const char * | driver_name | ) |

Initialize the video subsystem, optionally specifying a video driver.

Parameters

  driver_name | Initialize a specific driver by name, or NULL for the default video driver.

Returns
  0 on success, -1 on error

This function initializes the video subsystem; setting up a connection to the window manager, etc, and determines the available display modes and pixel formats, but does not initialize a window or graphics mode.

See also
  SDL_VideoQuit()

Definition at line 443 of file SDL_video.c.

References VideoBootStrap::create, SDL_VideoDevice::CreateWindowFramebuffer, SDL_VideoDevice::current_glctx_tls, SDL_VideoDevice::current_glwin_tls, SDL_VideoDevice::DestroyWindowFramebuffer, SDL_VideoDevice::dll_handle, SDL_VideoDevice::driver_loaded, SDL_VideoDevice::gl_config, i, SDL_VideoDevice::name, VideoBootStrap::name, SDL_VideoDevice::next_object_id, NULL, SDL_VideoDevice::num_displays, SDL_atoi, SDL_CreateWindowTexture(), SDL_DestroyWindowTexture(), SDL_DisableScreenSaver(), SDL_FALSE, SDL_getenv, SDL_GetHint, SDL_GL_ResetAttributes(), SDL_HasScreenKeyboardSupport(), SDL_HINT_VIDEO_ALLOW_SCREENSAVER, SDL_INIT_EVENTS, SDL_InitSubSystem, SDL_KeyboardInit(), SDL_MouseInit(), SDL_SetError, SDL_StartTextInput(), SDL_strlen, SDL_strncasecmp, SDL_TicksInit(), SDL_TLSCreate, SDL_TouchInit(), SDL_TRUE, SDL_UpdateWindowTexture(), SDL_VideoQuit(), ShouldUseTextureFramebuffer(), SDL_VideoDevice::UpdateWindowFramebuffer, and SDL_VideoDevice::VideoInit.

Referenced by SDL_CreateWindow().

{
SDL_VideoDevice *video;
const char *hint;
int index;
int i;
SDL_bool allow_screensaver;
/* Check to make sure we don't overwrite '_this' */
if (_this != NULL) {
SDL_VideoQuit();
}
#if !SDL_TIMERS_DISABLED
SDL_TicksInit();
#endif
/* Start the event loop */
if (SDL_InitSubSystem(SDL_INIT_EVENTS) < 0 ||
SDL_KeyboardInit() < 0 ||
SDL_MouseInit() < 0 ||
SDL_TouchInit() < 0) {
return -1;
}
/* Select the proper video driver */
index = 0;
video = NULL;
if (driver_name == NULL) {
driver_name = SDL_getenv("SDL_VIDEODRIVER");
}
if (driver_name != NULL) {
for (i = 0; bootstrap[i]; ++i) {
if (SDL_strncasecmp(bootstrap[i]->name, driver_name, SDL_strlen(driver_name)) == 0) {
if (bootstrap[i]->available()) {
video = bootstrap[i]->create(index);
break;
}
}
}
} else {
for (i = 0; bootstrap[i]; ++i) {
if (bootstrap[i]->available()) {
video = bootstrap[i]->create(index);
if (video != NULL) {
break;
}
}
}
}
if (video == NULL) {
if (driver_name) {
return SDL_SetError("%s not available", driver_name);
}
return SDL_SetError("No available video device");
}
_this = video;
_this->name = bootstrap[i]->name;
_this->next_object_id = 1;
/* Set some very sane GL defaults */
_this->gl_config.driver_loaded = 0;
_this->gl_config.dll_handle = NULL;
SDL_GL_ResetAttributes();
_this->current_glwin_tls = SDL_TLSCreate();
_this->current_glctx_tls = SDL_TLSCreate();
/* Initialize the video subsystem */
if (_this->VideoInit(_this) < 0) {
SDL_VideoQuit();
return -1;
}
/* Make sure some displays were added */
if (_this->num_displays == 0) {
SDL_VideoQuit();
return SDL_SetError("The video driver did not add any displays");
}
/* Add the renderer framebuffer emulation if desired */
if (ShouldUseTextureFramebuffer()) {
_this->CreateWindowFramebuffer = SDL_CreateWindowTexture;
_this->UpdateWindowFramebuffer = SDL_UpdateWindowTexture;
_this->DestroyWindowFramebuffer = SDL_DestroyWindowTexture;
}
/* Disable the screen saver by default. This is a change from <= 2.0.1,
but most things using SDL are games or media players; you wouldn't
want a screensaver to trigger if you're playing exclusively with a
joystick, or passively watching a movie. Things that use SDL but
function more like a normal desktop app should explicitly reenable the
screensaver. */
hint = SDL_GetHint(SDL_HINT_VIDEO_ALLOW_SCREENSAVER);
if (hint) {
allow_screensaver = SDL_atoi(hint) ? SDL_TRUE : SDL_FALSE;
} else {
allow_screensaver = SDL_FALSE;
}
if (!allow_screensaver) {
SDL_DisableScreenSaver();
}
/* If we don't use a screen keyboard, turn on text input by default,
otherwise programs that expect to get text events without enabling
UNICODE input won't get any events.
Actually, come to think of it, you needed to call SDL_EnableUNICODE(1)
in SDL 1.2 before you got text input events. Hmm...
*/
if (!SDL_HasScreenKeyboardSupport()) {
SDL_StartTextInput();
}
/* We're ready to go! */
return 0;
}
SDL_GL_ResetAttributes
void SDL_GL_ResetAttributes()
Reset all previously set OpenGL context attributes to their default values.
Definition: SDL_video.c:2740
SDL_VideoDevice::name
const char * name
Definition: SDL_sysvideo.h:146
SDL_INIT_EVENTS
#define SDL_INIT_EVENTS
Definition: SDL.h:81
SDL_VideoQuit
void SDL_VideoQuit(void)
Shuts down the video subsystem.
Definition: SDL_video.c:2532
SDL_VideoDevice::current_glwin_tls
SDL_TLSID current_glwin_tls
Definition: SDL_sysvideo.h:327
SDL_HINT_VIDEO_ALLOW_SCREENSAVER
#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER
A variable controlling whether the screensaver is enabled.
Definition: SDL_hints.h:153
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_InitSubSystem
#define SDL_InitSubSystem
Definition: SDL_dynapi_overrides.h:61
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_KeyboardInit
int SDL_KeyboardInit(void)
Definition: SDL_keyboard.c:554
SDL_strncasecmp
#define SDL_strncasecmp
Definition: SDL_dynapi_overrides.h:426
SDL_MouseInit
int SDL_MouseInit(void)
Definition: SDL_mouse.c:45
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_VideoDevice::gl_config
struct SDL_VideoDevice::@29 gl_config
SDL_UpdateWindowTexture
static int SDL_UpdateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, const SDL_Rect *rects, int numrects)
Definition: SDL_video.c:348
SDL_VideoDevice::driver_loaded
int driver_loaded
Definition: SDL_sysvideo.h:315
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_VideoDevice::dll_handle
void * dll_handle
Definition: SDL_sysvideo.h:317
SDL_TLSCreate
#define SDL_TLSCreate
Definition: SDL_dynapi_overrides.h:484
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_CreateWindowTexture
static int SDL_CreateWindowTexture(SDL_VideoDevice *unused, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
Definition: SDL_video.c:245
SDL_DestroyWindowTexture
static void SDL_DestroyWindowTexture(SDL_VideoDevice *unused, SDL_Window *window)
Definition: SDL_video.c:378
SDL_atoi
#define SDL_atoi
Definition: SDL_dynapi_overrides.h:416
index
GLuint index
Definition: SDL_opengl_glext.h:660
SDL_StartTextInput
void SDL_StartTextInput(void)
Start accepting Unicode text input events. This function will show the on-screen keyboard if supporte...
Definition: SDL_video.c:3397
SDL_getenv
#define SDL_getenv
Definition: SDL_dynapi_overrides.h:384
SDL_VideoDevice::DestroyWindowFramebuffer
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:217
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 in i)
Definition: SDL_x11sym.h:42
NULL
#define NULL
Definition: begin_code.h:143
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
ShouldUseTextureFramebuffer
static SDL_bool ShouldUseTextureFramebuffer()
Definition: SDL_video.c:160
SDL_strlen
#define SDL_strlen
Definition: SDL_dynapi_overrides.h:399
SDL_VideoDevice::current_glctx_tls
SDL_TLSID current_glctx_tls
Definition: SDL_sysvideo.h:328
SDL_FALSE
Definition: SDL_stdinc.h:128
VideoBootStrap::create
SDL_VideoDevice *(* create)(int devindex)
Definition: SDL_sysvideo.h:353
bootstrap
static VideoBootStrap * bootstrap[]
Definition: SDL_video.c:59
VideoBootStrap::name
const char * name
Definition: SDL_sysvideo.h:350
SDL_VideoDevice
Definition: SDL_sysvideo.h:142
SDL_TicksInit
void SDL_TicksInit(void)
SDL_VideoDevice::VideoInit
int(* VideoInit)(_THIS)
Definition: SDL_sysvideo.h:155
SDL_VideoDevice::UpdateWindowFramebuffer
int(* UpdateWindowFramebuffer)(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
Definition: SDL_sysvideo.h:216
SDL_VideoDevice::next_object_id
Uint32 next_object_id
Definition: SDL_sysvideo.h:284
SDL_HasScreenKeyboardSupport
SDL_bool SDL_HasScreenKeyboardSupport(void)
Returns whether the platform has some screen keyboard support.
Definition: SDL_video.c:3453
SDL_VideoDevice::CreateWindowFramebuffer
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
Definition: SDL_sysvideo.h:215
SDL_TouchInit
int SDL_TouchInit(void)
Definition: SDL_touch.c:36
SDL_DisableScreenSaver
void SDL_DisableScreenSaver()
Prevent the screen from being blanked by a screensaver.
Definition: SDL_video.c:2517

void SDL_VideoQuit | ( | void |  | ) |

Shuts down the video subsystem.

This function closes all windows, and restores the original video mode.

See also
  SDL_VideoInit()

Definition at line 2532 of file SDL_video.c.

References SDL_VideoDevice::clipboard_text, SDL_VideoDisplay::desktop_mode, SDL_VideoDisplay::display_modes, SDL_VideoDevice::displays, SDL_DisplayMode::driverdata, SDL_VideoDisplay::driverdata, SDL_VideoDevice::free, i, j, SDL_VideoDisplay::name, NULL, SDL_VideoDisplay::num_display_modes, SDL_VideoDevice::num_displays, SDL_DestroyWindow(), SDL_EnableScreenSaver(), SDL_free(), SDL_INIT_EVENTS, SDL_KeyboardQuit(), SDL_MouseQuit(), SDL_QuitSubSystem, SDL_TouchQuit(), SDL_VideoDevice::VideoQuit, and SDL_VideoDevice::windows.

Referenced by SDL_VideoInit().

{
int i, j;
if (!_this) {
return;
}
/* Halt event processing before doing anything else */
SDL_TouchQuit();
SDL_MouseQuit();
SDL_KeyboardQuit();
SDL_QuitSubSystem(SDL_INIT_EVENTS);
SDL_EnableScreenSaver();
/* Clean up the system video */
while (_this->windows) {
SDL_DestroyWindow(_this->windows);
}
_this->VideoQuit(_this);
for (i = 0; i < _this->num_displays; ++i) {
SDL_VideoDisplay *display = &_this->displays[i];
for (j = display->num_display_modes; j--;) {
SDL_free(display->display_modes[j].driverdata);
display->display_modes[j].driverdata = NULL;
}
SDL_free(display->display_modes);
display->display_modes = NULL;
SDL_free(display->desktop_mode.driverdata);
display->desktop_mode.driverdata = NULL;
SDL_free(display->driverdata);
display->driverdata = NULL;
}
if (_this->displays) {
for (i = 0; i < _this->num_displays; ++i) {
SDL_free(_this->displays[i].name);
}
SDL_free(_this->displays);
_this->displays = NULL;
_this->num_displays = 0;
}
SDL_free(_this->clipboard_text);
_this->clipboard_text = NULL;
_this->free(_this);
_this = NULL;
}
SDL_INIT_EVENTS
#define SDL_INIT_EVENTS
Definition: SDL.h:81
SDL_VideoDevice::free
void(* free)(_THIS)
Definition: SDL_sysvideo.h:345
SDL_VideoDisplay::name
char * name
Definition: SDL_sysvideo.h:122
SDL_QuitSubSystem
#define SDL_QuitSubSystem
Definition: SDL_dynapi_overrides.h:62
SDL_MouseQuit
void SDL_MouseQuit(void)
Definition: SDL_mouse.c:435
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_VideoDisplay::num_display_modes
int num_display_modes
Definition: SDL_sysvideo.h:124
SDL_free
void SDL_free(void *mem)
SDL_DisplayMode::driverdata
void * driverdata
Definition: SDL_video.h:59
SDL_DestroyWindow
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
Definition: SDL_video.c:2419
SDL_VideoDevice::num_displays
int num_displays
Definition: SDL_sysvideo.h:279
SDL_VideoDisplay::display_modes
SDL_DisplayMode * display_modes
Definition: SDL_sysvideo.h:125
SDL_VideoDevice::displays
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:280
SDL_VideoDevice::windows
SDL_Window * windows
Definition: SDL_sysvideo.h:281
SDL_KeyboardQuit
void SDL_KeyboardQuit(void)
Definition: SDL_keyboard.c:817
SDL_VideoDisplay
Definition: SDL_sysvideo.h:120
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 in i)
Definition: SDL_x11sym.h:42
NULL
#define NULL
Definition: begin_code.h:143
SDL_VideoDisplay::desktop_mode
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:126
SDL_VideoDevice::VideoQuit
void(* VideoQuit)(_THIS)
Definition: SDL_sysvideo.h:161
SDL_EnableScreenSaver
void SDL_EnableScreenSaver()
Allow the screen to be blanked by a screensaver.
Definition: SDL_video.c:2502
SDL_TouchQuit
void SDL_TouchQuit(void)
Definition: SDL_touch.c:352
SDL_VideoDisplay::driverdata
void * driverdata
Definition: SDL_sysvideo.h:133
SDL_VideoDevice::clipboard_text
char * clipboard_text
Definition: SDL_sysvideo.h:285
j
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)
Definition: SDL_x11sym.h:42

static SDL_bool ShouldMinimizeOnFocusLoss | ( | SDL_Window * | window | ) |

static

Definition at line 2360 of file SDL_video.c.

References SDL_Window::flags, SDL_Window::is_destroying, SDL_FALSE, SDL_GetHint, SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, SDL_TRUE, and SDL_WINDOW_FULLSCREEN.

Referenced by SDL_OnWindowFocusLost().

{
const char *hint;
if (!(window->flags & SDL_WINDOW_FULLSCREEN) || window->is_destroying) {
return SDL_FALSE;
}
#ifdef __MACOSX__
if (Cocoa_IsWindowInFullscreenSpace(window)) {
return SDL_FALSE;
}
#endif
hint = SDL_GetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS);
if (hint) {
if (*hint == '0') {
return SDL_FALSE;
} else {
return SDL_TRUE;
}
}
return SDL_TRUE;
}
SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS
#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS
Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to true...
Definition: SDL_hints.h:250
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_Window::is_destroying
SDL_bool is_destroying
Definition: SDL_sysvideo.h:97
SDL_TRUE
Definition: SDL_stdinc.h:129
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:98
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:81

static SDL_bool ShouldUseTextureFramebuffer | ( |  | ) |

static

Definition at line 160 of file SDL_video.c.

References APIENTRY, SDL_VideoDevice::CreateWindowFramebuffer, GL_VENDOR, NULL, SDL_CreateWindow(), SDL_DestroyWindow(), SDL_FALSE, SDL_GetHint, SDL_GL_CreateContext(), SDL_GL_DeleteContext(), SDL_GL_GetProcAddress(), SDL_HINT_FRAMEBUFFER_ACCELERATION, SDL_HINT_RENDER_DRIVER, SDL_strcasecmp, SDL_strstr, SDL_TRUE, SDL_WINDOW_HIDDEN, SDL_WINDOW_OPENGL, and window.

Referenced by SDL_VideoInit().

{
const char *hint;
/* If there's no native framebuffer support then there's no option */
if (!_this->CreateWindowFramebuffer) {
return SDL_TRUE;
}
/* If the user has specified a software renderer we can't use a
texture framebuffer, or renderer creation will go recursive.
*/
hint = SDL_GetHint(SDL_HINT_RENDER_DRIVER);
if (hint && SDL_strcasecmp(hint, "software") == 0) {
return SDL_FALSE;
}
/* See if the user or application wants a specific behavior */
hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION);
if (hint) {
if (*hint == '0') {
return SDL_FALSE;
} else {
return SDL_TRUE;
}
}
/* Each platform has different performance characteristics */
#if defined(__WIN32__)
/* GDI BitBlt() is way faster than Direct3D dynamic textures right now.
*/
return SDL_FALSE;
#elif defined(__MACOSX__)
/* Mac OS X uses OpenGL as the native fast path */
return SDL_TRUE;
#elif defined(__LINUX__)
/* Properly configured OpenGL drivers are faster than MIT-SHM */
#if SDL_VIDEO_OPENGL
/* Ugh, find a way to cache this value! */
{
SDL_Window *window;
SDL_GLContext context;
SDL_bool hasAcceleratedOpenGL = SDL_FALSE;
window = SDL_CreateWindow("OpenGL test", -32, -32, 32, 32, SDL_WINDOW_OPENGL|SDL_WINDOW_HIDDEN);
if (window) {
context = SDL_GL_CreateContext(window);
if (context) {
const GLubyte *(APIENTRY * glGetStringFunc) (GLenum);
const char *vendor = NULL;
glGetStringFunc = SDL_GL_GetProcAddress("glGetString");
if (glGetStringFunc) {
vendor = (const char *) glGetStringFunc(GL_VENDOR);
}
/* Add more vendors here at will... */
if (vendor &&
(SDL_strstr(vendor, "ATI Technologies") ||
SDL_strstr(vendor, "NVIDIA"))) {
hasAcceleratedOpenGL = SDL_TRUE;
}
SDL_GL_DeleteContext(context);
}
SDL_DestroyWindow(window);
}
return hasAcceleratedOpenGL;
}
#elif SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
/* Let's be optimistic about this! */
return SDL_TRUE;
#else
return SDL_FALSE;
#endif
#else
/* Play it safe, assume that if there is a framebuffer driver that it's
optimized for the current platform.
*/
return SDL_FALSE;
#endif
}
GL_VENDOR
#define GL_VENDOR
Definition: SDL_opengl.h:706
window
SDL_Window * window
Definition: testautomation_render.c:26
APIENTRY
#define APIENTRY
Definition: SDL_opengl.h:132
SDL_GL_DeleteContext
void SDL_GL_DeleteContext(SDL_GLContext context)
Delete an OpenGL context.
Definition: SDL_video.c:3266
SDL_GetHint
#define SDL_GetHint
Definition: SDL_dynapi_overrides.h:197
SDL_strcasecmp
#define SDL_strcasecmp
Definition: SDL_dynapi_overrides.h:425
SDL_WINDOW_HIDDEN
Definition: SDL_video.h:101
SDL_GL_CreateContext
SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
Create an OpenGL context for use with an OpenGL window, and make it current.
Definition: SDL_video.c:3135
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_GLContext
void * SDL_GLContext
An opaque handle to an OpenGL context.
Definition: SDL_video.h:164
SDL_CreateWindow
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.
Definition: SDL_video.c:1316
SDL_DestroyWindow
void SDL_DestroyWindow(SDL_Window *window)
Destroy a window.
Definition: SDL_video.c:2419
SDL_TRUE
Definition: SDL_stdinc.h:129
GLubyte
unsigned char GLubyte
Definition: SDL_opengl.h:176
GLenum
unsigned int GLenum
Definition: SDL_opengl.h:169
NULL
#define NULL
Definition: begin_code.h:143
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_HINT_FRAMEBUFFER_ACCELERATION
#define SDL_HINT_FRAMEBUFFER_ACCELERATION
A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
Definition: SDL_hints.h:65
SDL_FALSE
Definition: SDL_stdinc.h:128
SDL_HINT_RENDER_DRIVER
#define SDL_HINT_RENDER_DRIVER
A variable specifying which render driver to use.
Definition: SDL_hints.h:84
SDL_GL_GetProcAddress
void * SDL_GL_GetProcAddress(const char *proc)
Get the address of an OpenGL function.
Definition: SDL_video.c:2611
SDL_WINDOW_OPENGL
Definition: SDL_video.h:99
SDL_VideoDevice::CreateWindowFramebuffer
int(* CreateWindowFramebuffer)(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
Definition: SDL_sysvideo.h:215
SDL_strstr
#define SDL_strstr
Definition: SDL_dynapi_overrides.h:409

## Variable Documentation

SDL_VideoDevice* _this = NULL

static

Definition at line 114 of file SDL_video.c.

Referenced by SDL_AddVideoDisplay(), SDL_GetClipboardText(), SDL_GetVideoDevice(), SDL_HasClipboardText(), SDL_PumpEvents(), and SDL_SetClipboardText().

VideoBootStrap* bootstrap[]

static

Definition at line 59 of file SDL_video.c.