2012-01-09 12 views
7

Uczę się programowania w 3D z książką Learning Modern 3D Graphics Programming, ale nie mam szczęścia z modułami cieniowania i GLES 2.0 w systemie iOS. Pracuję z szablonem gry opencode xcode 4, ale ze zmianami mającym sens w pierwszym przykładzie z książki.Różnice w cieniowaniu na iOS

Pierwsze shadery w tej książce nie skompilują się z wieloma różnymi błędami. Pierwszy moduł cieniujący wierzchołków Skarży się na oświadczenie wersji i odmawia zgody na użycie układu jako specyfikatora. W końcu udało mi się to zbudować.

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

Znowu pierwszy fragment shader nie chce budować ze względu na wersję i nie pozwoli na wyjście z segmentu globalnego

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

z błędem

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

Ok więc ja udało się uzyskać pierwszy przykład (prosty trójkąt) do pracy z następującymi shaderów.

vertex shader

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

fragment shader

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

Tak więc ci pracowali i próbowałem pierwszy barwny przykład w następnym rozdziale.

#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); 
} 

Nawet pracujący wokół stałych problemów z eariler, wersji, wf nie spławiki są dozwolone, Shader nadal odmawia zbudować z tego błędu

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

Skutecznie to narzekają pływaka.

Próbowałem googling, aby znaleźć wyjaśnienie różnic, ale żaden z nich nie pojawił się. Przeczytałem również dokumentację Apple, szukając porady i nie znalazłem żadnej pomocy. Nie jestem pewien, gdzie jeszcze patrzeć, ani co tak naprawdę robię źle.

Odpowiedz

13

dodać to na górze shadera: precision mediump float;

lub precision highp float;

zależy od Twoich potrzeb.