所有这些表面格式的重点是什么?

我相当新的graphics编程。 我以前在xna写过一些基本的游戏,但是我想知道所有这些表面格式的意义。 例如Xna和DDS支持标准的RGBA(8bpp)。 为什么每个通道需要32 bpp甚至更奇怪的比特组合,比如Rg32。 拥有标准的DXn,RGBA和HDR格式还不够吗?

你认为XNA有很多表面格式 ? 男孩,你什么也没有看到 。

一边开玩笑,我怀疑原因是兼容传统/向后兼容性和灵活性。

很明显,一旦引入了表面格式,就需要向前支持一段时间,或者整个API需要向下兼容。 所以可能有一些表面格式只是由于这个原因而浮动。

但更重要的原因是开发人员拥有许多可供select的表面格式选项的灵活性 – 这允许开发人员在特定频道上尽可能less地使用比特,或者尽可能less地使用频道优化空间是重要的考虑因素。 当需要宽范围的颜色数据时(例如HDR,正如您所提到的),它允许扩展到非常大的位宽的可能性。 对于相对专业化(但是非常常见的,可能是性能关键的graphics操作)任务,存在一些格式 – 例如NormalizedByte2格式通常用于凹凸贴图相关操作(根据文档)。

一些奇怪的外观格式对于非graphics操作也是有用的,就像一般的GPU计算一样,你可能只需要两个input数据通道(因此,为什么浪费空间在第三个video内存可以更好使用 – 例如允许更多您正在尝试处理的双通道数据?)

具有各种格式也允许开发人员与GPU通信如何排列和使用数据(这就是为什么DXGI格式列表如此之大,因为它不仅包括位宽度变化,还包括一些types信息,例如值是否有符号或无符号),这又可以允许GPU优化其缓冲区布局以获得最大的管道吞吐量。

最后, 一些格式在可以使用的地方和时间受到限制 ,这就需要一个起初似乎很庞大的列表,但是对于任何给定的场景来说实际上都相对紧凑。 例如,相对较less的格式可用于深度缓冲区。