ios - 获取GLSL中后台缓冲区的颜色

标签 ios opengl-es cocos2d-iphone glsl

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

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 仅供引用

有什么建议吗?

最佳答案

您可以执行此操作,但仅限 iOS 6.0。 Apple 添加了一个名为 GL_EXT_shader_framebuffer_fetch 的扩展程序它允许您读取正在渲染的片段中当前帧缓冲区的内容。此扩展引入了一个名为 gl_lastFragData 的新变量,您可以在片段着色器中读取该变量。

This question by RayDeeA显示了此操作的示例,尽管您需要更改扩展名,正如他们的答案中指出的组合指出的那样。

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

关于ios - 获取GLSL中后台缓冲区的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070061/

相关文章:

ios - 以编程方式添加带有按钮的 View

ios - OpenGLES 帧缓冲区问题

java - LibGDX 3D 提高性能

iphone - CCRandom_0_1()生成相同的数字

cocos2d-iphone - 如何在 cocos2d 中获取 CCLabelTTF 的真实大小?

iphone - 用于iphone开发的Cocos 3D POD文件格式

javascript - 不了解 Navigator IOS React Native

ipad - iOS 网络应用程序(尤其是 iPad)的多个 "apple-touch-startup-image"分辨率?

objective-c - 在 UIImageView 之上绘制使图像透明

ios - 如何在 CarPlay 模拟器上测试 iOS 应用程序