OpenGL3.1的glFramebufferTexture的替代品

时间:2014-01-07 14:04:52

标签: opengl framebuffer

我正在使用仅支持OpenGL3.1的硬件,因此'glFramebufferTexture'不可用。

这是我目前的代码:

GLuint frameBuffer;
glGenFramebuffers(1,&frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);

GLuint depthTexture;
glGenTextures(1,&depthTexture);
glBindTexture(GL_TEXTURE_2D,depthTexture);
glTexImage2D(
    GL_TEXTURE_2D,
    0,
    GL_DEPTH_COMPONENT,
    1024,1024,
    0,
    GL_DEPTH_COMPONENT,
    GL_FLOAT,
    0
);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_BORDER);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_COMPARE_MODE,GL_COMPARE_R_TO_TEXTURE);

// glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,m_depthTexture,0); // Access violation

根据我的理解,glFramebufferTexture2D应该以类似的方式工作

glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,m_depthTexture,0);

如果我这样做,glCheckFramebufferStatus会给我一个'GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER'错误。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

glFrameBufferTexture (...)没什么特别的,它基本上只允许你使用一个入口点做同样的事情,如1D,2D和3D。您的问题表明, 是硬件限制,仅限于未实施OpenGL 3.2的任何驱动程序。

至于你的帧缓冲状态,这实际上与这个特定的API调用完全无关。此错误告诉您FBO中存在非零glReadBuffer (...)且没有相应的颜色附件。您可以自己阅读此错误的正式定义:

  如果 GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 不是 GL_READ_BUFFER 且值,则会返回 {strong> GL_NONE 对于 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 指定的颜色附加点,> GL_NONE GL_READ_BUFFER

设置glReadBuffer (...)通常不那么重要。这用于glReadPixels (...)之类的操作,我没有看到你的代码实际上在任何地方都需要它的迹象。

我建议您查看代码中是否有任何缺失的附加点,或错误调用glReadBufer (...)。对我来说这听起来非常糟糕,就像你试图绘制一个没有颜色缓冲附件的FBO一样,在这种情况下, 任何 设置为GL_NONE以外而你的FBO受到约束是一个错误。