我使用 XNA 作为我在 CPU 上进行的一些图形处理的一个很好的简单基础,因为它已经提供了很多我需要的东西。目前,我的“rendertarget”是我编写的自定义颜色数组struct
,由三个浮点字段组成:R、G、B。
当我想在屏幕上渲染它时,我struct
通过简单地将结果钳制在 0-255 的字节范围内,手动将此数组转换为 XNA 提供的颜色(每个通道只有 8 位精度)。然后我将这个新数组设置为 a 的数据Texture2D
(它有 a SurfaceFormat
of SurfaceFormat.Color
)并用 a 渲染纹理SpriteBatch
。
我正在寻找一种方法来摆脱 CPU 上的这种转换过程,只需将我的后备缓冲区作为某种纹理直接发送到 GPU,我想做一些基本的后处理。而且我确实需要比 8 位更高的精度(不一定是 32 位,但由于我所做的不是 GPU 密集型的,所以我猜它不会受到伤害)。
我该怎么做呢?
我想如果我给 Color 一个 32 字节的显式大小(所以 8 字节填充,因为我的三个通道只填充 24 位)StructLayout
并设置使用to (32 字节大)SurfaceFormat
渲染的纹理并填充纹理有了它,它可能会起作用。但我得到了这个例外:SpriteBatch
SurfaceFormat.Vector4
SetData<Color>
您在此方法中用于 T 的类型是此资源的无效大小。
是否可以使用任意组合struct
并将其解释为 GPU 中的纹理数据,就像您可以通过VertexDeclaration
指定其布局方式来处理顶点一样?