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.