Difference between revisions of "FTEX (File Format)"

From MK8
Jump to navigation Jump to search
(Document unknown fields.)
(→‎Header (FTEX): Confirm array sizes, add enum names.)
Line 8: Line 8:
 
! Offset !! Size !! Description
 
! Offset !! Size !! Description
 
|-
 
|-
| 0x00 || 4 || '''File magic'''. Always ''FTEX'' in ASCII.
+
| 0x00 || 4 || '''File Magic'''. Always ''FTEX'' in ASCII.
 
|-
 
|-
| 0x04 || 4 || '''Dimension'''. Indicates the "shape" of a given surface or texture (see line 849 [http://pastebin.com/DCrP1w9x here]).
+
| 0x04 || 4 || '''Dimension'''. Maps to '''GX2SurfaceDim''' (line 849 [http://pastebin.com/DCrP1w9x here]). Indicates the "shape" of a given surface or texture.
 
|-
 
|-
 
| 0x08 || 4 || '''Texture Width'''. Width of the texture in pixels.
 
| 0x08 || 4 || '''Texture Width'''. Width of the texture in pixels.
Line 20: Line 20:
 
| 0x14 || 4 || '''Number of Mipmaps'''.
 
| 0x14 || 4 || '''Number of Mipmaps'''.
 
|-
 
|-
| 0x18 || 4 || '''Texture Format'''. Go to line 589 on [http://pastebin.com/DCrP1w9x this page] for explanation and format values.
+
| 0x18 || 4 || '''Texture Format'''. Maps to '''GX2SurfaceFormat''' (line 589 [http://pastebin.com/DCrP1w9x here] for explanation and format values).
 
|-
 
|-
| 0x1C || 4 || '''AA Mode'''. Indicates the AA mode (number of samples) for the surface (see line 865 [http://pastebin.com/DCrP1w9x here]).
+
| 0x1C || 4 || '''AA Mode'''. Maps to '''GX2AAMode''' (line 865 [http://pastebin.com/DCrP1w9x here]). Indicates the AA mode (number of samples) for the surface.
 
|-
 
|-
| 0x20 || 4 || '''Usage'''. Indicates how the given surface may be used (see line 823 [http://pastebin.com/DCrP1w9x here]).
+
| 0x20 || 4 || '''Usage'''. Maps to '''GX2SurfaceUse''' (line 823 [http://pastebin.com/DCrP1w9x here]). Indicates how the given surface may be used.
 
|-
 
|-
 
| 0x24 || 4 || '''Data Length'''. Length of texture data in bytes.
 
| 0x24 || 4 || '''Data Length'''. Length of texture data in bytes.
 
|-
 
|-
| 0x28 || 4 || '''Data Pointer'''.
+
| 0x28 || 4 || '''Data Pointer'''. Set at runtime.
 
|-
 
|-
 
| 0x2C || 4 || '''Mipmaps Data Length'''. Length of mipmaps data in bytes.
 
| 0x2C || 4 || '''Mipmaps Data Length'''. Length of mipmaps data in bytes.
 
|-
 
|-
| 0x30 || 4 || '''Mipmaps Pointer'''.
+
| 0x30 || 4 || '''Mipmaps Pointer'''. Set at runtime.
 
|-
 
|-
| 0x34 || 4 || '''Tile Mode'''. Indicates the desired tiling mode for the surface (see line 795 [http://pastebin.com/DCrP1w9x here]).
+
| 0x34 || 4 || '''Tile Mode'''. Maps to '''GX2TileMode''' (line 795 [http://pastebin.com/DCrP1w9x here]). Indicates the desired tiling mode for the surface.
 
|-
 
|-
 
| 0x38 || 4 || '''Swizzle Value'''.
 
| 0x38 || 4 || '''Swizzle Value'''.
Line 42: Line 42:
 
| 0x40 || 4 || '''Pitch'''.
 
| 0x40 || 4 || '''Pitch'''.
 
|-
 
|-
| 0x44 || 0x34 || '''Mipmap Offsets'''. An array of apparently 13 offsets for each mipmap.
+
| 0x44 || 0x34 || '''Mipmap Offsets'''. An array of 13 offsets for each mipmap.
 
|-
 
|-
 
| 0x78 || 4 || '''First Mipmap'''.
 
| 0x78 || 4 || '''First Mipmap'''.
Line 54: Line 54:
 
| 0x88 || 4 || '''GX2CompSel'''.
 
| 0x88 || 4 || '''GX2CompSel'''.
 
|-
 
|-
| 0x8C || 0x14 || '''Texture Registers''', array of apparently 5 unsigned integers with unknown purpose.
+
| 0x8C || 0x14 || '''Texture Registers'''. Array of 5 unsigned integers with unknown purpose.
 
|-
 
|-
| 0xA0 || 4 || '''Texture handle''', filled at runtime.
+
| 0xA0 || 4 || '''Texture Handle'''. Set at runtime.
 
|-
 
|-
| 0xA4 || 4 || '''Array length'''
+
| 0xA4 || 4 || '''Array Length''' (seems to be just a byte in MK8 files, with the remaining 3 bytes being padding?).
 
|-
 
|-
| 0xA8 || 4 || '''File name''' offset.
+
| 0xA8 || 4 || '''File Name''' offset.
 
|-
 
|-
| 0xAC || 4 || '''End of BFRES string table''' offset. Points to just after the last string in the string table. Originally pointed to a string being the file path of the file the FTEX data was created from, which has been removed in the released game.
+
| 0xAC || 4 || '''End of BFRES String Table''' offset. Points to just after the last string in the string table. Originally pointed to a string being the file path of the file the FTEX data was created from, which has been removed in the released game.
 
|-
 
|-
 
| 0xB0 || 4 || '''Data Offset'''. Offset to the texture data.
 
| 0xB0 || 4 || '''Data Offset'''. Offset to the texture data.
Line 68: Line 68:
 
| 0xB4 || 4 || '''Mipmap Offset'''. Offset to the mipmap texture data.
 
| 0xB4 || 4 || '''Mipmap Offset'''. Offset to the mipmap texture data.
 
|-
 
|-
| 0xB8 || 4 || '''[[#User Data|User data]] [[index group]]''' offset.
+
| 0xB8 || 4 || '''[[BFRES (File Format)#User Data|User Data]] [[Index Group]]''' offset.
 
|-
 
|-
| 0xBC || 2 || '''[[BFRES (File Format)#User Data|User data]] entry count'''.
+
| 0xBC || 2 || '''[[BFRES (File Format)#User Data|User Data]] Entry Count'''.
 
|-
 
|-
 
| 0xBE || 2 || '''Padding'''.
 
| 0xBE || 2 || '''Padding'''.

Revision as of 16:33, 28 May 2017

Under Construction
This article is not finished. Help improve it by adding accurate information or correcting grammar and spelling.

The FTEX (caFe TEXture) texture format is a format for textures which appears as a subfile of a BFRES file. It appears in the 1:st index group in a BFRES file. Unless otherwise noted, all offsets in the file are relative to themselves.

Header (FTEX)

An FTEX file begins with an 0xC0 byte header that starts with the file identifier, followed by info about the texture and mipmaps.

Offset Size Description
0x00 4 File Magic. Always FTEX in ASCII.
0x04 4 Dimension. Maps to GX2SurfaceDim (line 849 here). Indicates the "shape" of a given surface or texture.
0x08 4 Texture Width. Width of the texture in pixels.
0x0C 4 Texture Height. Height of the texture in pixels.
0x10 4 Depth.
0x14 4 Number of Mipmaps.
0x18 4 Texture Format. Maps to GX2SurfaceFormat (line 589 here for explanation and format values).
0x1C 4 AA Mode. Maps to GX2AAMode (line 865 here). Indicates the AA mode (number of samples) for the surface.
0x20 4 Usage. Maps to GX2SurfaceUse (line 823 here). Indicates how the given surface may be used.
0x24 4 Data Length. Length of texture data in bytes.
0x28 4 Data Pointer. Set at runtime.
0x2C 4 Mipmaps Data Length. Length of mipmaps data in bytes.
0x30 4 Mipmaps Pointer. Set at runtime.
0x34 4 Tile Mode. Maps to GX2TileMode (line 795 here). Indicates the desired tiling mode for the surface.
0x38 4 Swizzle Value.
0x3C 4 Alignment. Always 512 * bytes per pixel.
0x40 4 Pitch.
0x44 0x34 Mipmap Offsets. An array of 13 offsets for each mipmap.
0x78 4 First Mipmap.
0x7C 4 Number of Mipmaps (again).
0x80 4 First Slice. Always 0.
0x84 4 Number of Slices. Always 1.
0x88 4 GX2CompSel.
0x8C 0x14 Texture Registers. Array of 5 unsigned integers with unknown purpose.
0xA0 4 Texture Handle. Set at runtime.
0xA4 4 Array Length (seems to be just a byte in MK8 files, with the remaining 3 bytes being padding?).
0xA8 4 File Name offset.
0xAC 4 End of BFRES String Table offset. Points to just after the last string in the string table. Originally pointed to a string being the file path of the file the FTEX data was created from, which has been removed in the released game.
0xB0 4 Data Offset. Offset to the texture data.
0xB4 4 Mipmap Offset. Offset to the mipmap texture data.
0xB8 4 User Data Index Group offset.
0xBC 2 User Data Entry Count.
0xBE 2 Padding.
0xC0 End of FTEX header

Image Data

The image and mipmap data is not present after the header. It comes after the BFRES string table instead. This seems to be a caching optimization, since the CPU generally don't need to handle the image data. Instead it is sent directly to the GPU.