Perché ottengo prestazioni scadenti con SDL2 e SDL_RenderCopy all’interno di un doppio ciclo su tutti i pixel?

Sto programmando un gioco di raycast utilizzando SDL2. Quando disegno il pavimento, devo chiamare SDL_RenderCopy pixelwise. Ciò porta ad un collo di bottiglia che abbassa il framerate al di sotto di 10 fps. Sto cercando potenziamenti delle prestazioni ma non riesco a trovarne alcuni.

Ecco una panoramica generale del calo delle prestazioni:

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); } } 

Probabilmente dovresti usare lo streaming di texture per questo. Fondamentalmente creerai una SDL_Texture di tipo SDL_TEXTUREACCESS_STREAMING e poi ogni fotogramma ‘bloccherai’ la trama, aggiornerai i pixel necessari e poi “sbloccherai” la texture. La texture viene quindi visualizzata in una singola chiamata SDL_RenderCopy .

Oltre a chiamare SDL_RenderCopy 480.000 volte un frame ucciderà sempre il framerate.

Stai chiamando SDL_RenderCopy() in ciascun frame, quindi 600 * 800 = 480 000 volte! È normale che le prestazioni diminuiscano.