Difference between revisions of "Nintendo OpenGL"

From 3dbrew
Jump to navigation Jump to search
(Created page with "This page's goal is to describe parts of Nintendo's OpenGL implementation for the 3DS as we reverse engineer it to better understand how to use the PICA200. == Description == T...")
 
Line 4: Line 4:
  
 
The PICA200 is an opengl ES 1.1 compliant GPU manufactured by DMP. It comes loaded with a number of extensions that make it similar to an openGL ES 2.0 compliant GPU (ability to run programmable vertex/geometry shaders, for instance). Because of this, Nintendo wrapped GPU access into an openGL ES 2.0 implementation with some limitations. As the fragment stage of the pipeline is non-programmable, Nintendo instead gives developers the ability to configure a number of fragment-related values through glGetUniformLocation and glSetUniform. See below for the full list.
 
The PICA200 is an opengl ES 1.1 compliant GPU manufactured by DMP. It comes loaded with a number of extensions that make it similar to an openGL ES 2.0 compliant GPU (ability to run programmable vertex/geometry shaders, for instance). Because of this, Nintendo wrapped GPU access into an openGL ES 2.0 implementation with some limitations. As the fragment stage of the pipeline is non-programmable, Nintendo instead gives developers the ability to configure a number of fragment-related values through glGetUniformLocation and glSetUniform. See below for the full list.
 +
 +
== Shader program structure ==
 +
 +
When uniform values are set, they are attached to the current shader program and stored into the corresponding shader program structure.
 +
 +
{| class="wikitable" border="1"
 +
! Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x000
 +
| 0x04
 +
| Value 0x0 ?
 +
|-
 +
| 0x004
 +
| 0x04
 +
| Program ID
 +
|-
 +
| 0x008
 +
| 0x04
 +
| Value -1 ?
 +
|-
 +
| 0x01C
 +
| 0x04
 +
| Pointer to program-specific uniform table
 +
|-
 +
| 0x020
 +
| 0x04
 +
| Total number of uniforms for program
 +
|-
 +
| 0x028
 +
| 0x04
 +
| Number of program-specific uniforms
 +
|-
 +
| 0x64C
 +
| 0x04
 +
| Value for GPU register 0x0104
 +
|-
 +
| 0x7C0
 +
| 0x04
 +
| Bitfield containing dmp_FragmentLightSource[n].shadowed values
 +
|-
 +
| 0x7D8
 +
| 0x04
 +
| Bitfield containing dmp_FragmentLightSource[n].geomFactor0 / dmp_FragmentLightSource[n].geomFactor1 / dmp_FragmentLightSource[n].twoSideDiffuse values
 +
|-
 +
| 0xA20
 +
| 0x70*8
 +
| Table of structs for 8 dmp_FragmentLightSource
 +
|}
 +
 +
  
 
== Fragment "uniform" list ==
 
== Fragment "uniform" list ==

Revision as of 21:24, 10 November 2014

This page's goal is to describe parts of Nintendo's OpenGL implementation for the 3DS as we reverse engineer it to better understand how to use the PICA200.

Description

The PICA200 is an opengl ES 1.1 compliant GPU manufactured by DMP. It comes loaded with a number of extensions that make it similar to an openGL ES 2.0 compliant GPU (ability to run programmable vertex/geometry shaders, for instance). Because of this, Nintendo wrapped GPU access into an openGL ES 2.0 implementation with some limitations. As the fragment stage of the pipeline is non-programmable, Nintendo instead gives developers the ability to configure a number of fragment-related values through glGetUniformLocation and glSetUniform. See below for the full list.

Shader program structure

When uniform values are set, they are attached to the current shader program and stored into the corresponding shader program structure.

Offset Size Description
0x000 0x04 Value 0x0 ?
0x004 0x04 Program ID
0x008 0x04 Value -1 ?
0x01C 0x04 Pointer to program-specific uniform table
0x020 0x04 Total number of uniforms for program
0x028 0x04 Number of program-specific uniforms
0x64C 0x04 Value for GPU register 0x0104
0x7C0 0x04 Bitfield containing dmp_FragmentLightSource[n].shadowed values
0x7D8 0x04 Bitfield containing dmp_FragmentLightSource[n].geomFactor0 / dmp_FragmentLightSource[n].geomFactor1 / dmp_FragmentLightSource[n].twoSideDiffuse values
0xA20 0x70*8 Table of structs for 8 dmp_FragmentLightSource


Fragment "uniform" list

Uniform ID Type Name
0x0 GL_BOOL dmp_Texture[0].perspectiveShadow
0x1 GL_FLOAT dmp_Texture[0].shadowZBias
0x2 GL_FLOAT dmp_Texture[0].shadowZScale
0x3 GL_INT dmp_Texture[0].samplerType
0x4 GL_INT dmp_Texture[1].samplerType
0x5 GL_INT dmp_Texture[2].samplerType
0x6 GL_INT dmp_Texture[3].samplerType
0x7 GL_INT dmp_Texture[2].texcoord
0x8 GL_INT dmp_Texture[3].texcoord
0x9 GL_INT dmp_Texture[3].ptRgbMap
0xA GL_INT dmp_Texture[3].ptAlphaMap
0xB GL_BOOL dmp_Texture[3].ptAlphaSeparate
0xC GL_INT dmp_Texture[3].ptClampU
0xD GL_INT dmp_Texture[3].ptClampV
0xE GL_INT dmp_Texture[3].ptShiftU
0xF GL_INT dmp_Texture[3].ptShiftV
0x10 GL_INT dmp_Texture[3].ptMinFilter
0x11 GL_INT dmp_Texture[3].ptTexWidth
0x12 GL_INT dmp_Texture[3].ptTexOffset
0x13 GL_FLOAT dmp_Texture[3].ptTexBias
0x14 GL_BOOL dmp_Texture[3].ptNoiseEnable
0x15 GL_FLOAT_VEC3 dmp_Texture[3].ptNoiseU
0x16 GL_FLOAT_VEC3 dmp_Texture[3].ptNoiseV
0x17 GL_SAMPLER_1D dmp_Texture[3].ptSamplerRgbMap
0x18 GL_SAMPLER_1D dmp_Texture[3].ptSamplerAlphaMap
0x19 GL_SAMPLER_1D dmp_Texture[3].ptSamplerNoiseMap
0x1A GL_SAMPLER_1D dmp_Texture[3].ptSamplerR
0x1B GL_SAMPLER_1D dmp_Texture[3].ptSamplerG
0x1C GL_SAMPLER_1D dmp_Texture[3].ptSamplerB
0x1D GL_SAMPLER_1D dmp_Texture[3].ptSamplerA
0x1E GL_INT dmp_FragOperation.mode
0x1F GL_FLOAT dmp_FragOperation.penumbraScale
0x20 GL_FLOAT dmp_FragOperation.penumbraBias
0x21 GL_FLOAT dmp_FragOperation.wScale
0x22 GL_BOOL dmp_FragOperation.enableClippingPlane
0x23 GL_FLOAT_VEC4 dmp_FragOperation.clippingPlane
0x24 GL_BOOL dmp_FragOperation.enableAlphaTest
0x25 GL_INT dmp_FragOperation.alphaTestFunc
0x26 GL_FLOAT dmp_FragOperation.alphaRefValue
0x27 GL_FLOAT_VEC3 dmp_Gas.lightXY
0x28 GL_FLOAT_VEC4 dmp_Gas.lightZ
0x29 GL_FLOAT dmp_Gas.deltaZ
0x2A GL_FLOAT dmp_Gas.accMax
0x2B GL_BOOL dmp_Gas.autoAcc
0x2C GL_FLOAT dmp_Gas.attenuation
0x2D GL_INT dmp_Gas.colorLutInput
0x2E GL_INT dmp_Gas.shadingDensitySrc
0x2F GL_SAMPLER_1D dmp_Gas.samplerTR
0x30 GL_SAMPLER_1D dmp_Gas.samplerTG
0x31 GL_SAMPLER_1D dmp_Gas.samplerTB
0x32 GL_BOOL dmp_FragmentLighting.enabled
0x33 GL_FLOAT_VEC4 dmp_FragmentLighting.ambient
0x34 GL_FLOAT_VEC4 dmp_FragmentMaterial.emission
0x35 GL_FLOAT_VEC4 dmp_FragmentMaterial.ambient
0x36 GL_FLOAT_VEC4 dmp_FragmentMaterial.diffuse
0x37 GL_FLOAT_VEC4 dmp_FragmentMaterial.specular0
0x38 GL_FLOAT_VEC4 dmp_FragmentMaterial.specular1
0x39 GL_BOOL dmp_FragmentLightSource[0].enabled
0x3A GL_BOOL dmp_FragmentLightSource[1].enabled
0x3B GL_BOOL dmp_FragmentLightSource[2].enabled
0x3C GL_BOOL dmp_FragmentLightSource[3].enabled
0x3D GL_BOOL dmp_FragmentLightSource[4].enabled
0x3E GL_BOOL dmp_FragmentLightSource[5].enabled
0x3F GL_BOOL dmp_FragmentLightSource[6].enabled
0x40 GL_BOOL dmp_FragmentLightSource[7].enabled
0x41 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].ambient
0x42 GL_FLOAT_VEC4 dmp_FragmentLightSource[1].ambient
0x43 GL_FLOAT_VEC4 dmp_FragmentLightSource[2].ambient
0x44 GL_FLOAT_VEC4 dmp_FragmentLightSource[3].ambient
0x45 GL_FLOAT_VEC4 dmp_FragmentLightSource[4].ambient
0x46 GL_FLOAT_VEC4 dmp_FragmentLightSource[5].ambient
0x47 GL_FLOAT_VEC4 dmp_FragmentLightSource[6].ambient
0x48 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].ambient
0x49 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].diffuse
0x4A GL_FLOAT_VEC4 dmp_FragmentLightSource[1].diffuse
0x4B GL_FLOAT_VEC4 dmp_FragmentLightSource[2].diffuse
0x4C GL_FLOAT_VEC4 dmp_FragmentLightSource[3].diffuse
0x4D GL_FLOAT_VEC4 dmp_FragmentLightSource[4].diffuse
0x4E GL_FLOAT_VEC4 dmp_FragmentLightSource[5].diffuse
0x4F GL_FLOAT_VEC4 dmp_FragmentLightSource[6].diffuse
0x50 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].diffuse
0x51 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].specular0
0x52 GL_FLOAT_VEC4 dmp_FragmentLightSource[1].specular0
0x53 GL_FLOAT_VEC4 dmp_FragmentLightSource[2].specular0
0x54 GL_FLOAT_VEC4 dmp_FragmentLightSource[3].specular0
0x55 GL_FLOAT_VEC4 dmp_FragmentLightSource[4].specular0
0x56 GL_FLOAT_VEC4 dmp_FragmentLightSource[5].specular0
0x57 GL_FLOAT_VEC4 dmp_FragmentLightSource[6].specular0
0x58 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].specular0
0x59 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].specular1
0x5A GL_FLOAT_VEC4 dmp_FragmentLightSource[1].specular1
0x5B GL_FLOAT_VEC4 dmp_FragmentLightSource[2].specular1
0x5C GL_FLOAT_VEC4 dmp_FragmentLightSource[3].specular1
0x5D GL_FLOAT_VEC4 dmp_FragmentLightSource[4].specular1
0x5E GL_FLOAT_VEC4 dmp_FragmentLightSource[5].specular1
0x5F GL_FLOAT_VEC4 dmp_FragmentLightSource[6].specular1
0x60 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].specular1
0x61 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].position
0x62 GL_FLOAT_VEC4 dmp_FragmentLightSource[1].position
0x63 GL_FLOAT_VEC4 dmp_FragmentLightSource[2].position
0x64 GL_FLOAT_VEC4 dmp_FragmentLightSource[3].position
0x65 GL_FLOAT_VEC4 dmp_FragmentLightSource[4].position
0x66 GL_FLOAT_VEC4 dmp_FragmentLightSource[5].position
0x67 GL_FLOAT_VEC4 dmp_FragmentLightSource[6].position
0x68 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].position
0x69 GL_FLOAT_VEC3 dmp_FragmentLightSource[0].spotDirection
0x6A GL_FLOAT_VEC3 dmp_FragmentLightSource[1].spotDirection
0x6B GL_FLOAT_VEC3 dmp_FragmentLightSource[2].spotDirection
0x6C GL_FLOAT_VEC3 dmp_FragmentLightSource[3].spotDirection
0x6D GL_FLOAT_VEC3 dmp_FragmentLightSource[4].spotDirection
0x6E GL_FLOAT_VEC3 dmp_FragmentLightSource[5].spotDirection
0x6F GL_FLOAT_VEC3 dmp_FragmentLightSource[6].spotDirection
0x70 GL_FLOAT_VEC3 dmp_FragmentLightSource[7].spotDirection
0x71 GL_BOOL dmp_FragmentLightSource[0].shadowed
0x72 GL_BOOL dmp_FragmentLightSource[1].shadowed
0x73 GL_BOOL dmp_FragmentLightSource[2].shadowed
0x74 GL_BOOL dmp_FragmentLightSource[3].shadowed
0x75 GL_BOOL dmp_FragmentLightSource[4].shadowed
0x76 GL_BOOL dmp_FragmentLightSource[5].shadowed
0x77 GL_BOOL dmp_FragmentLightSource[6].shadowed
0x78 GL_BOOL dmp_FragmentLightSource[7].shadowed
0x79 GL_BOOL dmp_FragmentLightSource[0].geomFactor0
0x7A GL_BOOL dmp_FragmentLightSource[1].geomFactor0
0x7B GL_BOOL dmp_FragmentLightSource[2].geomFactor0
0x7C GL_BOOL dmp_FragmentLightSource[3].geomFactor0
0x7D GL_BOOL dmp_FragmentLightSource[4].geomFactor0
0x7E GL_BOOL dmp_FragmentLightSource[5].geomFactor0
0x7F GL_BOOL dmp_FragmentLightSource[6].geomFactor0
0x80 GL_BOOL dmp_FragmentLightSource[7].geomFactor0
0x81 GL_BOOL dmp_FragmentLightSource[0].geomFactor1
0x82 GL_BOOL dmp_FragmentLightSource[1].geomFactor1
0x83 GL_BOOL dmp_FragmentLightSource[2].geomFactor1
0x84 GL_BOOL dmp_FragmentLightSource[3].geomFactor1
0x85 GL_BOOL dmp_FragmentLightSource[4].geomFactor1
0x86 GL_BOOL dmp_FragmentLightSource[5].geomFactor1
0x87 GL_BOOL dmp_FragmentLightSource[6].geomFactor1
0x88 GL_BOOL dmp_FragmentLightSource[7].geomFactor1
0x89 GL_BOOL dmp_FragmentLightSource[0].twoSideDiffuse
0x8A GL_BOOL dmp_FragmentLightSource[1].twoSideDiffuse
0x8B GL_BOOL dmp_FragmentLightSource[2].twoSideDiffuse
0x8C GL_BOOL dmp_FragmentLightSource[3].twoSideDiffuse
0x8D GL_BOOL dmp_FragmentLightSource[4].twoSideDiffuse
0x8E GL_BOOL dmp_FragmentLightSource[5].twoSideDiffuse
0x8F GL_BOOL dmp_FragmentLightSource[6].twoSideDiffuse
0x90 GL_BOOL dmp_FragmentLightSource[7].twoSideDiffuse
0x91 GL_SAMPLER_1D dmp_FragmentLightSource[0].samplerSP
0x92 GL_SAMPLER_1D dmp_FragmentLightSource[1].samplerSP
0x93 GL_SAMPLER_1D dmp_FragmentLightSource[2].samplerSP
0x94 GL_SAMPLER_1D dmp_FragmentLightSource[3].samplerSP
0x95 GL_SAMPLER_1D dmp_FragmentLightSource[4].samplerSP
0x96 GL_SAMPLER_1D dmp_FragmentLightSource[5].samplerSP
0x97 GL_SAMPLER_1D dmp_FragmentLightSource[6].samplerSP
0x98 GL_SAMPLER_1D dmp_FragmentLightSource[7].samplerSP
0x99 GL_BOOL dmp_FragmentLightSource[0].spotEnabled
0x9A GL_BOOL dmp_FragmentLightSource[1].spotEnabled
0x9B GL_BOOL dmp_FragmentLightSource[2].spotEnabled
0x9C GL_BOOL dmp_FragmentLightSource[3].spotEnabled
0x9D GL_BOOL dmp_FragmentLightSource[4].spotEnabled
0x9E GL_BOOL dmp_FragmentLightSource[5].spotEnabled
0x9F GL_BOOL dmp_FragmentLightSource[6].spotEnabled
0xA0 GL_BOOL dmp_FragmentLightSource[7].spotEnabled
0xA1 GL_FLOAT dmp_FragmentLightSource[0].distanceAttenuationBias
0xA2 GL_FLOAT dmp_FragmentLightSource[1].distanceAttenuationBias
0xA3 GL_FLOAT dmp_FragmentLightSource[2].distanceAttenuationBias
0xA4 GL_FLOAT dmp_FragmentLightSource[3].distanceAttenuationBias
0xA5 GL_FLOAT dmp_FragmentLightSource[4].distanceAttenuationBias
0xA6 GL_FLOAT dmp_FragmentLightSource[5].distanceAttenuationBias
0xA7 GL_FLOAT dmp_FragmentLightSource[6].distanceAttenuationBias
0xA8 GL_FLOAT dmp_FragmentLightSource[7].distanceAttenuationBias
0xA9 GL_FLOAT dmp_FragmentLightSource[0].distanceAttenuationScale
0xAA GL_FLOAT dmp_FragmentLightSource[1].distanceAttenuationScale
0xAB GL_FLOAT dmp_FragmentLightSource[2].distanceAttenuationScale
0xAC GL_FLOAT dmp_FragmentLightSource[3].distanceAttenuationScale
0xAD GL_FLOAT dmp_FragmentLightSource[4].distanceAttenuationScale
0xAE GL_FLOAT dmp_FragmentLightSource[5].distanceAttenuationScale
0xAF GL_FLOAT dmp_FragmentLightSource[6].distanceAttenuationScale
0xB0 GL_FLOAT dmp_FragmentLightSource[7].distanceAttenuationScale
0xB1 GL_BOOL dmp_FragmentLightSource[0].distanceAttenuationEnabled
0xB2 GL_BOOL dmp_FragmentLightSource[1].distanceAttenuationEnabled
0xB3 GL_BOOL dmp_FragmentLightSource[2].distanceAttenuationEnabled
0xB4 GL_BOOL dmp_FragmentLightSource[3].distanceAttenuationEnabled
0xB5 GL_BOOL dmp_FragmentLightSource[4].distanceAttenuationEnabled
0xB6 GL_BOOL dmp_FragmentLightSource[5].distanceAttenuationEnabled
0xB7 GL_BOOL dmp_FragmentLightSource[6].distanceAttenuationEnabled
0xB8 GL_BOOL dmp_FragmentLightSource[7].distanceAttenuationEnabled
0xB9 GL_SAMPLER_1D dmp_FragmentLightSource[0].samplerDA
0xBA GL_SAMPLER_1D dmp_FragmentLightSource[1].samplerDA
0xBB GL_SAMPLER_1D dmp_FragmentLightSource[2].samplerDA
0xBC GL_SAMPLER_1D dmp_FragmentLightSource[3].samplerDA
0xBD GL_SAMPLER_1D dmp_FragmentLightSource[4].samplerDA
0xBE GL_SAMPLER_1D dmp_FragmentLightSource[5].samplerDA
0xBF GL_SAMPLER_1D dmp_FragmentLightSource[6].samplerDA
0xC0 GL_SAMPLER_1D dmp_FragmentLightSource[7].samplerDA
0xC1 GL_BOOL dmp_LightEnv.absLutInputD0
0xC2 GL_BOOL dmp_LightEnv.absLutInputD1
0xC3 GL_BOOL dmp_LightEnv.absLutInputSP
0xC4 GL_BOOL dmp_LightEnv.absLutInputFR
0xC5 GL_BOOL dmp_LightEnv.absLutInputRB
0xC6 GL_BOOL dmp_LightEnv.absLutInputRG
0xC7 GL_BOOL dmp_LightEnv.absLutInputRR
0xC8 GL_INT dmp_LightEnv.lutInputD0
0xC9 GL_INT dmp_LightEnv.lutInputD1
0xCA GL_INT dmp_LightEnv.lutInputSP
0xCB GL_INT dmp_LightEnv.lutInputFR
0xCC GL_INT dmp_LightEnv.lutInputRB
0xCD GL_INT dmp_LightEnv.lutInputRG
0xCE GL_INT dmp_LightEnv.lutInputRR
0xCF GL_FLOAT dmp_LightEnv.lutScaleD0
0xD0 GL_FLOAT dmp_LightEnv.lutScaleD1
0xD1 GL_FLOAT dmp_LightEnv.lutScaleSP
0xD2 GL_FLOAT dmp_LightEnv.lutScaleFR
0xD3 GL_FLOAT dmp_LightEnv.lutScaleRB
0xD4 GL_FLOAT dmp_LightEnv.lutScaleRG
0xD5 GL_FLOAT dmp_LightEnv.lutScaleRR
0xD6 GL_SAMPLER_1D dmp_FragmentMaterial.samplerD0
0xD7 GL_SAMPLER_1D dmp_FragmentMaterial.samplerD1
0xD8 GL_SAMPLER_1D dmp_FragmentMaterial.samplerFR
0xD9 GL_SAMPLER_1D dmp_FragmentMaterial.samplerRB
0xDA GL_SAMPLER_1D dmp_FragmentMaterial.samplerRG
0xDB GL_SAMPLER_1D dmp_FragmentMaterial.samplerRR
0xDC GL_INT dmp_LightEnv.shadowSelector
0xDD GL_INT dmp_LightEnv.bumpSelector
0xDE GL_INT dmp_LightEnv.bumpMode
0xDF GL_BOOL dmp_LightEnv.bumpRenorm
0xE0 GL_INT dmp_LightEnv.config
0xE1 GL_BOOL dmp_LightEnv.invertShadow
0xE2 GL_BOOL dmp_LightEnv.shadowPrimary
0xE3 GL_BOOL dmp_LightEnv.shadowSecondary
0xE4 GL_BOOL dmp_LightEnv.shadowAlpha
0xE5 GL_INT dmp_LightEnv.fresnelSelector
0xE6 GL_BOOL dmp_LightEnv.clampHighlights
0xE7 GL_BOOL dmp_LightEnv.lutEnabledD0
0xE8 GL_BOOL dmp_LightEnv.lutEnabledD1
0xE9 GL_BOOL dmp_LightEnv.lutEnabledRefl
0xEA GL_INT dmp_TexEnv[0].combineRgb
0xEB GL_INT dmp_TexEnv[1].combineRgb
0xEC GL_INT dmp_TexEnv[2].combineRgb
0xED GL_INT dmp_TexEnv[3].combineRgb
0xEE GL_INT dmp_TexEnv[4].combineRgb
0xEF GL_INT dmp_TexEnv[5].combineRgb
0xF0 GL_INT dmp_TexEnv[0].combineAlpha
0xF1 GL_INT dmp_TexEnv[1].combineAlpha
0xF2 GL_INT dmp_TexEnv[2].combineAlpha
0xF3 GL_INT dmp_TexEnv[3].combineAlpha
0xF4 GL_INT dmp_TexEnv[4].combineAlpha
0xF5 GL_INT dmp_TexEnv[5].combineAlpha
0xF6 GL_INT_VEC3 dmp_TexEnv[0].srcRgb
0xF7 GL_INT_VEC3 dmp_TexEnv[1].srcRgb
0xF8 GL_INT_VEC3 dmp_TexEnv[2].srcRgb
0xF9 GL_INT_VEC3 dmp_TexEnv[3].srcRgb
0xFA GL_INT_VEC3 dmp_TexEnv[4].srcRgb
0xFB GL_INT_VEC3 dmp_TexEnv[5].srcRgb
0xFC GL_INT_VEC3 dmp_TexEnv[0].srcAlpha
0xFD GL_INT_VEC3 dmp_TexEnv[1].srcAlpha
0xFE GL_INT_VEC3 dmp_TexEnv[2].srcAlpha
0xFF GL_INT_VEC3 dmp_TexEnv[3].srcAlpha
0x100 GL_INT_VEC3 dmp_TexEnv[4].srcAlpha
0x101 GL_INT_VEC3 dmp_TexEnv[5].srcAlpha
0x102 GL_INT_VEC3 dmp_TexEnv[0].operandRgb
0x103 GL_INT_VEC3 dmp_TexEnv[1].operandRgb
0x104 GL_INT_VEC3 dmp_TexEnv[2].operandRgb
0x105 GL_INT_VEC3 dmp_TexEnv[3].operandRgb
0x106 GL_INT_VEC3 dmp_TexEnv[4].operandRgb
0x107 GL_INT_VEC3 dmp_TexEnv[5].operandRgb
0x108 GL_INT_VEC3 dmp_TexEnv[0].operandAlpha
0x109 GL_INT_VEC3 dmp_TexEnv[1].operandAlpha
0x10A GL_INT_VEC3 dmp_TexEnv[2].operandAlpha
0x10B GL_INT_VEC3 dmp_TexEnv[3].operandAlpha
0x10C GL_INT_VEC3 dmp_TexEnv[4].operandAlpha
0x10D GL_INT_VEC3 dmp_TexEnv[5].operandAlpha
0x10E GL_FLOAT dmp_TexEnv[0].scaleRgb
0x10F GL_FLOAT dmp_TexEnv[1].scaleRgb
0x110 GL_FLOAT dmp_TexEnv[2].scaleRgb
0x111 GL_FLOAT dmp_TexEnv[3].scaleRgb
0x112 GL_FLOAT dmp_TexEnv[4].scaleRgb
0x113 GL_FLOAT dmp_TexEnv[5].scaleRgb
0x114 GL_FLOAT dmp_TexEnv[0].scaleAlpha
0x115 GL_FLOAT dmp_TexEnv[1].scaleAlpha
0x116 GL_FLOAT dmp_TexEnv[2].scaleAlpha
0x117 GL_FLOAT dmp_TexEnv[3].scaleAlpha
0x118 GL_FLOAT dmp_TexEnv[4].scaleAlpha
0x119 GL_FLOAT dmp_TexEnv[5].scaleAlpha
0x11A GL_FLOAT_VEC4 dmp_TexEnv[0].constRgba
0x11B GL_FLOAT_VEC4 dmp_TexEnv[1].constRgba
0x11C GL_FLOAT_VEC4 dmp_TexEnv[2].constRgba
0x11D GL_FLOAT_VEC4 dmp_TexEnv[3].constRgba
0x11E GL_FLOAT_VEC4 dmp_TexEnv[4].constRgba
0x11F GL_FLOAT_VEC4 dmp_TexEnv[5].constRgba
0x120 GL_FLOAT_VEC4 dmp_TexEnv[0].bufferColor
0x121 GL_INT_VEC2 dmp_TexEnv[1].bufferInput
0x122 GL_INT_VEC2 dmp_TexEnv[2].bufferInput
0x123 GL_INT_VEC2 dmp_TexEnv[3].bufferInput
0x124 GL_INT_VEC2 dmp_TexEnv[4].bufferInput
0x125 GL_INT dmp_Fog.mode
0x126 GL_FLOAT_VEC3 dmp_Fog.color
0x127 GL_BOOL dmp_Fog.zFlip
0x128 GL_SAMPLER_1D dmp_Fog.sampler