Как фрагментный шейдер узнает, какую переменную использовать для цвета пикселя?

Я вижу много разных шейдеров фрагментов,

#version 130

out vec4 flatColor;

void main(void)
{
    flatColor = vec4(0.0,1.0,0.0,0.5);
}

И все они используют разные переменные для «цвета выхода» (в этом case flatColor ). Итак, откуда OpenGL узнает, что вы пытаетесь сделать?

Я предполагаю, что это работает, потому что flatColor - единственная переменная, определенная как out , но вы можете добавить больше из переменных, не так ли? Или это просто приведет к сбою?


На самом деле, в качестве теста я только что запустил следующее:

#version 330

in vec2 TexCoord0;

uniform sampler2D TexSampler;

out vec4 x;
out vec4 y;

void main()
{
    y = texture2D(TexSampler, TexCoord0.xy);
}

Это сработало хорошо, использовал ли я x или y .


Кроме того, у нас есть предопределенный gl_FragColor . В чем разница и почему люди обычно настаивают на использовании своих собственные переменные?

76
задан mpen 10 February 2012 в 03:14
поделиться