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?

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top