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

时间:2013-06-05 12:45:38

标签: directx

我正在构建我的引擎,假设单个顶点缓冲区的全部内容将在一次调用中绘制而两者之间没有状态更改。我遇到的问题是缓冲区将包含许多不同纹理的网格。

我需要一些方法告诉像素着色器选择哪种纹理。到目前为止,我看到2个选项: a)在常量缓冲区中设置一种寄存器,该缓冲区具有顶点id和对象id的数组,例如:vertex ID> 123对应于对象3,顶点id> 423对应于对象4等。这种方法的问题在于,对于一​​个我只能在缓冲区中容纳最多4096个网格。其次会有一个明显的性能影响,因为顶点着色器必须在所有值之间进行混洗,直到它找到它所属的位置。

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

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

1 个答案:

答案 0 :(得分:2)

您可以将对象ID作为顶点格式的一部分,并将对象ID放在每个顶点数据中,但您必须衡量性能对内存带宽消耗的影响。