ユーザ用ツール

サイト用ツール


ddsformat

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ddsformat [2015/05/26 13:22] – [フォーマット判定コードの例] ogaddsformat [2015/05/26 16:45] (現在) – [DDS のヘッダ構造] oga
行 62: 行 62:
     unsigned int    ArraySize;      // Texture Array を格納する場合に必要     unsigned int    ArraySize;      // Texture Array を格納する場合に必要
     unsigned int    MiscFlag2;      // 0     unsigned int    MiscFlag2;      // 0
 +};
 +enum {
 +    DDS10_DIMENSION_1D = 2,
 +    DDS10_DIMENSION_2D = 3,
 +    DDS10_DIMENSION_3D = 4,
 }; };
 </code> </code>
行 95: 行 100:
 ==== dwPitchOrLinearSize ==== ==== dwPitchOrLinearSize ====
  
-dwFlags に DDSD_PITCH または DDSD_LINEARSIZE が含まれている場合に有効になります。 +dwFlags に DDSD_PITCH または DDSD_LINEARSIZE が含まれている場合に有効になります。あまり重要なフィールドではありません。
-あまり重要なフィールドではありません。 +
-無くてもおそらく問題ありませんが、一部ツールでは参照している可能性があります。 +
-  +
-| DDSD_LINEARSIZE  | 最初の face の最初の miplevel 0 の画像の byte 数。圧縮テクスチャの場合こちら。 +
-| DDSD_PITCH       | 最初の miplevel 0 の画像の横 1列の byte 数。(dwWidth * dwRGBBitCount) >> 3 相当。非圧縮で BitMask を使った画像の場合はこちらが入る。    |+
  
 +| DDSD_LINEARSIZE  | 最初の face の最初の miplevel 0 の画像の byte 数。  |
 +| DDSD_PITCH       | 最初の miplevel 0 の画像の横 1列の byte 数。圧縮テクスチャの場合、block 単位の 1列分の byte サイズ。    |
  
 +
 +圧縮テクスチャの場合は pitch には 1列分の block サイズが入ります。
 +例えば 256x256 の DXT1 なら、横は 256/4 = 64 block となります。
 +DXT は 1block = 64bit なので pitch = 64block x 64bit / 8bit = 512byte です。
 +同様に 250x250 のような半端なサイズのテクスチャも、block 単位に切り上げて計算する必要があります。
 +( ( 250 + 3) >> 2) block x 64bit / 8bit = 504byte
 +
 +ただし、圧縮テクスチャの場合も結局 MipmapLevel 毎に同様の block 単位のアライメントサイズの再計算を行う必要があるので、実際の実装ではこのフィールドの値が必要になることがありません。
  
 ==== dwMipMapCount ==== ==== dwMipMapCount ====
行 111: 行 121:
  
 ただし dwFlags DDSD_MIPMAPCOUNT を正しく判定していないツールやライブラリが存在する可能性があるため、安全のために常に 1 以上の有効な値を入れて置くことをおすすめします。 ただし dwFlags DDSD_MIPMAPCOUNT を正しく判定していないツールやライブラリが存在する可能性があるため、安全のために常に 1 以上の有効な値を入れて置くことをおすすめします。
-また読み出す場合、DDSD_MIPMAPCOUNT が立っていたとしてもこのフィールドが 0 である可能性を考慮した方が良いでしょう。+また読み出す場合、DDSD_MIPMAPCOUNT が立っていたとしてもこのフィールドが 0 である可能性を考慮した方が良いでしょう。
  
 <code cpp> <code cpp>
行 376: 行 386:
 header.dwMipMapCount= 1; header.dwMipMapCount= 1;
 header10.ArraySize= 1; header10.ArraySize= 1;
 +header10.Dimension= DDS10_DIIMENSION_2D;
  
-if( ((width * height * bit_count) >> 3) != row_pitch ){+if( 非圧縮時 ){
     header.dwFlags|= DDSD_PITCH;     header.dwFlags|= DDSD_PITCH;
-    header.dwPitchOrLinearSize= row_pitch;+    header.dwPitchOrLinearSize= (width * bit_count) >> 3;
 }else{ }else{
     header.dwFlags|= DDSD_LINEARSIZE;     header.dwFlags|= DDSD_LINEARSIZE;
-    header.dwPitchOrLinearSize= (width height bit_count) >> 3;+    header.dwPitchOrLinearSize= (block_width block_height block_bit_count) >> 3;
 } }
  
行 406: 行 417:
     header.dwCaps2|= DDSCAPS2_VOLUME;     header.dwCaps2|= DDSCAPS2_VOLUME;
     header.dwDepth= depth;     header.dwDepth= depth;
 +    header10.Dimension= DDS10_DIMENSION_3D; 
 } }
  
行 417: 行 429:
 if( !isdx10 &&  BitMask 表現可能  ){ if( !isdx10 &&  BitMask 表現可能  ){
     header.dwPfFlags|= DDPF_RGB|DDPF_ALPHAPIXELS;     header.dwPfFlags|= DDPF_RGB|DDPF_ALPHAPIXELS;
-    header.dwRGBBitCount= ..+    header.dwRGBBitCount= bit_count;
     header.dwRBitMask= ..     header.dwRBitMask= ..
     header.dwGBitMask= ..     header.dwGBitMask= ..
行 439: 行 451:
 } }
 </code> </code>
- 
  
  
ddsformat.1432614158.txt.gz · 最終更新: 2015/05/26 13:22 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki