Difference between revisions of "Nintendo OpenGL"
(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 20: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 |