【发布时间】:2011-02-07 06:18:44
【问题描述】:
我正在尝试将纹理绘制到屏幕外帧缓冲区中,并且它的渲染缓冲区总是以完全空白(黑色)结束。奇怪的是,我知道上下文已经设置好了,我正在使用 glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) 和 glGetError() 检查错误,但是这两个函数都没有说任何错误。是否有任何其他我可以调用的错误检查函数可以揭示正在发生的事情?
【问题讨论】:
我正在尝试将纹理绘制到屏幕外帧缓冲区中,并且它的渲染缓冲区总是以完全空白(黑色)结束。奇怪的是,我知道上下文已经设置好了,我正在使用 glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) 和 glGetError() 检查错误,但是这两个函数都没有说任何错误。是否有任何其他我可以调用的错误检查函数可以揭示正在发生的事情?
【问题讨论】:
如果没有更多信息,很难给你一个准确的答案。也许您可以发布一些有关您的渲染缓冲区设置和使用的代码?
同时,这里有一些关于如何正确设置离屏帧缓冲区的信息:
// 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);
希望这会有所帮助...
【讨论】: