2011-11-16 37 views
0

所以我正在研究openGL ES2.0和GLSL,我对片段着色器有个疑问。 通过我的顶点和片段着色器,我计算并获得混合图像。然而我想输出不同。 因此,举例来说,在我的片段着色器,我有如何在GLSL中输出和访问不同的FBO?

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

我想告诉我的输出(gl_FragColor)的图像2,红色。但我想找到一种方法将image1传递给我的openGL ES2.0代码。无论如何要做到这一点?我知道,在常规的OpenGL中,(不是ES),你可以做一些像gl_FragData [n]和做帧缓冲区附件等。在openGL ES2.0中,我只能做gl_FragData [0],[1 ]将超出索引。通常,在我的情况下,gl_FragColor将存储任何我有帧缓冲区。所以在这种情况下,如果我这样做

gl_FragColor = image2; 

红色图像将存储在帧缓冲区。我只想显示image2,但我只想访问image1的帧缓冲区。无论如何去做?

回答

1

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

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

如果你的意思是你想从一个着色器执行存储,然后在另一个读回,那么你需要或者有多个渲染目标,或者您需要从分割你的着色器和渲染你的独立渲染目标不同的着色器。而且由于你在OpenGL ES世界,你通常没有太多的MRT自由度。

所以你需要把你的数据生成着色器和分裂它,其中一个生成image1和另一个生成image2。您使用第一个着色器渲染到一个渲染目标,并使用另一个着色器渲染到第二个渲染目标。

相关问题