我正在尝试在我的Android游戏中实现实例化 - 即在一次绘制调用中绘制64个精灵。
我正在学习基于c语言的教程
https://learnopengl.com/#!Advanced-OpenGL/Instancing
当我在vertex-shader-code
中使用以下语法时,程序崩溃了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变量?我已经在定制的GLSurfaceview中将GLcontextClientVersion设置为3。
答案 0 :(得分:2)
gl_InstanceID是ES 3.0的一项功能。从GLSL ES 3.00规范第3.4章我们读到:
任何使用的着色器都需要指令“#version 300 es” 版本3.00的语言。任何代表版本的数字 编译器不支持的语言将导致错误 产生。 该语言版本1.00不需要着色器 包括此指令,以及不包含#version的着色器 指令将被视为目标版本1.00。
我的谦虚猜测是你错过了输入“#version 300 es”作为着色器中的第一行,因此编译器假设版本为1.00。