目次 - API(機能別) - 初期化と終了

初期化と終了

インクルードファイル: SDL.h

概要

これらの関数はSDLの設定のために使われ, プログラム全体に影響がある.

初期化の概要

SDLを使うためには, 他のほとんどの関数の前にSDL_Init()を呼ぶ必要がある. SDL_Init()の役割は, SDLライブラリを正常に初期化し, 要求に応じて個別のサブシステムを開始することである.

イベントハンドル, ファイルI/O, そしてスレッドサブシステムはデフォルトで初期化される. 他のサブシステムを使うときは個別に指定して初期化しなければならない. 論理和で複数のサブシステムを指定できる.

例: SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);
デフォルトの3つに加え, ビデオとオーディオのサブシステムを初期化する.

いくつかのOSでは, SDL_Init()はSDL_main()が定義されていなければ失敗する. あらかじめSDL_SetMainReady()を呼べば, この失敗を回避できる. しかし, 不正な初期化はプログラムをクラッシュさせ, 調査を難しくするため, ユーザがSDL_SetMainReady()を呼ぶときは注意する必要がある.

終了の概要

デフォルトの3つを含むサブシステムを安全に終了させるために, SDLアプリケーションが終了する前にSDL_Quit()を呼ぶ必要がある.

SDL_Quit()を使う場合は, 自動的に全てのサブシステムを終了するため, 個別に指定する必要はない.

関数

  1. SDL_Init
  2. SDL_InitSubSystem
  3. SDL_Quit
  4. SDL_QuitSubSystem
  5. SDL_SetMainReady
  6. SDL_WasInit

SDL Wikiへのリンク

CategoryInit - SDL Wiki

SDL_Init

SDLライブラリを初期化する. 他のあらゆるSDLの関数を呼び出す前にこの関数を呼ぶ必要がある.

構文

int SDL_Init(Uint32 flags)

引数

flagsサブシステム初期化フラグ

戻り値

成功のとき0, エラーのとき負の数のエラーコードを戻す. そのときSDL_GetError()を呼んで詳細を知ることができる.

詳細

イベントハンドル, ファイルI/O, そしてスレッドサブシステムはデフォルトで初期化される. 他のサブシステムを使うときは指定して初期化しなければならない.

flagsは以下の項目の論理和で複数設定できる:
SDL_INIT_TIMERタイマ サブシステム
SDL_INIT_AUDIOオーディオ サブシステム
SDL_INIT_VIDEOビデオ サブシステム
SDL_INIT_JOYSTICKジョイスティック サブシステム
SDL_INIT_HAPTICハプティクス(感覚フィードバック) サブシステム
SDL_INIT_GAMECONTROLLERコントローラー サブシステム
SDL_INIT_EVENTSイベント サブシステム
SDL_INIT_EVERYTHING上記のサブシステムの全て
SDL_INIT_NOPARACHUTEfatal signalをキャッチしない

SDL_INIT_NOPARACHUTEを指定しない限り, (SIGSEGVのような)いくつかのfatal signalのためのクリーンアップシグナルハンドラが設定される.

個別にサブシステムを初期化したい場合は, SDL_Init(0)を呼び, 後で必要なflagsを指定してSDL_InitSubSystem()を呼ぶとよい.

関連項目(関数)

SDL_InitSubSystem
SDL_Quit
SDL_WasInit
SDL_SetMainReady

SDL Wikiへのリンク

SDL_Init - SDL Wiki

SDL_InitSubSystem

サブシステムを個別に初期化する.

構文

int SDL_InitSubSystem(Uint32 flags)

引数

flagsSDL_Init()と同じ

戻り値

成功のとき0, エラーのとき負の数のエラーコードを戻す. そのときSDL_GetError()を呼んで詳細を知ることができる.

詳細

SDL_Init()で初期化した後でもSDL_InitSubSystem()で未初期化のサブシステムを初期化することができる.

SDL_Init()はアサーションとクラッシュプロテクションを初期化し, その後SDL_InitSubSystem()を呼んでいる. それらのプロテクションを回避したい場合は直接SDL_InitSubSystem()を呼ぶとよい.

関連項目(関数)

SDL_Init
SDL_Quit
SDL_QuitSubSystem

SDL Wikiへのリンク

SDL_InitSubSystem - SDL Wiki

SDL_Quit

サブシステムを終了する. いかなる場合でもこの関数を呼ばなければならない.

構文

void SDL_Quit(void)

詳細

SDL_QuitSubSystem()で既に個別にサブシステムを終了した場合でもこの関数を呼ばなければならない.

SDL_Init()SDL_InitSubSystem()の代わりにSDL_VideoInit()等のサブシステム初期化関数を呼んでサブシステムを開始した場合は, SDL_Quit()を呼ぶ前にSDL_VideoQuit()等のサブシステム終了関数を呼ぶ必要がある.

この関数はatexit()でアプリケーションが終了するときに必ず呼ばれるようにすることができる. しかしライブラリや他の動的に読み込まれるコードでそのようにするのはよい方法ではない.

関連項目(関数)

SDL_Init
SDL_QuitSubSystem

SDL Wikiへのリンク

SDL_Quit - SDL Wiki

SDL_QuitSubSystem

サブシステムを個別に終了する.

構文

void SDL_QuitSubSystem(Uint32 flags)

引数

flagsSDL_Init()と同じ

詳細

SDL_Init()SDL_InitSubSystem()の代わりにSDL_VideoInit()等のサブシステム初期化関数を読んでサブシステムを開始した場合, SDL_QuitSubSystem()SDL_WasInit()は使えない. その場合はSDL_VideoQuit()等のサブシステム終了関数を直接呼ぶ必要がある.

全てのサブシステムをSDL_QuitSubSystem()で終了した場合でもSDL_Quit()を呼ぶ必要がある.

関連項目(関数)

SDL_InitSubSystem
SDL_Quit

SDL Wikiへのリンク

SDL_QuitSubSystem - SDL Wiki

SDL_SetMainReady

SDL_Main()を使わないときSDL_Init()の失敗を回避する

構文

void SDL_SetMainReady(void)

詳細

この関数はSDL_main.hで定義されていて, プリプロセッサがmain()をSDL_main()で再定義するときに使用される. main()関数を再定義されないようにするためには, SDL.hをインクルードする前にSDL_MAIN_HANDLEDを定義する必要がある

関連項目(関数)

SDL_Init

SDL Wikiへのリンク

SDL_SetMainReady - SDL Wiki

SDL_WasInit

初期化された個別のサブシステムのマスクを戻す

構文

Uint32 SDL_WasInit(Uint32 flags)

引数

flagsSDL_Init()と同じ

戻り値

flagsが0のとき全ての初期化されたサブシステムのマスクを戻す. その他のとき個別のサブシステムの状態を戻す.

戻り値にはSDL_INIT_NOPARACHUTEは含まれない.

関連項目(関数)

SDL_Init
SDL_InitSubSystem

SDL Wikiへのリンク

SDL_WasInit - SDL Wiki