まず、画像が「PNG」のような小さなファイル形式の形式であることを確認します。次に、イメージをブリッティングするときに、背景イメージに透明色を追加していないことを確認します。これは無意味で、多くのCPUサイクルを要します。ここで私はあなたが非常にシームレスに最適化されるように、このにすべてのあなたのイメージを渡すことができるようになり、画像の読み込みのためのラッパー、このコードでは
SDL_Surface* altSDL::load_image(std::string filename)
{
SDL_Surface* loadedImage = NULL;
SDL_Surface* optimizedImage = NULL;
loadedImage = IMG_Load(filename.c_str());
if(loadedImage != NULL)
{
optimizedImage = SDL_DisplayFormat(loadedImage);
SDL_FreeSurface(loadedImage);
}
else
{
Failure* fail;
fail = Failure::getInstance();
fail->failLog(filename);
}
if(optimizedImage != NULL)
{
Uint32 colorkey = SDL_MapRGB(optimizedImage->format, 0xFF, 0, 0xFF);
SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY, colorkey);
}
return optimizedImage;
}
ように長い時間前に書かれたコードの例ですが、場合、あなたはこのコードの最後のブロックは、このような何かの線に沿ってより多くのものに変更されていることを確認する必要があります背景の/大画像:
//Added some Sudo code
if(loadedImage != NULL && !isBigImage)
{
optimizedImage = SDL_DisplayFormat(loadedImage);
SDL_FreeSurface(loadedImage);
}
else if(!isBigImage)
{
Failure* fail;
fail = Failure::getInstance();
fail->failLog(filename);
}
isBigImage iが追加sudoのコードであり、パラメータが渡されますに;場合によっては、これはすべての画像を最適化し、小さくし(pngファイルであることを確認する必要があります)、透過性が小さい画像ファイルにのみ追加されるようにします。
Do not doあなたのサーフェスを表示フォーマットに変換することを忘れないでください(http://www.libsdl.org/docs/html/sdldisplayformat.html)。そうしないと、SDLはすべてのblit *のために舞台裏での変換を行います。 – genpfault
しました。しかし、blitはまだCPU貪欲です... –
@ArnaudGこれはかなり古いですが、どのようにCPU消費量を計算しますか?あなたはどんなフレームレートを得ていますか? – emartel