DirectXファイルバイナリフォーマット

この節では、DirectX 3.0のリリースで導入されたMicrosoft® DirectX®ファイルフォーマットのバイナリ版を詳述する。以下は、「DirectXファイルフォーマットアーキテクチャ」を理解した後に読むことが望ましい。

バイナリフォーマットは、テキストフォーマットのトークン化された形式である。トークンは、スタンドアローンでも、プリミティブデータレコードを伴っていても良い。スタンドアローントークンは、文法の構造を与え、レコード付随トークンは、必要なデータを供給する。

すべてのデータは、昇順のフォーマットで格納されることに注意する。

有効なバイナリデータストリームは、ヘッダと、それに続くテンプレートとデータオブジェクトの少なくとも1つから構成される。

この節では、バイナリファイルフォーマットの以下の部分を説明する。

さらに、テンプレートの例が「テンプレートの例」で提供されている。バイナリデータオブジェクトは「データの例」で示す。

ヘッダ

以下の定義は、バイナリヘッダの直接の読み書きを行う際に使用する必要がある。圧縮データストリームは、現在サポートされていないので、ここで詳述されていないことに注意する。

#define XOFFILE_FORMAT_MAGIC \
  ((long)'x' + ((long)'o' << 8) + ((long)'f' << 16) + ((long)' ' << 24))

#define XOFFILE_FORMAT_VERSION \
  ((long)'0' + ((long)'3' << 8) + ((long)'0' << 16) + ((long)'2' << 24))

#define XOFFILE_FORMAT_BINARY \
  ((long)'b' + ((long)'i' << 8) + ((long)'n' << 16) + ((long)' ' << 24))

#define XOFFILE_FORMAT_TEXT   \
  ((long)'t' + ((long)'x' << 8) + ((long)'t' << 16) + ((long)' ' << 24))

#define XOFFILE_FORMAT_COMPRESSED \
  ((long)'c' + ((long)'m' << 8) + ((long)'p' << 16) + ((long)' ' << 24))

#define XOFFILE_FORMAT_FLOAT_BITS_32 \
  ((long)'0' + ((long)'0' << 8) + ((long)'3' << 16) + ((long)'2' << 24))

#define XOFFILE_FORMAT_FLOAT_BITS_64 \
  ((long)'0' + ((long)'0' << 8) + ((long)'6' << 16) + ((long)'4' << 24))

トークン

トークンは、昇順のWORDとして書き込まれる。トークン値のリストが続く。リストは、レコード付随とスタンドアローントークンに分けられる。

レコード付随

#define TOKEN_NAME 1
#define TOKEN_STRING 2
#define TOKEN_INTEGER 3
#define TOKEN_GUID 5
#define TOKEN_INTEGER_LIST 6
#define TOKEN_FLOAT_LIST 7

スタンドアロン

#define TOKEN_OBRACE 10
#define TOKEN_CBRACE 11
#define TOKEN_OPAREN 12
#define TOKEN_CPAREN 13
#define TOKEN_OBRACKET 14
#define TOKEN_CBRACKET 15
#define TOKEN_OANGLE 16
#define TOKEN_CANGLE 17
#define TOKEN_DOT 18
#define TOKEN_COMMA 19
#define TOKEN_SEMICOLON 20
#define TOKEN_TEMPLATE 31
#define TOKEN_WORD 40
#define TOKEN_DWORD 41
#define TOKEN_FLOAT 42
#define TOKEN_DOUBLE 43
#define TOKEN_CHAR 44
#define TOKEN_UCHAR 45
#define TOKEN_SWORD 46
#define TOKEN_SDWORD 47
#define TOKEN_VOID 48
#define TOKEN_LPSTR 49
#define TOKEN_UNICODE 50
#define TOKEN_CSTRING 51
#define TOKEN_ARRAY 52

トークンレコード

この項は、それぞれのレコード付随トークンのレコードフォーマットを説明する。

TOKEN_NAME

TOKEN_NAMEは可変長レコードである。tokenの後にはバイト数を指定するcount値が続く。countフィールドの後にnameフィールドが続く。count 長のASCII名がレコードの最後に来る。
フィールド サイズ(バイト) 内容
token WORD 2 TOKEN_NAME
count DWORD 4 バイト単位のnameフィールド長
name BYTE array Count ASCII名

TOKEN_STRING

TOKEN_STRINGは可変長レコードである。tokenの後には、バイト数を指定するcount値が続く。countフィールドの後にstringフィールドが続く。count 長のASCII文字列が終端トークンの前に来る。terminatorの選択は、他の箇所で説明した構文の項目で決定される。
フィールド サイズ(バイト) 内容
token WORD 2 TOKEN_STRING
count DWORD 4 バイト単位のstringフィールド長
string BYTE array Count ASCII文字列
terminator DWORD 4 TOKEN_SEMICOLONまたはTOKEN_COMMA

TOKEN_INTEGER

TOKEN_INTEGERは固定長レコードである。tokenの後には、必須の整数値が続く。
フィールド サイズ(バイト) 内容
token WORD 2 TOKEN_INTEGER
value DWORD 4 単一整数

TOKEN_GUID

TOKEN_GUIDは固定長レコードである。tokenの後には、OSF DCE基準によって定義されている4つのデータフィールドが続く。
フィールド サイズ(バイト) 内容
token WORD 2 TOKEN_GUID
data1 DWORD 4 UUIDデータフィールド1
data2 WORD 2 UUIDデータフィールド2
data3 WORD 2 UUIDデータフィールド3
data4 BYTE array 8 UUIDデータフィールド4

TOKEN_INTEGER_LIST

TOKEN_INTEGER_LISTは可変長レコードである。tokenの後には、整数の数を指定するcount値が続く。countフィールドの後にはlistフィールドが続く。効率を上げるため、連続する整数リストは、単一のリストに結合する必要がある。
フィールド サイズ(バイト) 内容
token WORD 2 TOKEN_INTEGER_LIST
count DWORD 4 listフィールド内の整数の数
list DWORD array 4 x count 整数リスト

TOKEN_FLOAT_LIST

TOKEN_FLOAT_LISTは可変長レコードである。tokenの後には、浮動小数点数または倍精度浮動小数点数の数を指定するcount値が続き、countフィールドの値にはlistフィールドが続く。浮動小数点数値のサイズ(floatまたはdouble)は、ファイルヘッダ中のfloatサイズ値で決定される。効率を上げるため連続するTOKEN_FLOAT_LISTは、単一リストに結合する必要がある。
フィールド サイズ(バイト) 内容
token WORD 2 TOKEN_FLOAT_LIST
count DWORD 4 フィールド中の浮動小数点または倍精度浮動小数点数の数。
list float/double array 4×countまたは8×count 浮動小数点数または倍精度浮動小数点数のリスト

テンプレート

テンプレートの構文定義は、以下のとおりである。

template              : TOKEN_TEMPLATE name TOKEN_OBRACE
                            class_id
                            template_parts
                            TOKEN_CBRACE

template_parts        : template_members_part TOKEN_OBRACKET
                        template_option_info
                        TOKEN_CBRACKET
                      | template_members_list

template_members_part : /* 空 */
                      | template_members_list

template_option_info  : ellipsis
                      | template_option_list

template_members_list :    template_members
                      | template_members_list template_members

template_members      : primitive
                      | array
                      | template_reference

primitive             : primitive_type optional_name TOKEN_SEMICOLON

array                 : TOKEN_ARRAY array_data_type name dimension_list
                        TOKEN_SEMICOLON

template_reference    : name optional_name YT_SEMICOLON

primitive_type        : TOKEN_WORD
                      | TOKEN_DWORD
                      | TOKEN_FLOAT
                      | TOKEN_DOUBLE
                      | TOKEN_CHAR
                      | TOKEN_UCHAR
                      | TOKEN_SWORD
                      | TOKEN_SDWORD
                      | TOKEN_LPSTR
                      | TOKEN_UNICODE
                      | TOKEN_CSTRING

array_data_type       : primitive_type
                      | name

dimension_list        : dimension
                      | dimension_list dimension

dimension             : TOKEN_OBRACKET dimension_size TOKEN_CBRACKET

dimension_size        : TOKEN_INTEGER
                      | name

template_option_list  : template_option_part
                      | template_option_list template_option_part

template_option_part  : name optional_class_id

name                  : TOKEN_NAME

optional_name         : /* 空 */
                      | name

class_id              : TOKEN_GUID

optional_class_id     : /* 空 */
                      | class_id

ellipsis              : TOKEN_DOT TOKEN_DOT TOKEN_DOT

データ

データオブジェクトの構文定義は、以下のとおりである。

バイナリファイルのnumber_listデータとfloat_listデータには、TOKEN_COMMAとTOKEN_SEMICOLONは使用しない。string_listデータには、コンマとセミコロンを使用する。また、オプションのデータメンバには、data_referenceしか使用できない。

object                : identifier optional_name TOKEN_OBRACE
                            optional_class_id
                            data_parts_list
                            TOKEN_CBRACE
data_parts_list       : data_part
                      | data_parts_list data_part

data_part             : data_reference
                      | object
                      | number_list
                      | float_list
                      | string_list

number_list           : TOKEN_INTEGER_LIST

float_list            : TOKEN_FLOAT_LIST

string_list           : string_list_1 list_separator

string_list_1         : string
                      | string_list_1 list_separator string

list_separator        : comma
                      | semicolon

string                : TOKEN_STRING

identifier            : name
                      | primitive_type

data_reference        : TOKEN_OBRACE name optional_class_id TOKEN_CBRACE

テンプレートの例

2つのバイナリテンプレートの定義を以下に示す。データは、以下の例には示されていない昇順フォーマットで格納されることに注意する。

クローズドテンプレートのRGBは、UUID {55b6d780-37ec-11d0-ab39-0020af71e433}で識別され、それぞれ float型のrgbの3メンバを持つ。

TOKEN_TEMPLATE, TOKEN_NAME, 3, 'R', 'G', 'B', TOKEN_OBRACE,
TOKEN_GUID, 55b6d780, 37ec, 11d0, ab, 39, 00, 20, af, 71, e4, 33,
TOKEN_FLOAT, TOKEN_NAME, 1, 'r', TOKEN_SEMICOLON,
TOKEN_FLOAT, TOKEN_NAME, 1, 'g', TOKEN_SEMICOLON,
TOKEN_FLOAT, TOKEN_NAME, 1, 'b', TOKEN_SEMICOLON,
TOKEN_CBRACE

クローズドテンプレートのMatrix4x4は、UUID {55b6d781-37ec-11d0-ab39-0020af71e433}で識別され、それぞれ float型のmatrixという名前の2次元配列を1つメンバとして持つ。

TOKEN_TEMPLATE, TOKEN_NAME, 9, 'M', 'a', 't', 'r', 'i', 'x', '4', 'x', '4', TOKEN_OBRACE,
TOKEN_GUID, 55b6d781, 37ec, 11d0, ab, 39, 00, 20, af, 71, e4, 33,
TOKEN_ARRAY, TOKEN_FLOAT, TOKEN_NAME, 6, 'm', 'a', 't', 'r', 'i', 'x',
TOKEN_OBRACKET, TOKEN_INTEGER, 4, TOKEN_CBRACKET,
TOKEN_OBRACKET, TOKEN_INTEGER, 4, TOKEN_CBRACKET,
TOKEN_CBRACE

データの例

以下のバイナリデータオブジェクトは、前に定義したRGB テンプレートのインスタンスである。例のオブジェクトには、blueという名前が付けられ、その3つのメンバのrgbの値は、それぞれ0.0、0.0、1.0である。以下の例には示されていない昇順フォーマットで格納されることに注意する。

TOKEN_NAME, 3, 'R', 'G', 'B', TOKEN_NAME, 4, 'b', 'l', 'u', 'e', TOKEN_OBRACE,
TOKEN_FLOAT_LIST, 3, 0.0, 0.0, 1.0, TOKEN_CBRACE

トップに戻る トップに戻る
© 1999 Microsoft and/or its suppliers. All rights reserved. Terms of Use.