C++ 渲染到FBO不起作用,gDEBugger则表示不起作用

C++ 渲染到FBO不起作用,gDEBugger则表示不起作用,c++,opengl,C++,Opengl,我正在尝试使用FBO渲染到纹理。当尝试这样做时,gDEBugger显示正确的纹理,但在四边形上绘制时,它只是“白色”/“glColor4f” 以下是创建纹理、fbo和renderbuffer的代码: glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParam

我正在尝试使用FBO渲染到纹理。当尝试这样做时,gDEBugger显示正确的纹理,但在四边形上绘制时,它只是“白色”/“glColor4f”

以下是创建纹理、fbo和renderbuffer的代码:

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
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_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

glGenRenderbuffers(1, &rb);
glBindRenderbuffer(GL_RENDERBUFFER, rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rb); 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
glBindRenderbuffer(GL_RENDERBUFFER, 0);
渲染到纹理:

glBindFramebuffer(GL_FRAMEBUFFER, fbo);     
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor4f(1.0f, 0.5f, 0.2f, 1.0f);

glBegin(GL_TRIANGLES);
    glVertex3f(10, 10, 0);
    glVertex3f(210, 30, 1);
    glVertex3f(50, 150, 1);
glEnd();

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 1.0f);
    glVertex2f(0, 0);
    glTexCoord2f(1.0f, 1.0f);
    glVertex2f(width, 0);
    glTexCoord2f(1.0f, 0.0f);
    glVertex2f(width, height);
    glTexCoord2f(0.0f, 0.0f);
    glVertex2f(0, height);
glEnd();

glDisable(GL_TEXTURE_2D);
下面是我如何使用纹理渲染四边形:

glBindFramebuffer(GL_FRAMEBUFFER, fbo);     
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor4f(1.0f, 0.5f, 0.2f, 1.0f);

glBegin(GL_TRIANGLES);
    glVertex3f(10, 10, 0);
    glVertex3f(210, 30, 1);
    glVertex3f(50, 150, 1);
glEnd();

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 1.0f);
    glVertex2f(0, 0);
    glTexCoord2f(1.0f, 1.0f);
    glVertex2f(width, 0);
    glTexCoord2f(1.0f, 0.0f);
    glVertex2f(width, height);
    glTexCoord2f(0.0f, 0.0f);
    glVertex2f(0, height);
glEnd();

glDisable(GL_TEXTURE_2D);

当使用加载的图像作为纹理绘制时,它可以工作,但不能使用绑定FBO的纹理。有人知道我的代码有什么问题吗?

你的纹理看起来不完整

你没有mipmap,你也没有选择一个过滤模式来解决这个问题

尝试:


也就是说,您应该仍然可以看到多边形,但没有适当的纹理,没有这个。

绑定帧缓冲区后是否忘记调用glViewport?我正在使用相同的视口进行帧缓冲区和正常渲染-只是尝试使用glViewport,但没有用。矩阵似乎是正确的,因为我可以毫无问题地绑定从图像加载的纹理。gDEBugger甚至像我所希望的那样显示fbo绑定纹理-唯一的问题是,我无法正确绘制,它总是白色的。非常感谢,这正是它的问题所在。:)我不知道我怎么会错过,但它现在起作用了。glError或任何其他函数会报告这种错误吗?@psde:glGetError不会捕获它,这是GL罕见的无声错误之一。这很痛苦。。。也许GL 3.2/GL4.1中使用的新GL错误机制会有所帮助,但我相信这将取决于实现。。。