2013-06-05 30 views
2

我正在构建我的引擎,假设一个顶点缓冲区的全部内容将在一次调用中绘制,而两者之间没有状态变化。我遇到的问题是缓冲区将包含许多具有不同纹理的不同网格。将对象ID传递给顶点缓冲区顶点子集的最佳选择是什么?

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

b)将对象ID作为要馈送给IA的顶点缓冲区的一部分。我遇到的问题是,在整个网格长度内反复写一个数字看起来太浪费了。

是否有任何方法来定义一个IA元素的变量偏移量,所以我不得不写一次网格ID并让它传递给x个vert?或者你能想到的其他方式?

回答

2

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