Как вывести и получить доступ к различным FBO в GLSL? - PullRequest
0 голосов
/ 17 ноября 2011

Итак, я работаю над openGL ES2.0 и GLSL, и у меня есть вопрос о фрагментном шейдере.Через мой вершинный и фрагментный шейдер я вычисляю и получаю смешанное изображение.Я, однако, хочу выводить по-другому.Так, например, на моем фрагментном шейдере у меня есть

vec4 image1 = texture2DProj(tex1,projCoord);
vec4 image2 = vec4(1.0,0.0,0.0,1.0); //red

Я хочу показать свой вывод (gl_FragColor) как image2, красного цвета.Но я хочу найти способ передать image1 в мой код openGL ES2.0.Есть ли в любом случае, чтобы сделать это?

Я знаю, что в обычном openGL, (не ES), вы можете сделать что-то вроде gl_FragData [n] и сделать прикрепление кадрового буфера и т. Д. В openGL ES2.0 я могутолько gl_FragData [0], [1] будет вне индекса.Обычно, в моем случае, gl_FragColor будет хранить все, что мне нужно для буферизации кадров.Так что в этом случае, если я сделаю

gl_FragColor = image2;

, изображение красного цвета будет сохранено в буфере кадров.Я просто хочу показать image2, но я хочу получить доступ только к кадровому буферу image1.Есть ли в любом случае это сделать?

1 Ответ

1 голос
/ 17 ноября 2011

Но я хочу найти способ также передать image1 в мой код openGL ES2.0.

Ваш вопрос очень запутанный. Вам не нужно никуда проходить image1; это в вашем шейдере; вот где вы его вычислили.

Если вы имеете в виду, что вы хотите сохранить его из одного выполнения шейдера, а затем прочитать его в другом, то вам нужно либо иметь несколько целей рендеринга, либо вам нужно разделить шейдер и выполнить рендеринг для отдельных целей рендеринга из разных шейдеры. И поскольку вы находитесь в мире OpenGL ES, у вас, как правило, нет большой свободы для MRT.

Итак, вам нужно взять шейдер для генерации данных и разделить его так, чтобы один из них генерировал image1, а другой - image2. Вы используете первый шейдер для рендеринга одной цели рендеринга, а другой шейдер - для рендеринга второй.

...