SDL2 を使用して、フレームごとにタイルマップを表示するゲームを作成していますが、パフォーマンスが遅すぎます。問題を切り分けるために小さなプログラムを書きました。「temp.bmp」は 16x16 の画像であると考えてください。
#include <stdio.h>
#include "SDL2/SDL.h"
#include "SDL2/SDL_timer.h"
#include "SDL2/SDL_image.h"
int main()
{
SDL_Window* win;
SDL_Renderer* ren;
int x, y;
SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(800, 600, 0, &win, &ren);
SDL_Surface* sf = IMG_Load("temp.bmp");
SDL_Texture* tx = SDL_CreateTextureFromSurface(ren, sf);
for(;;) {
Uint32 t = SDL_GetTicks();
for(x=0; x<800; x+=16) {
for(y=0; y<600; y+=16) {
SDL_Rect src = { 0, 0, 16, 16 };
SDL_Rect dst = { x, y, 16, 16 };
SDL_RenderCopy(ren, tx, &src, &dst);
}
}
SDL_RenderPresent(ren);
printf("%ld ms\n", SDL_GetTicks() - t);
}
}
プログラムを実行すると、フレームのレンダリングに約 16 ミリ秒かかることがわかります。これは正確に 60 FPS (1000/60) であり、ゲーム ロジックの余地はありません。また、かなり高速なコンピューターで実行しています。
私は間違った戦略を使用していると確信していますが、何が正しい戦略なのかはわかりません。大きなテクスチャを作成し、あまり頻繁に更新しない方がよいかもしれませんが、あるテクスチャを別のテクスチャにコピーする方法に関するドキュメントは見つかりませんでした。
では、タイルマップのパフォーマンスを向上させるにはどうすればよいでしょうか?