/ / OpenGL ES3 android: wbudowany zmienny gl_InstanceID - android, opengl-es, glsl, opengl-3

OpenGL ES3 android: wbudowany zmienny gl_InstanceID - android, opengl-es, glsl, opengl-3

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 № 1

gl_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.