OpenGL3.1的glFramebufferTexture的替代方案
我使用的硬件只支持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
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
之外的任何东西都是错误的