我想提取我的着色器片段後面的顏色。我搜查了四周,發現人們這樣做的各種例子:獲取GLSL中後臺緩衝區的顏色
vec2 position = (gl_FragCoord.xy/u_resolution.xy);
vec4 color = texture2D(u_backbuffer, v_texCoord);
這是有道理的。然而,沒有人展示過你通過後臺緩衝區統一的例子。
我試圖做這樣的:
但我剛剛得到的黑色。這是在cocos2d iOS的FYI
任何建議?
我想提取我的着色器片段後面的顏色。我搜查了四周,發現人們這樣做的各種例子:獲取GLSL中後臺緩衝區的顏色
vec2 position = (gl_FragCoord.xy/u_resolution.xy);
vec4 color = texture2D(u_backbuffer, v_texCoord);
這是有道理的。然而,沒有人展示過你通過後臺緩衝區統一的例子。
我試圖做這樣的:
但我剛剛得到的黑色。這是在cocos2d iOS的FYI
任何建議?
您可以這樣做,但只能在iOS 6.0上使用。 Apple添加了一個名爲GL_EXT_shader_framebuffer_fetch的擴展名,它允許您讀取正在渲染的片段中當前幀緩衝區的內容。該擴展引入了一個名爲gl_lastFragData的新變量,您可以在片段着色器中讀取該變量。
This question by RayDeeA顯示了這個行爲的例子,雖然你需要改變擴展名作爲combinatorial指出他們的答案。
這應該在運行iOS 6.0的所有設備上都支持,並且是實現自定義混合模式的好方法。我聽說這是一個非常低成本的操作,但自己還沒有做過多的分析。
謝謝這個作品! – user2292539
請注意,通過NV_shader_framebuffer_fetch擴展,Tegra GPU也支持這種行爲很長一段時間。 [文檔](https://developer.nvidia.com/sites/default/files/akamai/mobile/files/tegra_gles2_development.pdf)第24頁。 – alexFlorea
在這種情況下,因爲它們在iOS上,所以恰好有一個新的擴展允許這樣做。我在我的回答中描述了它,它對於運行iOS 6.0的設備非常方便。 –
你打這些電話的地方?在cocos2d中,他們應該在訪問或繪製方法中。 – LearnCocos2D