【发布时间】:2012-06-09 02:26:24
【问题描述】:
我正在将游戏从 iPhone 移植到 Android。我正在使用 NDK 和 OpenGLES 2.0。
我在使用以下代码创建带有纹理的帧缓冲区时遇到问题,稍后我将使用该纹理对其进行渲染:
glGenFramebuffersOES(1, &glTextureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER, glTextureFrameBuffer);
// attach renderbuffer
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glName, 0);
GLint status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status == GL_FRAMEBUFFER_COMPLETE) {
cout << "Framebuffer completed" << endl;
} else {
cout << "Framebuffer error: " << status << endl;
}
// unbind frame buffer
glBindFramebufferOES(GL_FRAMEBUFFER, 0);
cout << "CREATED FRAMEBUFFER ID: " << glTextureFrameBuffer << endl;
这将打印以下内容:
Framebuffer error: 0
CREATED FRAMEBUFFER ID: 4294967295
渲染到该纹理什么都不做,所以有些事情失败了,glGenFramebuffersOES (4294967295) 返回的 id 让我认为帧缓冲区永远不会生成。
代码在 iOS 上运行良好。
知道可能是什么问题吗?
编辑:
我添加了错误检查:在 glFramebufferTexture2D 之后出现 GL_INVALID_OPERATION。但在 glGenFramebuffersOES 之后我也出现 GL_INVALID_VALUE 错误。奇怪的是,在 iphone 上我也遇到了这个错误,但一切正常。
我已阅读 OpenGLES 文档,并且如果第一个参数为负数,glGenFramebuffersOES 设置 GL_INVALID_VALUE 错误,但事实并非如此。
编辑 2:
我的错,glGenFramebuffersOES 没有设置任何错误,GL_INVALID_VALUE 之前被设置在某个地方。
但是,glFramebufferTexture2D 仍在设置 GL_INVALID_OPERATION,而且 glGenFramebuffersOES 返回的 id 是 4294967295 在我看来也很奇怪。
有什么想法吗?
【问题讨论】:
-
添加错误检查。即使代码适用于 iOS。
-
添加错误检查:在 glFramebufferTexture2D 之后我得到 GL_INVALID_OPERATION
标签: android opengl-es android-ndk