阅读GLSL 1.40规范:
片段输出只能是浮点数、浮点向量、有符号或无符号整数或整数向量,或者它们的任何数组。矩阵和结构不能被输出。片段输出声明示例如下:
out vec4 FragmentColor; out uint Luminosity;
片段颜色是否定义为写入gl_FragColor...?这是正确的吗?有人能帮我澄清一下这些输出吗?我可以只写示例中的'FragmentColor'来确定片段颜色吗?我能够读取它们吗(例如'Luminosity')?
您的示例有两个输出,它们在GLSL程序链接后与相应的FBO插槽相关联。您可以使用glBindFragDataLocation
重定向它们。
一旦您激活了着色器并绑定了FBO,一切都取决于绘制掩码,由glDrawBuffers
设置。例如,如果您在那里传递了GL_COLOR_ATTACHMENT0
和GL_COLOR_ATTACHMENT2
,这意味着输出索引0将进入附件0,输出索引1将进入颜色附件2。
我想举几个例子:
void add(in float a, in float b, out float c)
{
//you can not use c here. only set value
//changing values of a and b does not change anything.
c = a + b;
}
void getColor(out float r, out float g, out float b)
{
//you can not use r, g, b here. only set value
r = gl_FragColor.r;
g = gl_FragColor.g;
b = gl_FragColor.b;
}
void amplify(inout vec4 pixelColor, in value)
{
//inout is like a reference
pixelColor = pixelColor * value;
}