Почему я получаю плохую производительность с SDL2 и SDL_RenderCopy внутри двойного цикла for для всех пикселей?

Я программирую игру радиопередачи, используя 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);
}
}

3

Решение

Вы, вероятно, должны использовать потоковую передачу текстур для этого. В основном вы создадите SDL_Texture типа SDL_TEXTUREACCESS_STREAMING а затем в каждом кадре вы «блокируете» текстуру, обновляете требуемые пиксели, а затем снова «разблокируете» текстуру. Текстура затем отображается в одном SDL_RenderCopy вызов.

Кроме этого призвания SDL_RenderCopy 480 000 раз кадр всегда убивает вашу частоту кадров.

5

Другие решения

Ты звонишь SDL_RenderCopy() в каждом кадре так 600 * 800 = 480 000 раз! Это нормально для снижения производительности.

2

По вопросам рекламы [email protected]