【发布时间】:2017-03-19 06:55:36
【问题描述】:
我想用 glDrawArraysInstanced 函数来做双三角形。 两者的区别是MVP矩阵。 然后我应用一个带有 2 GL_COLOR_ATTACHMENT 的 FBO,并激活 glDrawBuffers(2, ...)。
我的顶点着色器:
#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;
}
我的片段着色器:
#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);
}
结果是: 4 triangles..
似乎每个 Instanced 都实现了 color 和 color1 语句。 那么,'if'语句是否无效? 我的问题是如何限制 fbo 中的输出目标和一次通过。
【问题讨论】:
标签: opengl fragment-shader vertex-shader fbo