4
edits
m (Reverted edits by Antidote (talk) to last revision by [[User:imported>Darkszero|imported>Darkszero]]) Tag: Rollback |
(Surface display list size) |
||
Line 83: | Line 83: | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| | |u32 | ||
|1 | |||
|'''Display List Size and Normal Hint''' | |||
|The top bit contains an unused "Normal Hint" while the remaining bits are used to specify the display list size. | |||
| 1 | |||
| '''Display List Size''' | |||
| | |||
|- | |- | ||
| 0x14 | | 0x14 | ||
Line 143: | Line 137: | ||
Note that you'll need to check some settings on the material to read the primitive data properly; the material determines which vertex attributes are present. The material also determines whether the surface is using lightmaps; if it is, then the first UV coordinate will be read out of the short UV array instead of the float one. | Note that you'll need to check some settings on the material to read the primitive data properly; the material determines which vertex attributes are present. The material also determines whether the surface is using lightmaps; if it is, then the first UV coordinate will be read out of the short UV array instead of the float one. | ||
There is no primitive count value; you'll need to continue reading data until you hit the end of the display list. There are a couple values you can use for reference; either the surface's section size, or the surface's end offset. ' | There is no primitive count value; you'll need to continue reading data until you hit the end of the display list. There are a couple values you can use for reference; either the surface's section size, or the surface's end offset. It was originally believed that the display list size was incorrect in a very small number of cases, however it's since been determined that the display list size '''is''' accurate is actually a u32 with the top bit being used as a "Normal Hint", the name of the bit was determined from symbols, but it's actual use has not been determined. Masking the field with 0x7FFFFFFF gives you the correct display list size that works in all cases. | ||
There are 7 primitive types supported by GX, indicated in the upper 5 bits of the flag value. Note that the game only ever actually uses triangles, triangle strips, and triangle fans; however, all of these primitives are supported by GX and are therefore supported by the game, and so they could be used in custom model files. | There are 7 primitive types supported by GX, indicated in the upper 5 bits of the flag value. Note that the game only ever actually uses triangles, triangle strips, and triangle fans; however, all of these primitives are supported by GX and are therefore supported by the game, and so they could be used in custom model files. |