Используя объект кадрового буфера, вы можете визуализировать текстуру, прикрепив ее к цветовой точке прикрепления.Не привязывайте текстурный объект к текстурному блоку (используемому шейдером), пока первый прикреплен к кадровому буферу.
Я сомневаюсь, что gl_FragData
может читать текст сообщениятекстура, прикрепленная к фреймбуферу: gl_FragData
должна быть неопределенной, пока она не будет записана.На самом деле вы можете читать gl_FragData
только после того, как написано, в противном случае вы получите неопределенный bahvior.
Значения образцов текстуры обычно нормализуются в диапазоне [0.0,1.0].Поскольку gl_FragData
объявлено как vec4, запись значения в диапазоне [0.0,1.0] определяет значение текселя [0, MAX_VALUE], где MAX_VALUE - максимальное значение базового типа, определенного внутренним форматом текстуры.Вы можете получить эти целочисленные значения, вызвав glGetTexImage
.Не уверен, что произойдет, если вы установите значение вне диапазона [0.0,1.0].
Внутренние форматы текстуры также могут быть определены как с плавающей точкой .
Фрагменты назначенияопределяются текстурой, так как текстура является буфером назначения.Каждый фрагментный шейдер определяет цвет фрагмента в позиции gl_FragCoord.xy
(в координатах текстура / буфер / экран): эта переменная предлагается исполнителем шейдера и доступна только для чтения.По сути, один фрагментный шейдер для каждого текстурного текселя.
Зная размеры «экрана» (то есть размеры текстуры), вы можете написать координаты текстуры (x/y)
в диапазоне [0.0,1.0], используя экземпляр шейдера, имеющийgl_FragCoord
равно (gl_FragCoord.x/texSizeX,gl_FragCoord.y/texSizeY)
.