Opengl GLMultiDrawArrayIndirect并尝试查找它是哪个绘图调用

Opengl GLMultiDrawArrayIndirect并尝试查找它是哪个绘图调用,opengl,Opengl,因此,我有一个巨大的VBO,其中存储了我所有的模型,还有一堆draw调用,准备提交给glMultiDrawArraysIndirect 我也有一个均匀的矩阵块,所以船a到位置a,船B到位置B,等等 我的问题是-如何让glsl知道哪个抽签呼叫是哪个?我尝试更改baseInstance变量,但这似乎不会影响gl_InstanceID,它在每次绘制调用中也从0开始。在进一步阅读khronos页面后,这个变量似乎不会影响任何东西 那么,怎样才能正确地包含矩阵,以便每个绘制调用在不同的位置绘制内容呢?如果

因此,我有一个巨大的VBO,其中存储了我所有的模型,还有一堆draw调用,准备提交给glMultiDrawArraysIndirect

我也有一个均匀的矩阵块,所以船a到位置a,船B到位置B,等等

我的问题是-如何让glsl知道哪个抽签呼叫是哪个?我尝试更改baseInstance变量,但这似乎不会影响gl_InstanceID,它在每次绘制调用中也从0开始。在进一步阅读khronos页面后,这个变量似乎不会影响任何东西


那么,怎样才能正确地包含矩阵,以便每个绘制调用在不同的位置绘制内容呢?

如果您有GL 4.6/ARB_shader_draw_参数,那么您就有了,这正是它听起来的样子:在任何多个绘制命令中绘制的从零开始的索引。它也保证是,因此您可以使用它访问纹理数组(即,
sampler2D texarray[5];
,而不是
sampler2DArray texarray;
)和其他需要动态统一值的内容

如果你不。。。那么最好的办法就是创建一个包含索引的,从0开始的。您的VS将有一个与此值对应的输入
gl_InstanceID
不受基本实例的影响,但从实例数组中获取的值受其影响。因此,它将为您提供一个适当的索引,但代价是存在一个看似毫无意义的值

而且,这样的值在动态上并不一致。但这通常没什么大不了的。只有当您想要访问纹理阵列时,这才是一个问题