###### (This is the documentation for SDL3, which is the current stable version. [SDL2](https://wiki.libsdl.org/SDL2/) was the previous version!) # SDL_CreateWindowAndRenderer Create a window and default renderer. ## Header File Defined in [](https://github.com/libsdl-org/SDL/blob/main/include/SDL3/SDL_render.h) ## Syntax ```c bool SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer); ``` ## Function Parameters | | | | | ---------------------------------- | ---------------- | --------------------------------------------------------------------------------- | | const char * | **title** | the title of the window, in UTF-8 encoding. | | int | **width** | the width of the window. | | int | **height** | the height of the window. | | [SDL_WindowFlags](SDL_WindowFlags) | **window_flags** | the flags used to create the window (see [SDL_CreateWindow](SDL_CreateWindow)()). | | [SDL_Window](SDL_Window) ** | **window** | a pointer filled with the window, or NULL on error. | | [SDL_Renderer](SDL_Renderer) ** | **renderer** | a pointer filled with the renderer, or NULL on error. | ## Return Value (bool) Returns true on success or false on failure; call [SDL_GetError](SDL_GetError)() for more information. ## Thread Safety This function should only be called on the main thread. ## Version This function is available since SDL 3.1.3. ## Code Examples ```c #include int main(int argc, char *argv[]) { SDL_Window *window; SDL_Renderer *renderer; SDL_Surface *surface; SDL_Texture *texture; SDL_Event event; if (!SDL_Init(SDL_INIT_VIDEO)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError()); return 3; } if (!SDL_CreateWindowAndRenderer("Hello SDL", 320, 240, SDL_WINDOW_RESIZABLE, &window, &renderer)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window and renderer: %s", SDL_GetError()); return 3; } surface = SDL_LoadBMP("sample.bmp"); if (!surface) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create surface from image: %s", SDL_GetError()); return 3; } texture = SDL_CreateTextureFromSurface(renderer, surface); if (!texture) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture from surface: %s", SDL_GetError()); return 3; } SDL_DestroySurface(surface); while (1) { SDL_PollEvent(&event); if (event.type == SDL_EVENT_QUIT) { break; } SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(renderer); SDL_RenderTexture(renderer, texture, NULL, NULL); SDL_RenderPresent(renderer); } SDL_DestroyTexture(texture); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` ## See Also - [SDL_CreateRenderer](SDL_CreateRenderer) - [SDL_CreateWindow](SDL_CreateWindow) ---- [CategoryAPI](CategoryAPI), [CategoryAPIFunction](CategoryAPIFunction), [CategoryRender](CategoryRender)