OpenGL3.1的glFramebufferTexture的替代方案

OpenGL3.1的glFramebufferTexture的替代方案,opengl,framebuffer,Opengl,Framebuffer,我使用的硬件只支持OpenGL3.1,因此“glFramebufferTexture”不可用 这是我目前的代码: GLuint frameBuffer; glGenFramebuffers(1,&frameBuffer); glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer); GLuint depthTexture; glGenTextures(1,&depthTexture); glBindTexture(GL_TEXTURE_2D,d

我使用的硬件只支持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\U FRAMEBUFFER\U Completed\U READ\U BUFFER”错误


我能做什么?

glFrameBufferTexture(…)
没有什么特别之处,它基本上只允许您使用单个入口点执行与1D、2D和3D相同的操作。正如你的问题所暗示的,这不是一个硬件限制,只是对任何未实现OpenGL 3.2的驱动程序的限制

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

GL\u FRAMEBUFFER\u completed\u READ\u BUFFER
如果
GL\u READ\u BUFFER
不是
GL\u NONE
并且
GL\u FRAMEBUFFER\u ATTACHMENT\u OBJECT\u TYPE
的值是
GL\u NONE
指定的颜色附着点
GL\u读取缓冲区

设置
glReadBuffer(…)
通常没有那么重要。这用于诸如
glReadPixels(…)
之类的操作,我没有看到任何迹象表明您的代码在任何地方都需要它

我建议您在代码中查找任何缺少的附件点,或对
glReadBufer(…)
的错误调用。对我来说,这听起来很糟糕,就像你试图进入一个没有颜色缓冲区附件的FBO,在这种情况下,当你的FBO被绑定时,设置了除
glu NONE
之外的任何东西都是错误的