2012-03-25 5 views
11

ли glTexImage2D и glTexSubImage2D единственным способом пройти буфер пикселей текстуры?Обновление текстуры в OpenGL с glTexImage2D

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

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

ответ

23

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

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

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

3) Render-to-texture с FBO - обновление текстуры полностью на GPU, очень быстро. См. Этот ответ для получения более подробной информации: https://stackoverflow.com/a/10702468/1065190

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

+0

Я вижу, что FBO будет лучшим вариантом, но в моих текстурах необходимо использовать параметр GL_LUMINANCE, и я только узнал, что FBO не поддерживает такие. Это единственный вариант использования glTexSubImage2D? – PerracoLabs

+0

Вы используете настольные OpenGL или OpenGL ES? –

+0

с использованием OpenGL ES на Android. Причиной использования GL_LUMINANCE является то, что я должен передавать данные YUV420sp в шейдер, потому что я делаю 2 вызова glTexSubImage2D для прохождения двух плоскостей, один для Y, а другой для UV. и поэтому я должен использовать GL_LUMINANCE. возможность преобразования YUV в RGB перед передачей данных в шейдер не является вариантом по причинам скорости. – PerracoLabs

 Смежные вопросы

  • Нет связанных вопросов^_^