Directx 将对象ID传递给顶点缓冲区中的顶点子集的最佳选项是什么?

Directx 将对象ID传递给顶点缓冲区中的顶点子集的最佳选项是什么?,directx,Directx,我在构建引擎时假设一个顶点缓冲区的全部内容将在一次调用中绘制,其间没有状态变化。我遇到的问题是缓冲区将包含许多不同的网格,这些网格上有不同的纹理 我需要一些方法来告诉像素着色器要拾取哪个纹理。到目前为止,我看到了两种选择: a) 在常量缓冲区中设置一种寄存器,该缓冲区将具有顶点id和对象id的数组,例如:顶点id>123对应于对象3,顶点id>423对应于对象4等。这种方法的问题是,对于一种方法,我最多只能在缓冲区中拟合4096个网格。第二,由于顶点着色器必须在所有值之间来回移动,直到找到它所属

我在构建引擎时假设一个顶点缓冲区的全部内容将在一次调用中绘制,其间没有状态变化。我遇到的问题是缓冲区将包含许多不同的网格,这些网格上有不同的纹理

我需要一些方法来告诉像素着色器要拾取哪个纹理。到目前为止,我看到了两种选择: a) 在常量缓冲区中设置一种寄存器,该缓冲区将具有顶点id和对象id的数组,例如:顶点id>123对应于对象3,顶点id>423对应于对象4等。这种方法的问题是,对于一种方法,我最多只能在缓冲区中拟合4096个网格。第二,由于顶点着色器必须在所有值之间来回移动,直到找到它所属的位置,因此性能会受到明显的影响

b) 将对象ID作为顶点缓冲区的一部分提供给IA。我的问题是,在网格的整个长度上一遍又一遍地写一个数字似乎是一种浪费


有没有办法为IA元素定义一个变量偏移量,这样我只需要写一次网格id,然后将它传递给x个顶点?或者您能想到的任何其他方法?

您可以将对象ID作为顶点格式的一部分,并将对象ID放入逐顶点数据中,但您必须测量此项对内存带宽消耗的性能影响