将帧缓冲区附加到纹理错误

Posted

技术标签:

【中文标题】将帧缓冲区附加到纹理错误【英文标题】:Attaching Framebuffer to Texture error 【发布时间】: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。 ***.com/questions/23593162/… 【参考方案1】:

是的,所以我忘记了glBindTexture。我恨我自己。谢谢Hectigo!

【讨论】:

以上是关于将帧缓冲区附加到纹理错误的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要将渲染缓冲区附加到已经附加了纹理的帧缓冲区?

将整数纹理附加到帧缓冲区

OpenGL 渲染到纹理 - 黑屏

如何在 libgdx 中重用帧缓冲纹理

Opengl 和 Webgl:从附加到当前帧缓冲区的纹理中采样

关于 OpenGL 纹理、帧缓冲区和 UV 坐标的问题 [关闭]