I am programming a raycasting game using SDL2. When drawing the floor, I need to call SDL_RenderCopy pixelwise. This leads to a bottleneck which drops the framerate below 10 fps. I am looking for performance boosts but can't seem to find some.
Here's a rough overview of the performance drop:
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);
}
}
You should probably be using texture streaming for this. Basically you will create an SDL_Texture
of type SDL_TEXTUREACCESS_STREAMING
and then each frame you 'lock' the texture, update the pixels that you require then 'unlock' the texture again. The texture is then rendered in a single SDL_RenderCopy
call.
Other than that calling SDL_RenderCopy
480,000 times a frame is always going to kill your framerate.
You are calling SDL_RenderCopy()
in each frame so 600 * 800 = 480 000 times! It is normal for performance to drop.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With