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

标签 directx

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

我需要某种方法来告诉像素着色器选择哪个纹理。到目前为止我看到有两个选择: 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/

相关文章:

c++ - DirectX9、DirectDraw、优化?

directx - 使用 DirectX 重新创建剧院模式

c++ - 尝试将 User32.lib 添加到链接器而不是使用 #pragma 注释(lib, "User32.lib")

directx - ID3D11Texture2D 到 ID2D1Bitmap,可能吗?

c++ - 将 mem_fun_ref 与 boost::shared_ptr 一起使用

c# - DirectX 9、10 Hook 以在全屏游戏上覆盖内容

c++ - DirectX:如何更改按钮对象的字体大小?

c++ - 带有 X 文件的非连贯顶点缓冲区

windows - 在 Windows 8 媒体基础转换中在 IMFMediaBuffer 上绘制文本

c++ - Directx9 表面到纹理