レンダラの作成と破棄

2021年8月20日

SDLでレンダラの作成と破棄をするには、「SDL_CreateRenderer関数」と「SDL_DestroyRenderer関数」を使用します。

SDL_CreateRenderer関数

レンダラを作成します。

宣言

SDL_Renderer* SDL_CreateRenderer( SDL_Window* window, int index, Uint32 flags );

引数

windowウィンドウのアドレスです。
index初期化するレンダリングドライバの番号です。
-1を指定すると、引数のflagsに対応する最初のドライバを初期化します。
flagsレンダラに求める機能を表す各フラグの論理和です。この引数へ指定した値の機能を持つレンダラを作成します。
各フラグはSDL_RendererFlags型で定義されています。

戻り値

作成に成功すると「レンダラのアドレス」を返し、失敗すると「NULL」を返します。

SDL_DestroyRenderer関数

レンダラを破棄します。

宣言

void SDL_DestroyRenderer( SDL_Renderer* renderer );

引数

rendererレンダラのアドレスです。

サンプルプログラム

#include <SDL.h>

SDL_Window*     g_window    = nullptr;
SDL_Renderer*   g_renderer  = nullptr;

bool Initialize();
void Finalize();

int main( int argc, char* argv[] )
{
    if ( !Initialize() )
    {
        Finalize();
        return -1;
    }

    // レンダラを使用した処理
    
    Finalize();

    return 0;
}

bool Initialize() 
{
    if ( SDL_Init( SDL_INIT_VIDEO ) != 0 )
    {
        SDL_Log( u8"SDLの初期化処理に失敗しました。エラーメッセージ: %s", SDL_GetError() );
        return false;
    }

    g_window = SDL_CreateWindow(
        u8"サンプル",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        1280,
        720,
        0
    );

    if ( g_window == nullptr )
    {
        SDL_Log( u8"ウィンドウの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
        return false;
    }

    g_renderer = SDL_CreateRenderer(
        g_window,
        -1,
        SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC
    );

    if ( g_renderer == nullptr )
    {
        SDL_Log( u8"レンダラの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
        return false;
    }

    return true;
}

void Finalize() 
{
    if ( g_renderer != nullptr )    SDL_DestroyRenderer( g_renderer );
    if ( g_window   != nullptr )    SDL_DestroyWindow( g_window );
    SDL_Quit();
}

参考ページ