我正在使用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_Texture
的SDL_TEXTUREACCESS_STREAMING
,然后在每个帧中“锁定”纹理,更新所需的像素,然后再次“解锁”纹理。然后在单个SDL_RenderCopy
调用中渲染纹理。
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次之外,总是会杀死您的帧速率。