fragmento GLSL erro sintaxe sombreador

votos
3

o seguinte código fragmento shader 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 o seguinte funciona:

void main()
{
  glFragColor = gl_Color;
}

Isso confunde a minha mente, como no tutorial do Lighthouse3D gl_Color é dito ser um vec4. Por que não pode atribuí-lo a outro vec4?

Publicado 19/05/2009 em 13:43
fonte usuário
Em outras línguas...                            


2 respostas

votos
7

Tente atribuição normal. Como isso:

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 a (r, g, b, w) tupla você poderia escrever:

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

ou

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

etc

Respondeu 19/05/2009 em 14:15
fonte usuário

votos
4

Aparrently você deve usar sintaxe ligeiramente diferente

(veja OpenGL Shading Language Specification )

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

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

Respondeu 19/05/2009 em 14:37
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more