Привет
Я хочу применить несколько эффектов обработки изображения к входной текстуре, используя OpenGL ES.
Мне удалось применить один эффект пост-обработки, используя Объект Framebuffer но я не совсем понимаю, как, не повторяя каждый шаг моего шага моего процесса, я могу применять многочисленные эффекты постобработки без необходимости каждый раз повторять каждый шаг.
Шаги, которые я сейчас прохожу, следующие:
Из того, что я понимаю, мне нужно повторить шаг 5,6,7 с другим шейдером постобработки и используя текстуру, которую я наконец-то получил на шаге 8, но я не думаю, что это правильный путь, поскольку он заставит меня читать данные из FBO в текстуру, а затем ретранслировать их, что действительно дорого.
Я что-то пропустил ?
Если ваши 2 эффекта постобработки могут быть выполнены в одном шейдере, то вам следует это сделать, так гораздо эффективнее, поскольку затраты на пропускную способность памяти при чтении и записи целых кадровых буферов часто значительно превышают затраты на некоторые дополнительные вычисления шейдеров.
Однако многие эффекты постобработки должны воздействовать на конечный результат предыдущего прохода постобработки. Типичным решением является установка двух FBO и «пинг-понга» между ними. Итак, если бы у вас было 3 эффекта постобработки, которые нужно объединить в цепочку, у вас было бы 3 прохода:
Я думаю, что вам не хватает того, что вы можете напрямую использовать текстуру из кадрового буфера, не создавая новую текстуру, заполненную данными из glReadPixels
, это руководство может помочь.
Других решений пока нет …