2017-09-19 16 views
0

안드로이드 게임에 인스 턴싱을 구현하려고합니다. 즉, 하나의 그리기 호출에 64 개의 스프라이트를 그립니다.OpenGL ES3 android : 내장 변수 gl_InstanceID

나는 C 언어를 기반으로 자습서를 따라하고

https://learnopengl.com/#!Advanced-OpenGL/Instancing

프로그램 충돌 나는 정점 셰이더 코드

vec2 offset = offsets[gl_InstanceID]; 

예외

에 다음 구문을 사용할 때
09-19 17:28:18.315 3635-3674/? E/ShaderHelper: Error compiling shader: 0:47: L0002: Undeclared variable 'gl_InstanceID' 

그렇다면 왜 instanceID vari에 액세스 할 수 없습니까? 할 수 있는? 이미 GLcontextClientVersion을 3으로 설정했습니다.

답변

2

gl_InstanceID는 ES 3.0 기능입니다. GLSL ES 3.00 사양 3.4 장에서 우리는 읽기 :

The directive “#version 300 es” is required in any shader that uses version 3.00 of the language. Any number representing a version of the language a compiler does not support will cause an error to be generated. Version 1.00 of the language does not require shaders to include this directive, and shaders that do not include a #version directive will be treated as targeting version 1.00.

내 겸손 추측 컴파일러 버전 1.00을 가정 있도록 쉐이더에서 첫 번째 줄 "#Version을 300 ES"를 입력 놓친입니다.

+0

감사합니다. 셰이더에 입력하지 않아서 문제가 해결되어야한다고 생각했지만 다음 오류가 발생합니다. ** 셰이더 컴파일 오류 : 0 : 7 : L0003 : 키워드 '특성'이 예약되었습니다. ** – java

+0

@java http : //www.shaderific.com/blog/2014/3/13/tutorial-how-to-update-a-shader-for-opengl-es-30 '속성'키워드는 'in'키워드로 바뀝니다. 일부 다른 키워드도 변경됩니다. – Andreas