首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将GL_TEXTURE_2D_ARRAY绑定到GL_COLOR_ATTACHMENT1上的框架缓冲区?

如何将GL_TEXTURE_2D_ARRAY绑定到GL_COLOR_ATTACHMENT1上的框架缓冲区?
EN

Stack Overflow用户
提问于 2021-05-24 07:19:20
回答 1查看 118关注 0票数 1

编辑:见@Rabbid76 76答案,问题与GL_TEXTURE_2D_ARRAY并没有真正的关联,只有帧缓冲区颜色附件激活!

我有困难更新一个着色器,用来输出到一个单一的纹理到多纹理。下面是简化的代码,我会把我找到的所有相关内容都放进去,如果它们很重要的话,可以自由地询问代码的其他部分。

代码语言:javascript
运行
复制
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);

写入文字的框架着色器:

代码语言:javascript
运行
复制
#version 330

layout(location = 0) out vec4 col1;
layout(location = 1) out vec4 col2;

int main()
{
    col1 = vec4(1.0);
    col2 = vec4(2.0);
}

使用结果的其他着色器:

代码语言:javascript
运行
复制
#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;

  • val = col2时,
  • val = col1当layout(location = 0) out vec4 col2;都不考虑我绑定了GL_COLOR_ATTACHMENTi的纹理层时,这两个层似乎都在GL_TEXTURE_2D_ARRAY.

中工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-24 07:23:52

您需要指定要使用glDrawBuffers访问的缓冲区。

代码语言:javascript
运行
复制
GLenum drawBuffers[]{ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, drawBuffers);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67668046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档