Opengl 将gl_InstanceID绑定为统一位置合法吗?

Opengl 将gl_InstanceID绑定为统一位置合法吗?,opengl,opengl-es,Opengl,Opengl Es,我有一个GLSL着色器,它使用glDrawArraysInstanced all设置的gl_InstanceID输入变量。我希望此着色器与不设置gl_InstanceID的drawcall一起使用。在这里,我想手动设置gl_InstanceID统一样式 将glInstanceID作为这些案例的统一绑定是否合法/已定义的行为 GLint const instanceIdx = glGetUniformLocation(pid, "gl_InstanceID"); 如果您试图手动为gl\u Ins

我有一个GLSL着色器,它使用glDrawArraysInstanced all设置的gl_InstanceID输入变量。我希望此着色器与不设置gl_InstanceID的drawcall一起使用。在这里,我想手动设置gl_InstanceID统一样式

将glInstanceID作为这些案例的统一绑定是否合法/已定义的行为

GLint const instanceIdx = glGetUniformLocation(pid, "gl_InstanceID");

如果您试图手动为
gl\u InstanceID
提供一个值,那么将其位置作为一个统一的对象是行不通的,原因有几个,主要是因为它不是一个统一的对象。它是一个内置属性,与顶点属性(由用户提供,而不是内置属性)不同

对于任何不使用实例化的绘图调用,
gl\u InstanceID
的值将为零。如果您希望此类调用的值为非零,则这是不可能的<代码>GLSL 4.60/ARB_shader_draw_参数中的gl_基本实例将从中跟踪基本实例值。因此,您可以使用它来有效地设置实例索引

但是没有这些,你就无能为力