将 Depthbuffer 和 TextureBuffer 发送到同一个 Fragment OpenGL3
Send Depthbuffer and TextureBuffer to same Fragment OpenGL3
这可能是一个愚蠢且微不足道的问题,但由于我是 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) 然后绑定到我的纹理:(glBindTexture(GL_TEXTURE_2D, visibilityFBO.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);
它和以前一样,但是 DEPTH 被认为是纹理,因为我使用 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的部分请见谅
希望对大家有所帮助!
这可能是一个愚蠢且微不足道的问题,但由于我是 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) 然后绑定到我的纹理:(glBindTexture(GL_TEXTURE_2D, visibilityFBO.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);
它和以前一样,但是 DEPTH 被认为是纹理,因为我使用 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的部分请见谅
希望对大家有所帮助!