我正在构建我的引擎,假设单个顶点缓冲区的全部内容将在一次调用中绘制,并且其间没有状态更改。我遇到的问题是缓冲区将包含许多不同的网格,其上有不同的纹理。
我需要某种方法来告诉像素着色器选择哪个纹理。到目前为止我看到有两个选择: a) 在常量缓冲区中设置一种寄存器,该寄存器具有顶点 id 和对象 id 的数组,例如:顶点 ID > 123 对应于对象 3,顶点 id > 423 对应于对象 4 等。一种方法是,我最多只能在缓冲区中容纳 4096 个网格。其次,性能会受到显着影响,因为顶点着色器必须重新排列所有值,直到找到它所属的位置。
b) 将对象 ID 作为顶点缓冲区的一部分馈送到 IA。我遇到的问题是,在网格的整个长度上一遍又一遍地写一个数字似乎是一种浪费。
有没有办法为 IA 元素定义一个可变偏移量,这样我就只需编写一次网格 id 并将其传递给 x 个顶点?或者你能想到其他方法吗?
最佳答案
您可以将对象 ID 作为顶点格式的一部分,并将对象 ID 放入每个顶点数据中,但您必须测量其对内存带宽消耗的性能影响。
关于directx - 将对象 ID 传递给顶点缓冲区中的顶点子集的最佳选项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940325/