bool SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer);
| const char * | title | UTF-8文字列のウィンドウのタイトル |
| int | w | ウィンドウの幅 |
| int | h | ウィンドウの高さ |
| SDL_WindowFlags | flags | ウィンドウ生成のフラグ (SDL_CreateWindow()を参照) |
| SDL_Window ** | window | 生成されたウィンドウの代入先へのポインタ, 失敗のときNULL |
| SDL_Renderer ** | renderer | 生成されたレンダラの代入先へのポインタ, 失敗のときNULL |
この関数を呼べるのはメインスレッドのみである.
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
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, "SDLを初期化できなかった: %s", SDL_GetError());
return 3;
}
if (!SDL_CreateWindowAndRenderer("Hello SDL", 320, 240, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ウィンドウとレンダラーを生成できなかった: %s", SDL_GetError());
return 3;
}
surface = SDL_LoadBMP("sample.bmp");
if (!surface) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "画像からサーフェイスを生成できなかった: %s", SDL_GetError());
return 3;
}
texture = SDL_CreateTextureFromSurface(renderer, surface);
if (!texture) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "サーフェイスからテクスチャを生成できなかった: %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;
}