2

我正在尝试提取着色器片段背后的颜色。我四处搜索并发现了各种这样做的人的例子:

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

这是有道理的。但是,没有人展示您传入后台缓冲区制服的示例。

我试着这样做:

int backbuffer = glGetUniformLocation(self.shaderProgram->program_, "u_backbuffer");
GLint textureID;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &textureID);//tried both of these one at a time
glGetIntegerv(GL_RENDERBUFFER_BINDING, &textureID);//tried both of these one at a time
glUniform1i(backbuffer, textureID);

但我只是变黑。这是在 cocos2d iOS 仅供参考

有什么建议么?

4

2 回答 2

2

您可以这样做,但仅限于 iOS 6.0。Apple 添加了一个名为GL_EXT_shader_framebuffer_fetch的扩展,它可以让您在正在渲染的片段中读取当前帧缓冲区的内容。此扩展引入了一个名为 gl_lastFragData 的新变量,您可以在片段着色器中读取该变量。

RayDeeA 提出的这个问题显示了一个实际的例子,尽管您需要更改扩展名的名称,因为他们在回答中指出了组合点。

这应该在所有运行 iOS 6.0 的设备上都支持,并且是实现自定义混合模式的好方法。我听说这是一项成本非常低的操作,但还没有对自己进行过多的分析。

于 2013-04-18T01:09:25.553 回答
0

这是不允许的。作为 FBO 的一部分,您不能同时从当前正在写入的图像中采样。

于 2013-04-18T00:08:49.793 回答