Pergunta

o código de shader de fragmento seguindo simples falhar, deixando-me com uma mensagem informativo no log: ERROR: 0:1: 'gl_Color' : syntax error syntax error

void main()
{
  vec4 myOutputColor(gl_Color);
  gl_FragColor = myOutputColor;
}

enquanto a obras seguintes:

void main()
{
  glFragColor = gl_Color;
}

Este confunde a minha mente, como em Lighthouse3D é tutorial gl_Color é disse ser um vec4. Por que não pode atribuí-lo a outro vec4?

Foi útil?

Solução

Tente atribuição normal. Como esta:

void main()
{
  vec4 myOutputColor = gl_Color;
  gl_FragColor = myOutputColor;
}

Editar:

A segunda resposta é tão correta realmente, mas não há qualquer necessidade de usar o construtor vec4 (), já que ambos são do mesmo tipo. Se você tivesse, digamos que uma tupla (r, g, b, w) você poderia escrever:

vec4 myOutputColor = vec4(r, g, b, w);

ou

// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);

etc

Outras dicas

Aparrently você deve usar sintaxe ligeiramente diferente

(ver glsl Especificação )

vec4 myOutputColor = vec4(gl_Color);
gl_FragColor = myOutputColor;

este ao contrário de seu amostra compila bem no meu mashine (Windows, placa Nvidia)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top