Direct3d 是否支持这种纹理方式?



目前,我正在尝试以编程方式创建纹理: 我有一个十六进制的一维数组:

char array = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }

我想使用构成这个数组的来创建这个纹理,因为二进制中的 F = 1111 和 7 = 0111 等等。从视觉上看,它看起来像这样:

1  1  1  1  1  1  1  0
1  1  1  1  1  1  0  1
1  1  1  1  1  0  1  1
1  1  1  1  0  1  1  1
1  1  1  0  1  1  1  1
1  1  0  1  1  1  1  1
1  0  1  1  1  1  1  1
0  1  1  1  1  1  1  1

本质上,数组的每个元素将表示一行,组成其中一个字符的八个位中的每一个将表示元素。 0 代表未填充,1 代表">填充"。然后我会根据一些外部机制为其应用颜色。我在MSDN上发现了这个DXGI_format:

DXGI_FORMAT_R1_UNORM

这需要一点,所以我猜类似于这个过程的东西是可能的。

Direct3D 不支持 1 位格式。DXGI_FORMAT_R1_UNORM格式是为 Direct3D 10 时代的某些早期 GDI 字体支持而创建的,但任何 Direct3D 硬件都不支持该格式本身的纹理。

你能找到的最小格式将是DXGI_FORMAT_R8_UNORM,你将1扩展到255字节,并将0保持为0字节。

对于一堆处理原始像素格式的代码,请查看DirectXTex。那里有一些代码用于扩展单色格式,例如转换代码库中的DXGI_FORMAT_R1_UNORM

最新更新