2013-04-17 52 views
1

我想提取我的着色器片段後面的顏色。我搜查了四周,發現人們這樣做的各種例子:獲取GLSL中後臺緩衝區的顏色

vec2 position = (gl_FragCoord.xy/u_resolution.xy); 
vec4 color = texture2D(u_backbuffer, v_texCoord); 

這是有道理的。然而,沒有人展示過你通過後臺緩衝區統一的例子。

我試圖做這樣的:

但我剛剛得到的黑色。這是在cocos2d iOS的FYI

任何建議?

+0

你打這些電話的地方?在cocos2d中,他們應該在訪問或繪製方法中。 – LearnCocos2D

回答

2

您可以這樣做,但只能在iOS 6.0上使用。 Apple添加了一個名爲GL_EXT_shader_framebuffer_fetch的擴展名,它允許您讀取正在渲染的片段中當前幀緩衝區的內容。該擴展引入了一個名爲gl_lastFragData的新變量,您可以在片段着色器中讀取該變量。

This question by RayDeeA顯示了這個行爲的例子,雖然你需要改變擴展名作爲combinatorial指出他們的答案。

這應該在運行iOS 6.0的所有設備上都支持,並且是實現自定義混合模式的好方法。我聽說這是一個非常低成本的操作,但自己還沒有做過多的分析。

+0

謝謝這個作品! – user2292539

+1

請注意,通過NV_shader_framebuffer_fetch擴展,Tegra GPU也支持這種行爲很長一段時間。 [文檔](https://developer.nvidia.com/sites/default/files/akamai/mobile/files/tegra_gles2_development.pdf)第24頁。 – alexFlorea