目前,我正在尝试以编程方式创建纹理: 我有一个十六进制的一维数组:
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
。