这可能是一个愚蠢的问题,但由于我是OpenGL的新手,所以我不了解如何将来自单个FBO的颜色缓冲区和深度缓冲区发送到片段着色器。
我的FBO由1个纹理缓冲区和1个深度缓冲区生成
glGenTextures(1, &texture_color);
glBindTexture(GL_TEXTURE_2D, texture_color);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glGenTextures(1, &texture_depth);
glBindTexture(GL_TEXTURE_2D, texture_depth);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
我想在我的片段缓冲区中有
uniform sampler2D colorTexture;
uniform sampler2D depthTexture;
充满颜色和深度纹理...
我只能使用GlBindtexture发送一个(另一个很好),但是我无法同时发送两个。有人知道该怎么做吗?
谢谢!
好的,由于解决方案很简单,我可能并不大,而且我做错了。
我试图使用glActiveTexture(GL_DEPTH),然后绑定到我的Texture:(glBindTexture(GL_TEXTURE_2D,visibleFBO.getDepthTexture()))认为使用GL_DEPTH是正常的。
但是我错了,它可以使用:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, visibilityFBO.getColorTexture());
glUniform1i(glGetUniformLocation(visibilityPassShader.Program, "positionTexture"), 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, visibilityFBO.getDepthTexture());
glUniform1i(glGetUniformLocation(visibilityPassShader.Program, "depthTexture"), 1);
与以前相同,但是由于我曾经glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
生成“深度”纹理,因此“深度”被视为“纹理”。因此,我只需要调用下一个纹理并将其绑定即可使用它。
在片段中,它仍然是:
uniform sampler2D positionTexture;
uniform sampler2D depthTexture;
秩序井然。
使用OpenGL> = 4,可以在片段着色器中使用
layout (binding = 0) uniform sampler2D positionTexture;
layout (binding = 1) uniform sampler2D depthTexture;
并原谅关于glUniform1i的部分。
希望它可以帮助某人!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句