解决iPhone上的OpenGL ES 1.1纹理问题

时间:2010-12-31 04:35:17

标签: iphone opengl-es textures

我正在尝试将纹理绘制到屏幕外的帧缓冲区中,并且其渲染缓冲区始终完全空白(黑色)。奇怪的是,我知道上下文已设置,我正在使用glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)和glGetError()检查错误,但两个函数都没有说错。是否还有其他任何可以调用的错误检查功能可能会对正在发生的事情有所了解?

1 个答案:

答案 0 :(得分:1)

如果没有更多信息,很难给出准确答案。也许您可以发布一些关于渲染缓冲区的设置和使用的代码吗?

与此同时,以下是有关如何正确设置屏幕外帧缓冲的一些信息:

// Remember the FBO being used for the display framebuffer
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint *)&SystemFBO);

// Create the texture and the FBO for offscreen frame buffer
glGenTextures(1, &ResultTexture);
glBindTexture(GL_TEXTURE_2D, ResultTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGenFramebuffersOES(1, &ResultFBO);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, ResultTexture, 0);

glBindFramebufferOES(GL_FRAMEBUFFER_OES, ResultFBO);

// do your rendering to offscreen framebuffer
...

// restore original frame buffer object
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO);

// use ResultTexture as usual
glBindTexture(GL_TEXTURE_2D, ResultTexture);

希望这会有所帮助......