OpenGL ES 3.0: рендеринг процессора с нулевым копированием в текстуру?

Я работаю над чистым 2D-проектом, где экран обрабатывается процессором, и я хочу отобразить его в виде текстуры, но я не хочу загружать все изображение для каждого кадра. Я не могу сказать, какие части изменены, поэтому я предполагаю, что все изображение недействительно.

Мне нужно выполнить некоторую постобработку (добавление еще одного слоя с несколькими блитами), и мои ранние тесты показали, что это может быть проблема производительности, связанная исключительно с процессором, поэтому мне нужно ускорение графического процессора (2D было бы намного лучше, но это не распространено). /портативный в наши дни...).

Моя целевая платформа — это встроенная система (ARM), в которой GPU и CPU делят память, поэтому теоретически я мог бы сделать это без какой-либо копии. Выбранная платформа поддерживает OpenGL 2.1 и OpenGL ES 3.0.

Я понимаю, что объекты буфера могут быть сопоставлены с помощью glMapBufferRange​(). Я рассмотрел следующие возможности:

  • UNIFORM_BUFFER: слишком мал для хранения полноэкранного изображения.

  • SHADER_STORAGE_BUFFER: поддерживается только с ES 3.1

  • Хранилище загрузки изображений шейдеров: поддерживается только начиная с ES 3.1.

  • Текстура буфера: ES 3.0 не поддерживает (поддерживается с ??)

  • Объекты пиксельного буфера: я не могу добраться до них из шейдеров, и мне кажется, что он действительно копирует, когда я обновляю из него текстуру. Я не знаю, быстрее ли это, чем копирование из памяти клиента (учитывая, что все они находятся на одном чипе ОЗУ :))

  • простые текстуры: не являются буферными объектами, не могут быть отображены в памяти клиентского процесса

Я что-то пропустил? В ES 3.0 нет возможности совместно использовать буфер с графическим процессором, содержащий огромное количество данных, которые я могу записывать из процессора и читать из фрагментных шейдеров?


person Ferenc    schedule 15.01.2017    source источник


Ответы (1)


Вы можете частично изменить текстуру с помощью GLES20.glTexSubImage2D.

person Reaper    schedule 26.01.2017