2012-01-09 12 views
7

Sto imparando sulla programmazione 3D con il libro Learning Modern 3D Graphics Programming, ma non ho fortuna con gli shader e GLES 2.0 in iOS. Sto lavorando con il modello di gioco xcode 4 opengl, anche se con le modifiche per dare un senso al primo esempio nel libro.Differenze di shader su iOS

I primi shader del libro non verranno compilati con molti errori diversi. Il primo vertex shader

#version 330 

layout(location = 0) in vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

lamenta la dichiarazione di versione e si rifiuta di consentire l'utilizzo di layout come identificatore. Sono finalmente riuscito a farlo costruire.

attribute vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

Anche in questo caso il primo Shader frammento rifiuta di costruire a causa della versione, e non permetterà l'uscita in un segmento globale

#version 330 
out vec4 outputColor; 
void main() 
{ 
    outputColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); 
} 

Con l'errore

ERROR: 0:10: Invalid qualifiers 'out' in global variable context 

Va bene così ho è riuscito a ottenere il primo esempio (un semplice triangolo) per lavorare con i seguenti shader.

vertex shader

#version 100 
void main() 
{ 
    gl_FragColor = vec4(1.0,1.0,1.0,1.0); 
} 

frammento di shader

attribute vec4 position; 
void main() 
{ 
    gl_Position = position; 
} 

Così quelli lavorato e ho provato il primo esempio di colore nel prossimo capitolo.

#version 330 
out vec4 outputColor; 
void main() { 
    float lerpValue = gl_FragCoord.y/500.0f; 
    outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f), 
     vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue); 
} 

Anche lavorare intorno problemi risolti dal eariler, la versione, non galleggia essere consentito in F, Lo shader rifiuta ancora di costruire con questo errore

ERROR: 0:13: 'float' : declaration must include a precision qualifier for type 

Effettivamente si lamenta galleggiante.

Ho provato su google per trovare una spiegazione delle differenze, ma nessuna di queste viene fuori. Ho anche letto i documenti Apple in cerca di consigli e non ho trovato aiuto. Non so dove altro guardare, o cosa sto facendo davvero male.

risposta

13

aggiungere questo nella parte superiore dello shader: precision mediump float;

o precision highp float;

dipende dalle vostre esigenze.