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

SDL_Init

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

構文

int SDL_Init(Uint32 flags)

引数

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

戻り値

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

サンプルコード

C

#include "SDL.h"
#include <stdio.h> /* fprintf()のため */
#include <stdlib.h> /* atexit()のため */

int main(int argv, char** argc) {
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) != 0) {
        fprintf(stderr, 
                "\nSDLを初期化できなかった:  %s\n",
                SDL_GetError()
               );
        return 1;
    }
    atexit(SDL_Quit);

    /* ... */

    return 0;
}

C++

#include <exception>
#include <string>
#include "SDL.h"

class InitError: public std::exception {
    public:
        InitError();
        InitError(const std::string&);
        virtual ~InitError() throw();
        virtual const char* what() const throw();
    private:
        std::string msg;
};

InitError::InitError():
  exception(), msg(SDL_GetError()) {}
InitError::InitError(const std::string& m):
  exception(), msg(m) {}
InitError::~InitError() throw() {}
const char* InitError::what() const throw() {
    return msg.c_str();
}

class SDL {
    public:
        SDL(Uint32 flags = 0) throw(InitError);
        virtual ~SDL();
};

SDL::SDL(Uint32 flags) throw(InitError) {
    if (SDL_Init(flags) != 0)
        throw InitError();
}

SDL::~SDL() {
    SDL_Quit();
}

/* ... */

#include <iostream>

int main(int argc, char **argv) {
    try {
        SDL sdl(SDL_INIT_VIDEO|SDL_INIT_TIMER);

        /* ... */

        return 0;
    }

    catch (const InitError& err) {
        std::cerr
            << "SDLの初期化中にエラーが発生した:  "
            << err.what() << std::endl;
    }

    return 1;
}

詳細

SDL_Init()は単純にSDL_InitSubSystem()に処理を渡している. よって, これら2つは入れ替えられる. コードが読みやすさを考慮するならば, SDL_InitSubSystem()の方がよいかもしれない.

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

flagsは以下の項目の論理和で複数設定できる:
SDL_INIT_TIMERタイマ サブシステム
SDL_INIT_AUDIOオーディオ サブシステム
SDL_INIT_VIDEOビデオ サブシステム. 自動的にSDL_INIT_EVENTSサブシステムを初期化する
SDL_INIT_JOYSTICKジョイスティック サブシステム
SDL_INIT_HAPTICハプティクス(感覚フィードバック) サブシステム
SDL_INIT_GAMECONTROLLERコントローラー サブシステム. 自動的にSDL_INIT_JOYSTICKサブシステムを初期化する
SDL_INIT_EVENTSイベント サブシステム
SDL_INIT_EVERYTHING上記のサブシステムの全て
SDL_INIT_NOPARACHUTE互換性のために存在する. このフラグは機能しない

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

関連項目(関数)

SDL_InitSubSystem
SDL_Quit
SDL_SetMainReady
SDL_WasInit

SDL Wikiへのリンク

SDL_Init - SDL Wiki