我正在将游戏从 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 在我看来也很奇怪。
任何的想法?