(二维纹理阵列)vs(纹理图集)vs(多重绑定/绘制)

(2d Texture Array) vs (Texture Atlas) vs (Multiple Binds / Draws)

我的问题与处理多个纹理的最佳方式有关。首先是一些上下文:

我在非游戏应用程序中使用 DirectX-11; gui 仅使用 DirectX。我正在制作可换肤的 gui,因此用户可以根据自己的喜好自定义 gui。

我编写的代码使得 gui 布局和每个 gui 元素的大小可以根据配置文件进行更改。 gui 目前仅通过 DrawIndexedInstanced 使用 DirectX 原语,但我想支持用户提供的纹理。这些纹理的大小可以变化。这些不同的纹理可能有多达两打。

我可以通过以下方式解决这个问题:

  1. 动态组合纹理图集,或...
  2. 将所有纹理强制放入 2d 纹理数组(根据需要通过填充使所有纹理大小相同),或者...
  3. 拆分 DrawIndexedInstanced 调用,以便每个不同的纹理都有一个绘制调用(即多个绑定/绘制)。

我整个下午都在寻找共识。我没找到。一分钱你的想法?

运行最快的方法是纹理图集。这就是 2d 游戏使用 sprite 贴图的原因。多次绑定/绘制是最慢的方法。