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.