Domanda

il seguente frammento di codice dello shader semplice non riesce, lasciandomi con un messaggio di disinformativa nel registro: ERROR: 0:1: 'gl_Color' : syntax error syntax error

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

, mentre la seguente funziona:

void main()
{
  glFragColor = gl_Color;
}

Questa vacilla la mia mente, come in di Lighthouse3D gl_Color è detto di essere un vec4. Perché non posso assegnarlo ad un altro vec4?

È stato utile?

Soluzione

Prova assegnazione normale. In questo modo:

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

Modifica:

La seconda risposta è altrettanto corretto in realtà, ma non v'è alcuna necessità di utilizzare il costruttore vec4 (), dal momento che entrambi sono dello stesso tipo. Se tu avessi lascia dire una (r, g, b, w) tupla si potrebbe scrivere:

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

o

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

etc

Altri suggerimenti

Aparrently si dovrebbe utilizzare la sintassi leggermente diversa

(vedi glsl Specification )

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

questa differenza il campione compila bene sulla mia mashine (Windows, scheda Nvidia)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top