如何在GLSL中输出和访问不同的FBO?

时间:2011-11-16 21:04:24

标签: opengl-es glsl

所以我正在研究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 个答案:

答案 0 :(得分:1)

  

但我想找到一种方法将image1传递给我的openGL ES2.0代码。

你的问题很混乱。你不需要在任何地方“传递”image1; 你的着色器中的;这就是你计算它的地方。

如果你想从一个着色器执行中存储它然后在另一个着色器中读回它,那么你需要有多个渲染目标,或者需要将着色器分割并渲染到不同的渲染目标着色器。由于您处于OpenGL ES世界,因此您通常没有太多的MRT自由。

因此,您需要获取数据生成着色器并将其拆分,以便其中一个生成image1,另一个生成image2。您可以使用第一个着色器渲染到一个渲染目标,并使用另一个着色器渲染到第二个着色器。