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()を呼んで背景バッファを初期化することを強く推奨する.