Почему я получаю плохую производительность с 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);
    }
 }

2 ответа

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

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

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

Другие вопросы по тегам