OpenGL ES3 android:内置变量gl_InstanceID

时间:2017-09-19 15:34:04

标签: android opengl-es glsl opengl-3

我正在尝试在我的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。

1 个答案:

答案 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。