Próbuję wdrożyć instancje w mojej grze na Androida - to jest narysowanie 64 spritów w jednym losowaniu.
Śledzę samouczek oparty na języku c
https://learnopengl.com/#!Advanced-OpenGL/Instancing
program ulega awarii, gdy używam następującej składni w kodzie-cieniu wierzchołków
vec2 offset = offsets[gl_InstanceID];
wyjątek
09-19 17:28:18.315 3635-3674/? E/ShaderHelper: Error compiling shader: 0:47: L0002: Undeclared variable "gl_InstanceID"
Dlaczego więc nie mogę uzyskać dostępu do zmiennej instanceID? Już ustawiłem GLcontextClientVersion na 3 w dostosowanym GLSurfaceview.
Odpowiedzi:
2 dla odpowiedzi № 1gl_InstanceID to funkcja ES 3.0. Z rozdziału 3.4 normy GLSL ES 3.00 czytamy:
Dyrektywa "#version 300 es" jest wymagana wdowolny moduł cieniujący, który używa wersja 3.00 języka. Dowolna liczba reprezentująca wersję język, którego nie obsługuje kompilator, spowoduje błąd wygenerowany. Wersja 1.00 języka nie wymaga shaderów uwzględnij tę dyrektywę i shadery, które nie zawierają #version dyrektywa będzie traktowana jako wersja docelowa 1.00.
Moim skromnym przypuszczeniem jest to, że przegapiłeś wpisanie "#version 300 es" jako pierwszej linii w module cieniującym, aby kompilator przyjął wersję 1.00.