| 
				   | 
				
| (24 intermediate revisions by 7 users not shown) | 
| Line 1: | 
Line 1: | 
 | This page describes the [[GPU_Commands|GPU commands]] used for OpenGL arrays.
  |  | Merged into [[GPU/Programming_Guide]].  | 
 |    |  | 
 | ==== Command Sets ====
  |  | 
 |    |  | 
 | ===== glDrawElements() =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  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 =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  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 ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  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 ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  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 ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  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: <nowiki>(0xF0000000 + (val<<28)) | (((0xFF<<totalentries) & 0xFF)<<16)</nowiki>.
  |  | 
 | |-
  |  | 
 | | 0x3-0x26
  |  | 
 | | 12 entries, each entry is 3 words.
  |  | 
 | |}
  |  | 
 |    |  | 
 | These parameters and the entries' parameters are set by gl*Pointer().
  |  | 
 |    |  | 
 | ==== Entry structure ====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  Index Word
  |  | 
 | !  Description
  |  | 
 | |-
  |  | 
 | | 0
  |  | 
 | | Physical address, relative to the base address.
  |  | 
 | |-
  |  | 
 | | 1
  |  | 
 | | Entry index
  |  | 
 | |-
  |  | 
 | | 2
  |  | 
 | | Value is: <nowiki>0x10000000 | (arraytype<<16).</nowiki>
  |  | 
 | |}
  |  | 
 |    |  | 
 | When the entry is unused, the entry data is all-zero.
  |  | 
 |    |  | 
 | ===== Entry array types =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  Type
  |  | 
 | !  Description
  |  | 
 | |-
  |  | 
 | | 0x2
  |  | 
 | | ?
  |  | 
 | |-
  |  | 
 | | 0x3
  |  | 
 | | Normals array
  |  | 
 | |-
  |  | 
 | | 0x4
  |  | 
 | | Texture coordinates array
  |  | 
 | |-
  |  | 
 | | 0xC
  |  | 
 | | Vertex array
  |  | 
 | |-
  |  | 
 | | 0x10
  |  | 
 | | ?
  |  | 
 | |}
  |  | 
 |    |  | 
 | ===== Array data-type/size values =====
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  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.
  |  | 
 |    |  | 
 | === Parameter structure for CmdID 0x801F02BB ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  Index Word
  |  | 
 | !  Description
  |  | 
 | |-
  |  | 
 | | 0-1
  |  | 
 | | u64, every 4-bits is a value from some array.
  |  | 
 | |}
  |  | 
 |    |  | 
 | === Parameter structure for CmdID 0x803F0232 ===
  |  | 
 | {| class="wikitable" border="1"
  |  | 
 | !  Index Word
  |  | 
 | !  Description
  |  | 
 | |-
  |  | 
 | | 0
  |  | 
 | | Entry index + total CmdID 0x826F0200 parameter-buffer entries.
  |  | 
 | |-
  |  | 
 | | 1
  |  | 
 | | ?
  |  | 
 | |-
  |  | 
 | | 2
  |  | 
 | | ?
  |  | 
 | |-
  |  | 
 | | 3
  |  | 
 | | ?
  |  | 
 | |}
  |  | 
 |    |  | 
 | Each parameter buffer for CmdID 0x803F0232 is an entry loaded from an array.
  |  |