Create a window with the specified dimensions and flags.
Defined in <SDL3/SDL_video.h>
SDL_Window * SDL_CreateWindow(const char *title, int w, int h, SDL_WindowFlags flags);| const char * | title | the title of the window, in UTF-8 encoding. |
| int | w | the width of the window. |
| int | h | the height of the window. |
| SDL_WindowFlags | flags | 0, or one or more SDL_WindowFlags OR'd together. |
(SDL_Window *) Returns the window that was created or NULL on failure; call SDL_GetError() for more information.
The window size is a request and may be different than expected based on the desktop layout and window manager policies. Your application should be prepared to handle a window of any size.
flags may be any of the following OR'd together:
SDL_WINDOW_FULLSCREEN:
fullscreen window at desktop resolutionSDL_WINDOW_OPENGL:
window usable with an OpenGL contextSDL_WINDOW_OCCLUDED:
window partially or completely obscured by another windowSDL_WINDOW_HIDDEN:
window is not visibleSDL_WINDOW_BORDERLESS:
no window decorationSDL_WINDOW_RESIZABLE:
window can be resizedSDL_WINDOW_MINIMIZED:
window is minimizedSDL_WINDOW_MAXIMIZED:
window is maximizedSDL_WINDOW_MOUSE_GRABBED:
window has grabbed mouse focusSDL_WINDOW_INPUT_FOCUS:
window has input focusSDL_WINDOW_MOUSE_FOCUS:
window has mouse focusSDL_WINDOW_EXTERNAL:
window not created by SDLSDL_WINDOW_MODAL:
window is modalSDL_WINDOW_HIGH_PIXEL_DENSITY:
window uses high pixel density back buffer if possibleSDL_WINDOW_MOUSE_CAPTURE:
window has mouse captured (unrelated to MOUSE_GRABBED)SDL_WINDOW_ALWAYS_ON_TOP:
window should always be above othersSDL_WINDOW_UTILITY:
window should be treated as a utility window, not showing in the task
bar and window listSDL_WINDOW_TOOLTIP:
window should be treated as a tooltip and does not get mouse or keyboard
focus, requires a parent windowSDL_WINDOW_POPUP_MENU:
window should be treated as a popup menu, requires a parent windowSDL_WINDOW_KEYBOARD_GRABBED:
window has grabbed keyboard inputSDL_WINDOW_VULKAN:
window usable with a Vulkan instanceSDL_WINDOW_METAL:
window usable with a Metal instanceSDL_WINDOW_TRANSPARENT:
window with transparent bufferSDL_WINDOW_NOT_FOCUSABLE:
window should not be focusableThe SDL_Window is implicitly shown if SDL_WINDOW_HIDDEN is not set.
On Apple's macOS, you must set the NSHighResolutionCapable Info.plist property to YES, otherwise you will not receive a High-DPI OpenGL canvas.
The window pixel size may differ from its window coordinate size if the window is on a high pixel density display. Use SDL_GetWindowSize() to query the client area's size in window coordinates, and SDL_GetWindowSizeInPixels() or SDL_GetRenderOutputSize() to query the drawable size in pixels. Note that the drawable size can vary after the window is created and should be queried again if you get an SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED event.
If the window is created with any of the SDL_WINDOW_OPENGL or SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the corresponding UnloadLibrary function is called by SDL_DestroyWindow().
If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, SDL_CreateWindow() will fail, because SDL_Vulkan_LoadLibrary() will fail.
If SDL_WINDOW_METAL is specified on an OS that does not support Metal, SDL_CreateWindow() will fail.
If you intend to use this window with an SDL_Renderer, you should use SDL_CreateWindowAndRenderer() instead of this function, to avoid window flicker.
On non-Apple devices, SDL requires you to either not link to the Vulkan loader or link to a dynamic library version. This limitation may be removed in a future version of SDL.
This function should only be called on the main thread.
This function is available since SDL 3.2.0.
// Example program:
// Using SDL3 to create an application window
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
int main(int argc, char* argv[]) {
SDL_Window *window; // Declare a pointer
bool done = false;
SDL_Init(SDL_INIT_VIDEO); // Initialize SDL3
// Create an application window with the following settings:
window = SDL_CreateWindow(
"An SDL3 window", // window title
640, // width, in pixels
480, // height, in pixels
SDL_WINDOW_OPENGL // flags - see below
);
// Check that the window was successfully created
if (window == NULL) {
// In the case that the window could not be made...
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Could not create window: %s\n", SDL_GetError());
return 1;
}
while (!done) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_EVENT_QUIT) {
done = true;
}
}
// Do game logic, present a frame, etc.
}
// Close and destroy the window
SDL_DestroyWindow(window);
// Clean up
SDL_Quit();
return 0;
}