创建openGl renderbuffer,没有框架绑定



我注意到我使用框架缓冲区进行屏幕外渲染时注意到了一些奇怪的事情。我正在将一个立方体呈现到纹理,然后将纹理放在飞机上。一切都起作用了,我决定跳过深度缓冲区,因此我评论了第1块&第2块(请参见下面的代码),但是,如果我将块1保持完好无损,并且仅注释块2,则飞机变黑。

我假设通过评论块2,渲染布夫将是一个渲染布,与Framebuffer没有关联。

在每个示例中,我都能找到在创建渲染程序之前总是有一个框架绑定器,但是我在文档中找不到任何说明的框架。它应该与仅评论block2并离开块1?

一起使用
// create render buffer to store depth, at this point the default framebuffer is bound
{ //BLOCK 1
    glGenRenderbuffers(1, &handle);
    glBindRenderbuffer(...);
    glRenderbufferStorage(...);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);
}

如果我让上面的代码在块2被评论时运行,则在屏幕上纹理变黑。

// create texture as a color attachment
glGenTextures(1, &handle);
glBindTexture(GL_TEXTURE_2D, handle);
glTexImage2D(...);
// filter, wrap omitted
glBindTexture(GL_TEXTURE_2D, 0);

在采样时测试了上面的纹理绑定,并且可以很好地工作。

// creating framebuffer
glGenFramebuffers(1, &handle);
glBindFramebuffer(GL_FRAMEBUFFER, handle);
// attach my render buffer as a depth attachment
{ // BLOCK 2
    glFramebufferRenderbuffer(...)
}

如果我评论第2块&块1它都可以使用(例如带有颜色附件的框架挡板)

// binding texture as an attachment to frame buffer
glFramebufferTexture2D(...);
glDrawBuffers(1, drawBuffers);
glBindFramebuffer(GL_FRAMEBUFFER, 0);

上面的所有代码都是按照此顺序执行的,并且没有其他OpenGL调用。

找到了错误。由于课堂的抽象,当纹理类别不范围时,删除了纹理。此纹理句柄设置为0,为默认值,使用此句柄ID的另一种纹理被删除。

最新更新