2016-07-07 3 views
0

Мне нужно передать ~ 1 Мб данных изображения 1D (rgba8), чтобы вычислить шейдер. Я пробовал это с 2D-текстурой, и все в порядке.Прочтите rgba8 от SSBO

Теперь мне интересно, как добиться этого с помощью SSBO. Я могу передать любые данные как void * с glBufferData. Но как читать пиксели из этого SSBO в шейдере как vec4?

ответ

2

Вы не можете. Вам придется распаковывать данные вручную.

Вы должны прочитать пиксель данных как uint (который представляет собой 32-разрядное целое без знака). Затем вам нужно использовать манипуляции с битами, чтобы распаковать 4 8-битные компоненты из этих данных. Затем нормализуйте его обратно на 4 поплавка.

К счастью, GLSL имеет функцию unpackUnorm4x8, которая выполняет именно это. Он принимает uint и выплевывает vec4.

Смежные вопросы