opengl:texturefileformat
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
opengl:texturefileformat [2015/07/04 02:47] – [KTX] oga | opengl:texturefileformat [2015/07/04 03:11] (現在) – [ASTC] oga | ||
---|---|---|---|
行 2: | 行 2: | ||
- | ^ file format | + | ^ file format |
- | ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ 3D ^ ::: | + | ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: ^ ::: |
- | | DDS (.dds) | + | | DDS (.dds) |
- | | KTX (.ktx) | + | | KTX (.ktx) |
- | | PVR (.pvr) | + | | PVR (.pvr) |
- | | PKM (.pkm) | + | | PKM (.pkm) |
- | | ASTC (.astc) | | + | | ASTC (.astc) | |
* (a) = Qualcomm(ATI) のコンバータが FourCC を使って格納。おそらく独自仕様。元は Direct3DM 向け。Array 不可 | * (a) = Qualcomm(ATI) のコンバータが FourCC を使って格納。おそらく独自仕様。元は Direct3DM 向け。Array 不可 | ||
* (b) = PVRTC 独自仕様。FourCC で格納。Array 不可 | * (b) = PVRTC 独自仕様。FourCC で格納。Array 不可 | ||
- | * (d) = ASTC の 3D BLOCK 圧縮のみ格納可能。 | + | * (d) = DXGI_FORMAT 表現可能なフォーマットのみ Array を格納可能。DX10 拡張ヘッダ必須。 |
- | * (e) = DXGI_FORMAT 表現可能なフォーマットのみ Array を格納可能。D3D10 拡張ヘッダ必須。 | + | * (e) = ETC1 のみ格納可能。 |
+ | * (f) = ASTC の 3D BLOCK 圧縮のみ格納可能。 | ||
行 30: | 行 32: | ||
DirectX7 以前の DirectDrawSurface 構造をそのままファイルに書き込んだもの。 | DirectX7 以前の DirectDrawSurface 構造をそのままファイルに書き込んだもの。 | ||
Realtime 3D のテクスチャ画像形式としては非常に扱いやすく、対応ツールも多いのでほぼ標準として使われています。 | Realtime 3D のテクスチャ画像形式としては非常に扱いやすく、対応ツールも多いのでほぼ標準として使われています。 | ||
+ | [[: | ||
* [[: | * [[: | ||
行 36: | 行 39: | ||
* [[: | * [[: | ||
- | ヘッダサイズは 128byte 固定。D3D10 情報が含まれる場合は 20byte 増えて 148byte 固定。可変長エリアがなく扱いが容易です。 | + | ヘッダサイズは 128byte 固定。DX10 情報が含まれる場合は 20byte 増えて 148byte 固定。可変長エリアがなく扱いが容易です。 |
littleendian 固定です。 | littleendian 固定です。 | ||
行 47: | 行 50: | ||
* FourCC で容易に新規フォーマット対応ができる | * FourCC で容易に新規フォーマット対応ができる | ||
* 古くから用いられており非常に多くのツールが対応している | * 古くから用いられており非常に多くのツールが対応している | ||
- | * ヘッダ長が固定で読み込みが容易 (D3D10 拡張ヘッダの導入によりこの利点は失われました) | + | * ヘッダ長が固定で読み込みが容易 (DX10 拡張ヘッダの導入によりヘッダサイズは必ずしも固定ではなく 2 種類に増えました) |
逆に言えばこれらの特徴を満たす画像フォーマットが他に存在しませんでした。 | 逆に言えばこれらの特徴を満たす画像フォーマットが他に存在しませんでした。 | ||
行 53: | 行 56: | ||
欠点は下記の通り。 | 欠点は下記の通り。 | ||
- | * D3D10 でフォーマットが拡張されたが古いツールやライブラリで読み込むことができない | + | * Direct3D 10 でフォーマットが拡張されたが古いツールやライブラリで読み込むことができない。逆に新しいツールでは DX10 拡張ヘッダがないと読み込めないものもある。 |
- | * OpenGL で追加された新しい圧縮テクスチャに対応できない | + | * OpenGL で追加された新しい圧縮テクスチャに対応できない。 |
* ヘッダ構造がゆるく冗長性を含んでいるため、ツールによってヘッダ情報にゆらぎがある。ツールによっては読み込めないフォーマットあり。 | * ヘッダ構造がゆるく冗長性を含んでいるため、ツールによってヘッダ情報にゆらぎがある。ツールによっては読み込めないフォーマットあり。 | ||
- | * DXGI_FORMAT で表現できないフォーマットは | + | * DXGI_FORMAT で表現できないフォーマットは |
行 120: | 行 123: | ||
</ | </ | ||
+ | |||
+ | <code cpp> | ||
+ | enum { | ||
+ | KTX_HEADER_MAGIC0 | ||
+ | KTX_HEADER_MAGIC1 | ||
+ | KTX_HEADER_MAGIC2 | ||
+ | KTX_HEADER_ENDIAN | ||
+ | }; | ||
+ | |||
+ | struct T_KTXHEADER { // 64byte | ||
+ | UI32 Identifier[3]; | ||
+ | UI32 endianness; | ||
+ | UI32 glType; | ||
+ | UI32 glTypeSize; | ||
+ | UI32 glFormat; | ||
+ | UI32 glInternalFormat; | ||
+ | UI32 glBaseInternalFormat; | ||
+ | UI32 pixelWidth; | ||
+ | UI32 pixelHeight; | ||
+ | UI32 pixelDepth; | ||
+ | UI32 numberOfArrayElements; | ||
+ | UI32 numberOfFaces; | ||
+ | UI32 numberOfMipmapLevels; | ||
+ | UI32 bytesOfKeyValueData; | ||
+ | public: | ||
+ | bool IsCompressed() const | ||
+ | { | ||
+ | return | ||
+ | } | ||
+ | }; | ||
+ | </ | ||
行 141: | 行 175: | ||
* PVRTC-2 対応 | * PVRTC-2 対応 | ||
* データ並びが KTX 順 | * データ並びが KTX 順 | ||
+ | |||
+ | <code cpp> | ||
+ | struct T_PVR3HEADER { // 13x4 = 52 | ||
+ | unsigned int Version; | ||
+ | unsigned int Flags; | ||
+ | unsigned int PixelFormat[2]; | ||
+ | unsigned int ColorSpace; | ||
+ | unsigned int ChannelType; | ||
+ | unsigned int Height; | ||
+ | unsigned int Width; | ||
+ | unsigned int Depth; | ||
+ | unsigned int Surfaces; | ||
+ | unsigned int Faces; | ||
+ | unsigned int MipMapCount; | ||
+ | unsigned int MetaDataSize; | ||
+ | }; | ||
+ | </ | ||
< | < | ||
行 152: | 行 203: | ||
* PVRTC-2 非対応 | * PVRTC-2 非対応 | ||
* データ並びが DDS 順 | * データ並びが DDS 順 | ||
+ | |||
+ | |||
< | < | ||
( ( ( width * height ) * mip ) * [cube_face or volume_depth] ) | ( ( ( width * height ) * mip ) * [cube_face or volume_depth] ) | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code cpp> | ||
+ | struct T_PVR2HEADER { | ||
+ | unsigned int hsize; | ||
+ | unsigned int height; | ||
+ | unsigned int width; | ||
+ | unsigned int miplevel; | ||
+ | unsigned int tformat; | ||
+ | unsigned int datasize; | ||
+ | unsigned int bpp; // bpp | ||
+ | unsigned int redmask; | ||
+ | unsigned int greenmask; | ||
+ | unsigned int bluemask; | ||
+ | unsigned int alphamask; | ||
+ | unsigned int magic; | ||
+ | unsigned int depth; | ||
+ | }; | ||
</ | </ | ||
行 178: | 行 250: | ||
< | < | ||
- | version 1.0 | + | version 1.0 |
type: 0=ETC1-RGB, 1=ETC1-RGBA, | type: 0=ETC1-RGB, 1=ETC1-RGBA, | ||
- | version 2.0 | + | version 2.0 |
type: 0=ETC1_RGB, 1=ETC2_RGB, 2=ETC2_RGBA_OLD, | type: 0=ETC1_RGB, 1=ETC2_RGB, 2=ETC2_RGBA_OLD, | ||
</ | </ | ||
行 211: | 行 283: | ||
+ | |||
+ | ===== 更新 ===== | ||
+ | |||
+ | * 2015/07/04 : 表を更新、ASTC format 追加、ktx, | ||
opengl/texturefileformat.txt · 最終更新: 2015/07/04 03:11 by oga