Я работаю над чистым 2D-проектом, где экран отображается процессором, и я хочу отображать его как текстуру, но я не хочу загружать все изображение для каждого кадра. Я не могу сказать, какие части изменены, поэтому я предполагаю, что все изображение недействительно.OpenGL ES 3.0: рендеринг процессора с нулевой копией?
Мне нужно сделать некоторую постобработку (добавив еще один слой с некоторыми бликами), а мои ранние тесты показали, что это может быть проблема производительности, выполняемая исключительно с процессором, поэтому мне нужен ускорение GPU (2D будет намного лучше, но в наши дни не является обычным/переносным ...).
Моя целевая платформа - это встроенная система (ARM), где GPU и CPU разделяют память, поэтому теоретически я мог бы сделать это без какой-либо копии. Выбранная платформа поддерживает OpenGL 2.1 и OpenGL ES 3.0.
Я понимаю, что объекты буфера могут быть сопоставлены glMapBufferRange(). Я посмотрел после того, как возможности ниже:
UNIFORM_BUFFER: слишком мал, чтобы хранить полноэкранное изображение с
SHADER_STORAGE_BUFFER: поддерживается только ES 3,1
Shader Image Load Store: поддерживается только от ES 3.1
буфера текстуры: ES 3.0 не поддерживает (поддерживается ??)
Pixel Buffer Объекты: я не могу связаться с ними из шейдеров, и мне кажется, что он делает копию, когда я обновляю текстуру от него. Я не знаю, если это быстрее, чем копирование из клиентской памяти (с учетом того, что все они находятся на одном чипе RAM :))
простые текстуры: не являются объектами буфера, не могут быть отображены в память клиентского процесса
Пропустить что-нибудь? В ES 3.0 нет возможности обмениваться буфером с графическим процессором, содержащим массовое количество данных, что я могу писать с процессора и читать из флеш-шейдеров?