SDL_Window * SDL_CreateWindow(const char *title, int w, int h, SDL_WindowFlags flags);
const char * | title | UTF-8文字列のウィンドウのタイトル |
int | w | ウィンドウのスクリーン座標系の幅 |
int | h | ウィンドウのスクリーン座標系の高さ |
SDL_WindowFlags | flags | 0 または 1つ以上のSDL_WindowFlags列挙体の論理和 |
(SDL_Window *) 生成されたウィンドウを戻す. 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.
ウィンドウの大きさは, デスクトップのレイアウトやウィンドウマネージャのポリシーで期待と異なる場合がある. アプリケーションはあらゆるウィンドウサイズを扱えるように備えるべきである.
flags
はSDL_WindowFlagsの値の論理和(OR)である.
SDL_WindowはSDL_WINDOW_HIDDENを設定しない限り表示される. 生成時に表示しない場合は, 後でSDL_ShowWindow()で表示できる.
AppleのmacOSでは, Info.plistのNSHighResolutionCapableプロパティは必ずYESでなければならない. そうしなければ高DPI OpenGL キャンバスを受信できない.
高DPIディスプレイでウィンドウを生成した場合, ウィンドウのピクセルサイズは, ウィンドウ座標系のサイズと異なる. SDL_GetWindowSize()でクライアント領域のサイズをウィンドウ座標系で得ることができ, SDL_GetWindowSizeInPixels()またはSDL_GetRenderOutputSize()で描画領域のサイズをピクセル数で得ることができる. 描画領域はウィンドウを生成した後でも変更できるので注意すること. SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGEDイベントが発生したならば, 再びサイズを求めるべきである.
SDL_WINDOW_OPENGLまたはSDL_WINDOW_VULKANフラグを指定してウィンドウを生成すると, 一致するLoadLibrary関数(SDL_GL_LoadLibrary()またはSDL_Vulkan_LoadLibrary())が呼び出され, SDL_DestroyWindow()で一致するUnloadLibrary関数が呼ばれる.
SDL_WINDOW_VULKANを指定してVulkanドライバが動作しなかった場合, SDL_Vulkan_LoadLibrary()が失敗するためSDL_CreateWindow()も失敗する.
Metalに対応していないOSでSDL_WINDOW_METALを指定した場合, SDL_CreateWindow()は失敗する.
ウィンドウをSDL_Rendererと共に使いたい場合は, ウィンドウのちらつきを防ぐために, この関数ではなくSDL_CreateWindowAndRenderer()を使用すること.
Appleデバイス以外の場合, SDLはVulkanローダをリンクしないか, 動的リンクライブラリ版のリンクを要求する. 後のバージョンのSDLではこの制約はなくなる予定である.
この関数を呼べるのはメインスレッドのみである.
SDL 3.2.0以降
// サンプルプログラム:
// SDL3でアプリケーションウィンドウを生成する
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
int main(int argc, char* argv[]) {
SDL_Window *window; // ポインタを宣言する
bool done = false;
SDL_Init(SDL_INIT_VIDEO); // SDL3初期化する
// Create an application window with the following settings:
window = SDL_CreateWindow(
"An SDL3 window", // ウィンドウのタイトル
640, // 幅のピクセル数
480, // 高さのピクセル数
SDL_WINDOW_OPENGL // フラグ
);
// ウィンドウの生成に成功したかチェックする
if (window == NULL) {
// ここを通ったならばウィンドウを生成できなかった...
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "ウィンドウを生成できなかった: %s\n", SDL_GetError());
return 1;
}
while (!done) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_EVENT_QUIT) {
done = true;
}
}
// ここでゲームの処理やフレームの表示などを行う
}
// ウィンドウを閉じて破棄する
SDL_DestroyWindow(window);
// 終了処理
SDL_Quit();
return 0;
}