この節では、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_STRINGTOKEN_NAMEは可変長レコードである。tokenの後にはバイト数を指定するcount値が続く。countフィールドの後にnameフィールドが続く。count 長のASCII名がレコードの最後に来る。
フィールド 型 サイズ(バイト) 内容 token WORD 2 TOKEN_NAME count DWORD 4 バイト単位のnameフィールド長 name BYTE array Count ASCII名
TOKEN_INTEGERTOKEN_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_GUIDTOKEN_INTEGERは固定長レコードである。tokenの後には、必須の整数値が続く。
フィールド 型 サイズ(バイト) 内容 token WORD 2 TOKEN_INTEGER value DWORD 4 単一整数
TOKEN_INTEGER_LISTTOKEN_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_FLOAT_LISTTOKEN_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の後には、浮動小数点数または倍精度浮動小数点数の数を指定する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型のr、g、bの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つのメンバのr、g、bの値は、それぞれ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.