首页 > 解决方案 > 将 gl_InstanceID 绑定为统一位置是否合法?

问题描述

我有一个 GLSL 着色器,它使用由 glDrawArraysInstanced all 设置的 gl_InstanceID 输入变量。我希望这个着色器可以使用未设置 gl_InstanceID 的绘制调用。在这里,我想手动设置 gl_InstanceID 统一样式。

将 glInstanceID 绑定为这些情况的制服是否合法/定义的行为?

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

标签: openglopengl-es

解决方案


如果您尝试手动为 提供值gl_InstanceID,则将其位置作为制服将不起作用,原因有几个,但主要是因为它不是制服。它是一个内置的顶点着色器输入变量,它不同于顶点属性(这是用户提供的,不是内置的)。

gl_InstanceID对于任何不使用实例化的绘图调用,的值将为零。如果您希望此类调用不为零,那是不可能的。gl_BaseInstance来自 GLSL 4.60/ARB_shader_draw_parameters 将跟踪来自BaseInstance 绘制调用的基本实例值。所以你可以用它来有效地设置实例索引。

但没有它,你无能为力。


推荐阅读