c++ - Direct3D10:没有 32 位 ARGB 格式?

标签 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;

最佳答案

在我看来,该格式已丢失,因此您需要重新排序数据。但是,如果您要使用 RGBA,则不需要像示例那样分离所有颜色,因为 R、G 和 B 仍然连续处于相同的顺序,您可以将这 3 个 channel 作为一个 block 移动。

关于c++ - Direct3D10:没有 32 位 ARGB 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/653787/

相关文章:

c++ - 在 OpenCV 中使用 inRange() 检测范围内的颜色

c++ - 同级友元运算符似乎不参与重载决议

c++ - 如何使用 HTML/CSS UI 构建原生 C++ 应用程序?

c++ - 将值传递给着色器的问题

c++ - 在 std::vector 中间插入元素最轻松的方法是什么

opengl - 渲染具有多个索引的网格

directx - DX11 三角形列表根本不渲染

c++ - 使用 DXGI 将一台显示器切换到全屏时,其他显示器会变黑

c++ - D3D10 HLSL : How do I bind a texture to a global Texture2D via reflection?