【发布时间】:2014-08-19 20:30:01
【问题描述】:
我正在尝试使用教程here 实现阴影映射,但是当我尝试使用此代码将帧缓冲区附加到纹理时它失败了。我的 OpenGL 上下文是 3.1,我相信我有一个 Intel 3000 系列显卡。代码在 2 点失败。第一次失败是在glFramebufferTexture2D,它给出了错误代码 1282(也不确定对应的枚举是什么)。我相信这个错误会导致代码后面的断言assi 失败。我已经尝试过类似问题的代码,但在这种情况下它们似乎不起作用。
glGenFramebuffers(1, &MObject::fbo);
glGenTextures(1, &MObject::shadowMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, windowWidth, windowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glBindFramebuffer(GL_FRAMEBUFFER, MObject::fbo);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, MObject::shadowMap, 0);
GLenum err = glGetError(); // Error code: 1282
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
assi(status == GL_FRAMEBUFFER_COMPLETE, "FBO error!"); // Expression is false, abort called.
【问题讨论】:
-
glFramebufferTexture2D 需要 3.2+ 的 OpenGL 上下文 opengl.org/wiki/GLAPI/glFramebufferTexture
-
其实
glFramebufferTexture2D从 OpenGL 3 就已经存在了。它是在 3.2 中添加的glFramebufferTexture。 stackoverflow.com/questions/23593162/…
标签: c++ debugging opengl graphics fbo