我想用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);
}结果是:四个三角形。
似乎每个实例都实现了color和color1语句。那么,'if‘语句无效吗?我的问题是,如何限制输出目标在fbo和在一次通过。
发布于 2017-03-19 11:06:26
不能阻止着色器将其附加的所有输出写入。您的代码所做的是,只为一个输出分配一个值,但另一个输出仍在编写中。
如果只希望在其中一个附件中获得可见的输出,则可以向输出写入完全透明的颜色,并启用alpha混合。
https://stackoverflow.com/questions/42883806
复制相似问题