error de sintaxis shader fragmento GLSL
Pregunta
el siguiente fragmento de código de sombreado sencillo falla, dejándome con un mensaje informativo en el registro:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
void main()
{
vec4 myOutputColor(gl_Color);
gl_FragColor = myOutputColor;
}
mientras que el siguiente funciona:
void main()
{
glFragColor = gl_Color;
}
Esto perturba mi mente, como en de Lighthouse3D gl_Color es dice que es un vec4. Por qué no puedo asignarlo a otro vec4?
Solución
Trate asignación normal. De esta manera:
void main()
{
vec4 myOutputColor = gl_Color;
gl_FragColor = myOutputColor;
}
Editar:
La segunda respuesta es tan correcta en realidad, pero no hay ninguna necesidad de utilizar el constructor vec4 (), ya que ambos son del mismo tipo. Si usted hubiera digamos un (r, g, b, w) tupla se podría escribir:
vec4 myOutputColor = vec4(r, g, b, w);
o
// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);
etc.
Otros consejos
Aparrently se debe utilizar la sintaxis ligeramente diferente
(ver glsl Especificación )
vec4 myOutputColor = vec4(gl_Color);
gl_FragColor = myOutputColor;
esta diferencia de su muestra compila bien en mi cajero (Windows, tarjeta de Nvidia)