opengl - 将 gl_InstanceID 绑定为统一位置是否合法?
问题描述
我有一个 GLSL 着色器,它使用由 glDrawArraysInstanced all 设置的 gl_InstanceID 输入变量。我希望这个着色器可以使用未设置 gl_InstanceID 的绘制调用。在这里,我想手动设置 gl_InstanceID 统一样式。
将 glInstanceID 绑定为这些情况的制服是否合法/定义的行为?
GLint const instanceIdx = glGetUniformLocation(pid, "gl_InstanceID");
解决方案
如果您尝试手动为 提供值gl_InstanceID
,则将其位置作为制服将不起作用,原因有几个,但主要是因为它不是制服。它是一个内置的顶点着色器输入变量,它不同于顶点属性(这是用户提供的,不是内置的)。
gl_InstanceID
对于任何不使用实例化的绘图调用,的值将为零。如果您希望此类调用不为零,那是不可能的。gl_BaseInstance
来自 GLSL 4.60/ARB_shader_draw_parameters 将跟踪来自BaseInstance 绘制调用的基本实例值。所以你可以用它来有效地设置实例索引。
但没有它,你无能为力。
推荐阅读
- vue.js - Vue 3 用提供的 HTML 替换调用 v-html 的 HTML 标签
- kubernetes-ingress - 使用带有 Traefik Ingress for MultiSite 的 Azure 应用程序网关出现随机 502 Bad gateway 错误
- sql - 使用tableau或sql在日期列上方的行字段中填写最近的值最大值
- .net - HttpWebRequest 不会在生产中发送 cookie
- php - PHP - 如何在数据库中搜索加密数据
- javascript - Carousel - 网格间距问题(图像被压缩) - CSS - 使用 Unbounce(它可以让您构建网站)
- python - 如何在 Python 中设置 COM 对象的索引属性的值?
- td-engine - TDengine集群中一个节点下线后无法建立连接
- python - ImportError:无法从“django_plotly_dash”导入名称“DjangoDash”
- php - 使用 Laravel 提交表单后 subfission/CAS 会话过期