2012-12-16 11 views
5

Sono nuovo per gli shader e ho iniziato a giocare con alcuni di loro ieri. Essi compilano benissimo sul mio PC Windows, ma quando sono correvano su Mac, c'è un errore per entrambi:Errore Shader GLSL su Mac, ma non Windows: impossibile convertire da 'const int' a 'Vettore a 4 componenti di float'

ERROR: 0:14: '=' : cannot convert from 'const int' to '4-component vector of float'

Su Android solo il secondo Shader mi dà un errore. Ha l'errore sopra un accenno al fatto che non c'è alcun punto di funzione corrispondente sovraccaricato.

usano lo stesso vertex shader:

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoord0; 

uniform mat4 u_projTrans; 

varying vec4 vColor; 
varying vec2 vTexCoord; 

void main() { 
    vColor = a_color; 
    vTexCoord = a_texCoord0; 
    gl_Position = u_projTrans * a_position; 
} 

un frammento Shader (errore su Mac):

#ifdef GL_ES 
#define LOWP lowp 
precision mediump float; 
#else 
#define LOWP 
#endif 

varying LOWP vec4 vColor; 
varying vec2 vTexCoord; 
uniform sampler2D u_texture; 
void main() { 
    vec4 texColor = texture2D(u_texture, vTexCoord); 
    texColor.rgb = 1.0 - texColor.rgb; 
    gl_FragColor = texColor * vColor; 
} 

L'altro Fragment Shader (errore su Mac e Android):

#ifdef GL_ES 
#define LOWP lowp 
precision mediump float; 
#else 
#define LOWP 
#endif 

varying LOWP vec4 vColor; 
varying vec2 vTexCoord; 
uniform sampler2D u_texture;    
void main() { 
    vec4 texColor = texture2D(u_texture, vTexCoord); 
    vec3 gray = vec3(0.2125, 0.7154, 0.0721); 
    vec4 color = dot(gray, texColor); 
    color.a = texColor.a; 
    gl_FragColor = color * vColor; 
} 
+0

Quale linea in quale file causa questo errore? – Aaron

risposta

4

Nel primo shader si è verificato un errore in questa riga - texColor.rgb = 1.0 - texColor.rgb; È necessario scrivere:

texColor.rgb = vec3(1.0) - texColor.rgb; 

Al secondo Shader avete errore in questa linea - vec4 color = dot(gray, texColor); Grey è vec3, texcolor è vec4. Qual è il prodotto punto tra vec3 e vec4? Non esiste una tale funzione dot che lo faccia. È possibile chiamare float dot(vec3, vec3) o float dot(vec4, vec4). Quindi cambiare quella linea a:

vec4 color = vec4(dot(gray, texColor.rgb)); 

o

vec4 color = vec4(dot(vec4(gray, ???), texColor)); // put in ??? float number you want 

(e la prossima volta si prega di spettacolo in cui allineare esattamente si verifica un errore)

+0

Grazie mille. Avrei condiviso volentieri i numeri di riga, ma quell'errore era l'unica cosa che sputava fuori. Non sapevo se avevo bisogno di qualche tipo di profiler o qualcos'altro per ottenere di più da esso. Mi dispiace, non ho potuto fornire di più. – DustinRiley

Problemi correlati