我有一个GLSL着色器,它使用由glDrawArraysInstanced all设置的gl_InstanceID输入变量。我希望此着色器可以与未设置gl_InstanceID的drawcall一起使用。在这里,我想手动设置gl_InstanceID统一样式。
在这些情况下,将glInstanceID绑定为统一的行为是否合法/已定义的行为?
GLint const instanceIdx = glGetUniformLocation(pid, "gl_InstanceID");
谢谢
[如果您尝试手动提供gl_InstanceID
的值,则由于多种原因而无法将其位置设置为统一,这主要是因为非统一。它是内置的vertex shader input variable,它与顶点属性(用户提供,不是内置的)不同。
对于不使用实例化的任何绘图调用,gl_InstanceID
的值为零。如果您希望此类调用的值不为零,则不可能。 GLSL 4.60 / ARB_shader_draw_parameters中的gl_BaseInstance
将跟踪BaseInstance draw calls中的基本实例值。因此,您可以使用它来有效地设置实例索引。
但是没有那,您无能为力。