frammento GLSL errore di sintassi Shader
Domanda
il seguente frammento di codice dello shader semplice non riesce, lasciandomi con un messaggio di disinformativa nel registro:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
void main()
{
vec4 myOutputColor(gl_Color);
gl_FragColor = myOutputColor;
}
, mentre la seguente funziona:
void main()
{
glFragColor = gl_Color;
}
Questa vacilla la mia mente, come in di Lighthouse3D gl_Color è detto di essere un vec4. Perché non posso assegnarlo ad un altro vec4?
Soluzione
Prova assegnazione normale. In questo modo:
void main()
{
vec4 myOutputColor = gl_Color;
gl_FragColor = myOutputColor;
}
Modifica:
La seconda risposta è altrettanto corretto in realtà, ma non v'è alcuna necessità di utilizzare il costruttore vec4 (), dal momento che entrambi sono dello stesso tipo. Se tu avessi lascia dire una (r, g, b, w) tupla si potrebbe scrivere:
vec4 myOutputColor = vec4(r, g, b, w);
o
// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);
etc
Altri suggerimenti
Aparrently si dovrebbe utilizzare la sintassi leggermente diversa
(vedi glsl Specification )
vec4 myOutputColor = vec4(gl_Color);
gl_FragColor = myOutputColor;
questa differenza il campione compila bene sulla mia mashine (Windows, scheda Nvidia)