DDSファイルでは、0,1アルファビットのテクスチャを検出できますか?


1

私のエンジンでは、0アルファでテクセルを持つDXT1テクスチャを検出できる必要があります(例えばウィンドウ枠の切り抜き)。これは自分で圧縮するテクスチャにとっては簡単ですが、すでに圧縮されているテクスチャについてはわかりません。

DDSイメージにアルファが含まれているかどうかをヘッダーから簡単に確認できますか?

2

私が知る限り、ヘッダーから告げる方法はありません。 DDPF_ALPHAPIXELSフラグがありますが、ピクセルデータの内容に基づいて設定されるとは思われません。 DXT1ブロックを解析し、その中に0アルファを持つカラーを探す必要があります(実際にブロック内でカラーが使用されていることを確認してください)。


0

私は受け入れられた答えに同意します。 「squish」ライブラリを使ってブロックを解凍すると、あなたの仕事は少し楽になるかもしれません。

http://www.sjbrown.co.uk/?code=squish


0

DDSはDXT(又はBTC)データのための非常に乏しいラッパーです。ヘッダーはあなたを助けません。 普通のDXT1にはアルファがありませんでした。私は今日d3dが実際にはDXT1をアルファでデコードすると信じています。すべてのDXT1ブロックは、color1(16ビット)color2(16ビット)インデックス(32ビット)のようになります。 16ビットのcolor1の値がcolor2より小さい場合(uint16の比較だけですが、空想的です)、ブロックにはアルファがありません。それ以外はそうです。あなたの質問に答えるには:ヘッダがスキップされ、16ビットが読み込まれ、16ビットが読み込まれます。そうでなければ32ビットをスキップし、eofまで繰り返す。 DXT5のような他のDXTフォーマットは常にアルファを持っています。いくつかのhw(intel ..)がそれを確実にサポートしていないので、人々がDXT1アルファトリックに頼っていることは非常にまれです。


0

いいえ、DDSヘッダーは、非圧縮イメージにのみアルファフラグを使用します。私はDXT1の画像は、1ビットのアルファを使用していたかどうかを把握するために同様の必要性を持っていたし、長い検索の後、私はここに、この参照に出くわした:https://msdn.microsoft.com/en-us/library/windows/desktop/bb147243(v=vs.85).aspx

基本的にColor_0から< = COLOR_1その後、テクスチャが1を持っている可能性がある場合には-Bitアルファ。それをさらに検証するには、2ビットのペアが次の32ビットであることを確認する必要があります。見つからなければ、これをすべてのブロックで続行します。