首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fragmentShader中输出数据时切换布局位置

在fragmentShader中输出数据时切换布局位置
EN

Stack Overflow用户
提问于 2017-03-19 06:55:36
回答 1查看 124关注 0票数 0

我想用glDrawArraysInstanced函数来做双三角形。两者的区别是MVP矩阵。然后用2 GL_COLOR_ATTACHMENT应用FBO,激活glDrawBuffers(2,.)。

我的顶点着色器:

代码语言:javascript
复制
#version 430 core

layout (location = 0) in vec3 position;

uniform mat4 uModel;
uniform mat4 uView[2];
uniform mat4 uProjection[2];

out flat int ID;

void main()
{
    gl_Position = uProjection[gl_InstanceID] * uView[gl_InstanceID] * uModel * vec4(position.x, position.y, position.z, 1.0);
    ID = gl_InstanceID;
}

我的片段着色器:

代码语言:javascript
复制
#version 430 core

layout (location = 0) out vec3 color;
layout (location = 1) out vec3 color1;

in flat int ID;

void main()
{
    if (ID == 0) color  = vec3(1.0f, 0.5f, 0.2f);
    if (ID == 1) color1 = vec3(1.0f, 0.0f, 0.0f);
}

结果是:四个三角形。

似乎每个实例都实现了color和color1语句。那么,'if‘语句无效吗?我的问题是,如何限制输出目标在fbo和在一次通过。

EN

回答 1

Stack Overflow用户

发布于 2017-03-19 11:06:26

不能阻止着色器将其附加的所有输出写入。您的代码所做的是,只为一个输出分配一个值,但另一个输出仍在编写中。

如果只希望在其中一个附件中获得可见的输出,则可以向输出写入完全透明的颜色,并启用alpha混合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42883806

复制
相关文章

相似问题

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