SDL_Window* SDL_CreateWindow(const char* title, int x, int y, int w, int h, Uint32 flags)
title | UTF-8文字列のウィンドウのタイトル |
x | ウィンドウのスクリーン座標系のX座標, SDL_WINDOWPOS_CENTERED, または SDL_WINDOWPOS_UNDEFINED |
y | ウィンドウのスクリーン座標系のY座標, SDL_WINDOWPOS_CENTERED, または SDL_WINDOWPOS_UNDEFINED |
w | ウィンドウのスクリーン座標系の幅 |
h | ウィンドウのスクリーン座標系の高さ |
flags | 0 または 1つ以上のSDL_WindowFlags列挙体の論理和 |
生成されたウィンドウを戻す. 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.
// サンプルプログラム:
// SDL2でアプリケーションウィンドウを生成する
#include "SDL.h"
#include <stdio.h>
int main(int argc, char* argv[]) {
SDL_Window *window; // ポインタを宣言する
SDL_Init(SDL_INIT_VIDEO); // SDL2を初期化する
// 次の設定でアプリケーションウィンドウを生成する:
window = SDL_CreateWindow(
"An SDL2 window", // ウィンドウのタイトル
SDL_WINDOWPOS_UNDEFINED, // X座標の初期値
SDL_WINDOWPOS_UNDEFINED, // Y座標の初期値
640, // 幅のピクセル数
480, // 高さのピクセル数
SDL_WINDOW_OPENGL // フラグ
);
// ウィンドウの生成に成功したかチェックする
if (window == NULL) {
// ここを通ったならばウィンドウを生成できなかった...
printf("ウィンドウを生成できなかった: %s¥n", SDL_GetError());
return 1;
}
// ウィンドウが開いた: ここでプログラムループに入る (SDL_PollEvent()を参照すること)
SDL_Delay(3000); // 例として3000ミリ秒間停止する
// ウィンドウを閉じて破棄する
SDL_DestroyWindow(window);
// 終了処理
SDL_Quit();
return 0;
}
SDL_CreateWindow()ではSDL_WINDOW_SHOWNは無視される. SDL_WindowはSDL_WINDOW_HIDDENが設定されない限り表示される. SDL_WINDOW_SHOWNはSDL_GetWindowFlags()で問い合わせたとき使われる.
AppleのmacOSでは, Info.plistのNSHighResolutionCapableプロパティは必ずYESでなければならない. そうしなければ高DPI OpenGL キャンバスを受信できない.
高DPIに対応した環境(iOSやOS X)でSDL_WINDOW_ALLOW_HIGHDPIを指定してウィンドウを生成した場合, スクリーン座標系のウィンドウサイズは, ピクセル数のウィンドウサイズと異なる場合がある. SDL_GL_GetDrawableSize()またはSDL_GetRendererOutputSize()でピクセル数のクライアントサイズを得ることができる. このフラグを設定した場合, ウィンドウが生成された後に描画可能なサイズが変化しうるため, ウィンドウのサイズが変わった, またはディスプレイ間で移動したようなイベントが発生した後はサイズを調べなおさなければならないので注意すること.
フルスクリーンの設定をした場合, 幅と高さの引数であるwとhは使われない. しかし, 不正なサイズの引数(例えば大きすぎる)の場合は失敗する. 全ての環境でのウィンドウサイズの事実上の限界は16384×16384である.
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()は失敗する.
Appleデバイス以外の場合, SDLはVulkanローダをリンクしないか, 動的リンクライブラリ版のリンクを要求する. 後のバージョンのSDLではこの制約はなくなる予定である.
SDL 2.0.0以降