我有一个OpenGL应用程序,除了默认的帧缓冲区外还带有一个FBO。一切正常。
然后,我尝试使用与第一个FBO相同的代码添加第二个FBO,突然它不再起作用。仅对于第二个FBO,我会获得以下状态:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
我的第一个FBO仍按预期工作,没有任何问题。我进行了两次和三次检查,确认两个FBO均使用相同的代码生成。我什至再次浏览了www.khronos.org/opengl/wiki/上的OpenGL Wiki页面,以确保我正确使用了所有这些OpenGL方法。
每次调用OpenGL函数后,我都会检查OpenGL错误。
public void createFBO(int width, int height) {
glNameFbo = glGenFramebuffers();
checkForGLErrors();
glBindFramebuffer(GL_FRAMEBUFFER, glNameFbo);
checkForGLErrors();
glEnable(GL_TEXTURE_2D);
checkForGLErrors();
glNameTex = GL11.glGenTextures();
checkForGLErrors();
glBindTexture(GL_TEXTURE_2D, glNameTex);
checkForGLErrors();
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL11.GL_RGBA, GL_UNSIGNED_BYTE, 0);
checkForGLErrors();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
checkForGLErrors();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
checkForGLErrors();
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glNameTex, 0);
checkForGLErrors();
glDrawBuffers(GL_COLOR_ATTACHMENT0);
checkForGLErrors();
int fboStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
checkForGLErrors();
if(fboStatus != GL_FRAMEBUFFER_COMPLETE) {
System.err.println("Error when creating FBO: "+getFrameBufferStatus(fboStatus));
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
checkForGLErrors();
}
感谢任何能够带领我朝正确方向前进的人!
答案 0 :(得分:1)
好吧,我很傻。正如评论中指出的那样,事实证明问题出在我传递给FBO创建方法的“宽度”和“高度”。我的第一个FBO是使用窗口大小创建的,但是我的第二个FBO的两个尺寸都传递了0。
问题代码似乎很好。