Обновление текстуры в OpenGL с помощью glTexImage2D

Являются ли glTexImage2D и glTexSubImage2D единственными способами передать буфер пикселов текстуре?

В настоящее время я использую в функции настройки glTexImage2D передачу null в качестве буфера, а затем в цикле рендеринга я вызываю glTexSubImage2D с новыми данными буфера на каждой итерации.

Но зная, что текстура не изменит никакого свойства, такого как размеры, есть ли более эффективный способ передать фактические данные пикселя текстуре рендеринга?

Ответ 1

В современных OpenGL существует 4 разных способа обновления 2D-текстур:

1) glTexImage2D - самый медленный, воссоздает внутренние структуры данных.

2) glTexSubImage2D - немного быстрее, но не может изменять параметры (размер, формат пикселей) изображения.

3) Render-to-texture с FBO - очень быстро обновлять текстуры на графическом процессоре. Подробнее см. В этом ответе: fooobar.com/info/232938/...

4) Объект Pixel Buffer PBO - для быстрой загрузки с CPU на GPU, не поддерживаемый (пока) на OpenGL ES.