目次 - API(機能別) - 2Dレンダリング - SDL_RenderPresent

SDL_RenderPresent

レンダリングの結果を画面に反映する

構文

void SDL_RenderPresent(SDL_Renderer* renderer)

引数

rendererレンダリングコンテキスト

サンプルコード

#include "SDL.h"

int main(int argc, char* argv[])
{
        SDL_Window* window;
        SDL_Renderer* renderer;

        // SDLを初期化する
        if (SDL_Init(SDL_INIT_VIDEO) < 0)
                return 1;

        // 描画するウィンドウを生成する
        window = SDL_CreateWindow("SDL_RenderClear",
                        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                        512, 512,
                        0);

        // ウィンドウへの描画で使うSDL_CreateRendererを生成する
        renderer = SDL_CreateRenderer(window, -1, 0);

        // 描画の色を選択する. ここでは赤を設定する
        SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);

        // 選択した色で画面を消去する
        SDL_RenderClear(renderer);

        // 上の描画は全て裏側で行われている
        // これで新たに表示され, ウィンドウが赤くなる
        SDL_RenderPresent(renderer);

        // ウィンドウを見せるために5秒待つ
        SDL_Delay(5000);

        // 全て終了する
        SDL_Quit();
        return 0;
}

詳細

SDLのレンダリング関数は背面バッファを操作する. つまり, SDL_RenderDrawLine()のようなレンダリング関数を呼んでも, 背景バッファに線が描かれるだけで, 直接画面には描かれない. グラフィックを描いた後, 背景バッファを画面に反映させる必要がある.

よって, SDLレンダリングAPIを使う場合は, そのフレームを全て描き, そしてこの関数をフレームごとに呼んでユーザに見せる必要がある.

背景バッファは反映した後は無効になると考える必要がある. つまり, 前のフレームのグラフィックが残っているとみなしてはならない. 全てのピクセルを上書きする場合でも, 各フレームを描く前にSDL_RenderClear()を呼んで背景バッファを初期化することを強く推奨する.

関連項目(関数)

SDL_RenderClear
SDL_RenderDrawLine
SDL_RenderDrawLines
SDL_RenderDrawPoint
SDL_RenderDrawPoints
SDL_RenderDrawRect
SDL_RenderDrawRects
SDL_RenderFillRect
SDL_RenderFillRects
SDL_SetRenderDrawBlendMode
SDL_SetRenderDrawColor

SDL Wikiへのリンク

SDL_RenderPresent - SDL Wiki