Как в OpenGL захватить пиксели до отрисовки текущего шейдера? Подскажите Аналог GrabPass-а из шейдера из Unity(язык HLSL) для OpenGL (язык GLSL)

Подскажите аналогичную технологию GrabPass-а из шейдера из Unity(язык HLSL) для OpenGL (язык GLSL).

Вот пример как это делается в Unity:

Этот проход захватит изображение на экране в текстуру _GrabTexture. Текстура будет содержать только то, что было отрисовано до того, как наш объект, использующий этот шейдер, пошёл на отрисовку.

В OpenGL нашел только способ отрисовать все в другом фреймбуфере, потом взять оттуда пиксели и отрисовать нужную обработку в новом фреймбуфере, который уже выведется на экран. Это накладно при множестве постобработок. И по неизвестным причинам получилось только когда отрисовал заново в итоговый фреймбуфер все с первого фреймбуфера и далее пошел на отрисовку объект с постобработкой занимающий только часть экрана в отличии от примеров с инета с постобработкой на весь экран

Вот пример с двумя фреймбуферами и третим результирующим: https://stackoverflow.com/questions/44779142/opengl-es-2-0-gaussian-blur-on-triangle

Неужели в OpenGL нет технологии GrabPass? Ведь HLSL переводится в итоги в бинарный GLSL для Android например.

Задача: Постобработка(написание шейдера 1.с эффектом стекла; 2.Gaussian blur)

В CubeMapping пример с текстурой на заднем плане, А нужно захватить не только текстуру а обьекты OpenGL - и преломить свет на них тоже.


Ответы (0 шт):