2011-11-16 28 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。您使用第一個着色器渲染到一個渲染目標,並使用另一個着色器渲染到第二個渲染目標。