Pregunta

el siguiente fragmento de código de sombreado sencillo falla, dejándome con un mensaje informativo en el registro: ERROR: 0:1: 'gl_Color' : syntax error syntax error

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

mientras que el siguiente funciona:

void main()
{
  glFragColor = gl_Color;
}

Esto perturba mi mente, como en de Lighthouse3D gl_Color es dice que es un vec4. Por qué no puedo asignarlo a otro vec4?

¿Fue útil?

Solución

Trate asignación normal. De esta manera:

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

Editar:

La segunda respuesta es tan correcta en realidad, pero no hay ninguna necesidad de utilizar el constructor vec4 (), ya que ambos son del mismo tipo. Si usted hubiera digamos un (r, g, b, w) tupla se podría escribir:

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

o

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

etc.

Otros consejos

Aparrently se debe utilizar la sintaxis ligeramente diferente

(ver glsl Especificación )

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

esta diferencia de su muestra compila bien en mi cajero (Windows, tarjeta de Nvidia)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top