Nintendo OpenGL
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.
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 |