fragment GLSL erreur de syntaxe de nuanceur
Question
le code shader simple fragment suivant échoue, me laissant un message uninformative dans le journal:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
void main()
{
vec4 myOutputColor(gl_Color);
gl_FragColor = myOutputColor;
}
alors que le suivant fonctionne:
void main()
{
glFragColor = gl_Color;
}
Ce trouble mon esprit, comme dans Lighthouse3D gl_Color est dit être un vec4. Pourquoi ne puis-je attribuer à un autre vec4?
La solution
Essayez affectation normale. Comme ceci:
void main()
{
vec4 myOutputColor = gl_Color;
gl_FragColor = myOutputColor;
}
Edit:
La deuxième réponse est tout aussi correcte vraiment, mais il n'y a pas besoin d'utiliser le constructeur vec4 (), puisque les deux sont du même type. Si vous aviez permet de dire un (r, g, b, w) tuple vous pouvez écrire:
vec4 myOutputColor = vec4(r, g, b, w);
ou
// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);
etc
Autres conseils
Aparrently vous devez utiliser une syntaxe légèrement différente
(voir OpenGL Shading Language Specification )
vec4 myOutputColor = vec4(gl_Color);
gl_FragColor = myOutputColor;
à la différence de votre échantillon compile très bien sur mon d'argent (Windows, carte Nvidia)