This page describes the GPU commands used for OpenGL arrays.
Command Sets
glDrawElements()
| Command Index
 | 
CommandID
 | 
Parameter
 | 
Description
 | 
| 0
 | 
0x00020229
 | 
u32, val<<8.
 | 
Unknown, val is 0 or 1.
 | 
| 1-2
 | 
0x00020253
 | 
Same as CmdID 0x00020229.
 | 
Unknown
 | 
| 3
 | 
0x0002025E
 | 
u32, val<<8.
 | 
This sets the GL rendering mode.
 | 
| 4
 | 
0x0004025E
 | 
Value 0
 | 
?
 | 
| 5
 | 
0x000F025F
 | 
Value 1
 | 
?
 | 
| 6
 | 
0x00010253
 | 
Value 0
 | 
?
 | 
| 7
 | 
0x000F0227
 | 
u32
 | 
This specifies the indices data-type, and the indices array address.
 | 
| 8
 | 
0x000F0228
 | 
u32
 | 
This specifies the number of elements in the array to use for rendering.
 | 
| 9
 | 
0x00010245
 | 
Value 0
 | 
?
 | 
| 10
 | 
0x000F022F
 | 
Value 1
 | 
?
 | 
| 11
 | 
0x00010245
 | 
Value 1
 | 
?
 | 
| 12
 | 
0x000F0231
 | 
Value 1
 | 
?
 | 
| 13
 | 
0x000F0111
 | 
Value 1
 | 
?
 | 
| 14
 | 
0x00020229
 | 
Value 0
 | 
?
 | 
| 15
 | 
0x00020253
 | 
Value 0
 | 
?
 | 
| 16
 | 
0x0002025E
 | 
Value 0
 | 
?
 | 
| 17
 | 
0x000C02BA
 | 
Value 0x7FFF0000
 | 
?
 | 
CmdID 0x826F0200
| Command Index
 | 
CommandID
 | 
Parameter
 | 
Description
 | 
| 0
 | 
0x826F0200
 | 
 | 
This sets the addresses for the GL arrays.
 | 
| 1
 | 
0x801F02BB
 | 
 | 
?
 | 
| 2
 | 
0x803F0232
 | 
 | 
Unknown, this command is used multiple times for specifying each parameter-buffer entry.
 | 
GL mode values for CmdID 0x0002025E
| Value
 | 
Description
 | 
| 0
 | 
?
 | 
| 1
 | 
GL_TRIANGLE_STRIP
 | 
| 2
 | 
GL_TRIANGLE_FAN
 | 
| 3
 | 
GL_TRIANGLES
 | 
| 4
 | 
Unknown, this seems to have the same effect as value 0.
 | 
Parameter value format for CmdID 0x000F0227
| Bit
 | 
Description
 | 
| 30-0
 | 
Indices array address, relative to VRAM physical address 0x18000000. Thus, when this relative address is 0x08XXXXXX, the array is located in FCRAM.
 | 
| 31
 | 
0 = indices data-type GL_UNSIGNED_BYTE, 1 = GL_UNSIGNED_SHORT.
 | 
Parameter structure for CmdID 0x826F0200
| Index Word
 | 
Description
 | 
| 0x0
 | 
Base physical address >> 3, normally located in VRAM.
 | 
| 0x1
 | 
Every 4 bits is used for specifying the array data-type and size for each entry.
 | 
| 0x2
 | 
Value is: (0xF0000000 + (val<<28)) | (((0xFF<<totalentries) & 0xFF)<<16).
 | 
| 0x3-0x26
 | 
12 entries, each entry is 3 words.
 | 
These parameters and the entries' parameters are set by gl*Pointer().
Entry structure
| Index Word
 | 
Description
 | 
| 0
 | 
Physical address, relative to the base address.
 | 
| 1
 | 
Entry index
 | 
| 2
 | 
Value is: 0x10000000 | (arraytype<<16).
 | 
When the entry is unused, the entry data is all-zero.
Entry array types
| Type
 | 
Description
 | 
| 0x2
 | 
?
 | 
| 0x3
 | 
Normals array
 | 
| 0x4
 | 
Texture coordinates array
 | 
| 0xC
 | 
Vertex array
 | 
| 0x10
 | 
Color array
 | 
Array data-type/size values
| Value
 | 
GL type
 | 
| 0x0 + ((size-1)*4)
 | 
GL_BYTE
 | 
| 0x1 + ((size-1)*4)
 | 
GL_UNSIGNED_BYTE
 | 
| 0x2 + ((size-1)*4)
 | 
GL_UNSIGNED_SHORT/GL_SHORT
 | 
| 0x3 + ((size-1)*4)
 | 
GL_FLOAT
 | 
Size is 1-4. Using GL_FLOAT with a texture coordinates array causes the GPU to hang?
Parameter structure for CmdID 0x801F02BB
| Index Word
 | 
Description
 | 
| 0-1
 | 
u64, every 4-bits is a value from some array.
 | 
Parameter structure for CmdID 0x803F0232
| Index Word
 | 
Description
 | 
| 0
 | 
Entry index + total CmdID 0x826F0200 parameter-buffer entries.
 | 
| 1
 | 
Unknown, usually value 0x3F000000.
 | 
| 2
 | 
Unknown, usually value 0.
 | 
| 3
 | 
Unknown, usually value 0.
 | 
Each parameter buffer for CmdID 0x803F0232 is an entry loaded from an array.