我正在使用SDL2编写光线投射游戏。
绘制地板时,我需要按像素调用SDL_RenderCopy。这会导致瓶颈,使帧速率降至10 fps以下。
我正在寻找性能提升的地方,但似乎找不到。

以下是性能下降的粗略概述:

int main() {
  while(true) {
        for(x=0; x<800; x++) {
            for(y=0; y<600; y++) {
                SDL_Rect src = { 0, 0, 1, 1 };
                SDL_Rect dst = { x, y, 1, 1 };
                SDL_RenderCopy(ren, tx, &src, &dst); // this drops the framerate below 10
            }
        }
        SDL_RenderPresent(ren);
    }
 }

最佳答案

您可能应该为此使用纹理流。基本上,您将创建一个类型为SDL_TextureSDL_TEXTUREACCESS_STREAMING,然后在每个帧中“锁定”纹理,更新所需的像素,然后再次“解锁”纹理。然后在单个SDL_RenderCopy调用中渲染纹理。

  • LazyFoo示例-
    http://lazyfoo.net/tutorials/SDL/42_texture_streaming/index.php
  • 探索银河-
    http://slouken.blogspot.co.uk/2011/02/streaming-textures-with-sdl-13.html

  • 除了那次调用SDL_RenderCopy 480,000次之外,总是会杀死您的帧速率。

    10-07 14:41