Я программирую игру радиопередачи, используя SDL2.
При рисовании пола мне нужно вызывать SDL_RenderCopy по пикселям. Это приводит к узкому месту, которое понижает частоту кадров ниже 10 кадров в секунду.
Я ищу повышение производительности, но не могу найти некоторые.
Вот приблизительный обзор падения производительности:
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
вызов.
Кроме этого призвания SDL_RenderCopy
480 000 раз кадр всегда убивает вашу частоту кадров.
Ты звонишь SDL_RenderCopy()
в каждом кадре так 600 * 800 = 480 000 раз! Это нормально для снижения производительности.