Direct3D10:没有32位ARGB格式?

时间:2009-03-17 11:09:22

标签: c++ direct3d direct3d10

我开始添加d3d10支持以配合我现有的d3d9图形后端。

问题是所有现有的代码(在几个应用程序中......)使用ARGB格式的颜色但是我找不到匹配d3d10的格式模式。 d3d10根本不支持ARGB颜色格式还是我错过了什么?如果我错过了什么是在它们之间进行转换的好方法,它只需要将第一个字节移动到最后,这看起来像一个非常简单的概念但是我无法看到除了将颜色分解为其组件之外还要做到这一点并重建它......例如:

//unsigned colIn, colOut
unsigned char
    a = (colIn & 0xFF000000) >> 24,
    r = (colIn & 0x00FF0000) >> 16,
    g = (colIn & 0x0000FF00) >> 8,
    b = (colIn & 0x000000FF);
colOut = (r << 24) | (g << 16) | (b << 8) | a;

2 个答案:

答案 0 :(得分:2)

我认为这种格式已经丢失,因此您需要重新订购数据。但是,如果您要使用RGBA,则不需要像示例那样分离所有颜色,因为R,G和B仍然是连续的相同顺序,您可以将这3个通道作为一个块移动。

答案 1 :(得分:1)

查看相关的enum type,我(也)找不到任何AxRxGxBx格式。所以看来你需要自己调整一下。

当然,这非常适合SSE optimization,检查您的编译器是否能够将代码优化为使用SSE的内容并且性能应该没问题。

在执行此代码时考虑字节序问题,很容易出错并且这段代码很难在不关心字节序的情况下编写。

相关问题