2

既存の d3d9 グラフィックス バックエンドに合わせて d3d10 サポートを追加し始めています。

問題は、既存のすべてのコード (いくつかのアプリケーションで...) が 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;
4

2 に答える 2

2

そのフォーマットがなくなったように見えるので、データを再注文する必要があります。ただし、RGBA を使用する場合は、例のようにすべての色を分離する必要はありません。これは、R、G、および B が連続して同じ順序であるためです。これらの 3 つのチャネルを 1 つのチャンクとして移動できます。

于 2009-03-17T11:23:31.513 に答える
1

関連するenum typeを見ると、 (あまりにも) AxRxGxBx 形式が見つかりません。では、自分でスウィズリングを行う必要があるようです。

もちろん、これはSSE 最適化に非常に適しています。コンパイラがコードを SSE を使用するものに最適化できるかどうかを確認してください。パフォーマンスは問題ないはずです。

このコードを実行するときのエンディアンの問題について考えてみてください。間違いを犯しやすく、エンディアンを気にせずにこのコードを書くのは困難です。

于 2009-03-17T11:17:48.797 に答える