编辑:见@Rabbid76 76答案,问题与GL_TEXTURE_2D_ARRAY并没有真正的关联,只有帧缓冲区颜色附件激活!
我有困难更新一个着色器,用来输出到一个单一的纹理到多纹理。下面是简化的代码,我会把我找到的所有相关内容都放进去,如果它们很重要的话,可以自由地询问代码的其他部分。
glGenTexture(1, tex);
glBindTexture(GL_TEXTURE_2D_ARRAY, tex);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA32F, x, y, 2);
glGenFramebuffers(1, &FBO);
glBindFramebuffer(GL_FRAMEBUFFER, FBO);
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0, 0);
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, tex, 0, 1);写入文字的框架着色器:
#version 330
layout(location = 0) out vec4 col1;
layout(location = 1) out vec4 col2;
int main()
{
col1 = vec4(1.0);
col2 = vec4(2.0);
}使用结果的其他着色器:
#version 330 core
uniform sampler2DArray tex;
in vec2 Coord;
int main()
{
vec4 val = texture(tex, vec3(Coord, 0));
val += texture(tex, vec3(Coord, 1));
}问题是col1是用layout 0很好地编写的(不管纹理层如何,glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texDefo, 0, 1);也能工作),但是我不能用layout 1 (GL_COLOR_ATTACHMENT1)编写。我是不是漏掉了什么?
广泛的测试:
从我所能缩小到的范围来看,layout(location = 1)确实不像我所期望的那样工作。如果我得到的代码
当layout(location = 0) out vec4 col1;
layout(location = 0) out vec4 col2;都不考虑我绑定了GL_COLOR_ATTACHMENTi的纹理层时,这两个层似乎都在GL_TEXTURE_2D_ARRAY.中工作
发布于 2021-05-24 07:23:52
您需要指定要使用glDrawBuffers访问的缓冲区。
GLenum drawBuffers[]{ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, drawBuffers);https://stackoverflow.com/questions/67668046
复制相似问题