Name ATI_envmap_bumpmap Name Strings GL_ATI_envmap_bumpmap Contact Dan Ginsburg, AMD (dan.ginsburg 'at' amd.com) Version Date: 11/04/2006 Revision: 1.02 Number 244 Dependencies EXT_texture_env_combine is required by this extension. ARB_multitexture is required by this extension. Overview This extension adds environment mapped bump mapping (EMBM) to the GL. The method exposed by this extension is to use a dependent texture read on a bumpmap (du,dv) texture to offset the texture coordinates read into a map on another texture unit. This (du,dv) offset is also rotated through a user-specified rotation matrix to get the texture coordinates into the appropriate space. A new texture format is introduced in order for specifying the (du,dv) bumpmap texture. This map represents -1 <= du,dv <= 1 offsets to be applied to the texture coordinates used to read into the base map. Additionally, the (du,dv) offsets are transformed by a rotation matrix that this extension allows the user to specify. Further, a new color operation is added to EXT_texture_env_combine to specify both that bumpmapping is enabled and which texture unit to apply the bump offset to. Issues None known. New Procedures and Functions void TexBumpParameter[i|f]vATI(enum pname, TYPE *param) void GetTexBumpParameter[i|f]vATI(enum pname, TYPE *param) New Tokens Accepted by the parameter of TexBumpParameter[i|f]vATI BUMP_ROT_MATRIX_ATI 0x8775 Accepted by the parameter of GetTexBumpParameter[i|f]vATI BUMP_ROT_MATRIX_ATI BUMP_ROT_MATRIX_SIZE_ATI 0x8776 BUMP_NUM_TEX_UNITS_ATI 0x8777 BUMP_TEX_UNITS_ATI 0x8778 Accepted by the parameter of GetTexImage and TexImage2D DUDV_ATI 0x8779 DU8DV8_ATI 0x877A Accepted by the parameter of TexImage2D DUDV_ATI DU8DV8_ATI Accepted by the parameter of TexEnvf, TexEnvi, TexEnvfv, and TexEnviv when the parameter value is COMBINE_RGB_EXT BUMP_ENVMAP_ATI 0x877B Accepted by the parameter of TexEnvf, TexEnvi, TexEnvfv, and TexEnviv when the parameter value is TEXTURE_ENV BUMP_TARGET_ATI 0x877C Accepted by the parameter of TexEnvf, TexEnvi, TexEnvfv, and TexEnviv when the parameter value is BUMP_TARGET_ATI TEXTURE0_ARB TEXTURE1_ARB TEXTURE2_ARB TEXTURE3_ARB TEXTURE4_ARB TEXTURE5_ARB TEXTURE6_ARB TEXTURE7_ARB TEXTURE8_ARB TEXTURE9_ARB TEXTURE10_ARB TEXTURE11_ARB TEXTURE12_ARB TEXTURE13_ARB TEXTURE14_ARB TEXTURE15_ARB TEXTURE16_ARB TEXTURE17_ARB TEXTURE18_ARB TEXTURE19_ARB TEXTURE20_ARB TEXTURE21_ARB TEXTURE22_ARB TEXTURE23_ARB TEXTURE24_ARB TEXTURE25_ARB TEXTURE26_ARB TEXTURE27_ARB TEXTURE28_ARB TEXTURE29_ARB TEXTURE30_ARB TEXTURE31_ARB Additions to Chapter 2 of the OpenGL 1.2.1 Specification (Operation): None Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) - (p.144, Table 3.15) Add row to table: "Base Internal Format RGBA Values Internal Components -------------------- ----------- ------------------- DUDV_ATI undefined U,V" - (p. 155, Table 3.16) Add rows to table, add last two columns: "Sized Base R G B A L I U V Internal Format Internal Format bits bits bits bits bits bits bits bits --------------- --------------- ---- ---- ---- ---- ---- ---- ---- ---- DU8DV8_ATI DUDV_ATI 8 8" - (p. 136 Table 3.18) Add Row: "Base REPLACE MODULATE Internal Format Texture Function Texture Function --------------- ---------------- ---------------- DUDV_ATI undefined undefined" - (p. 137 Table 3.19) Add Row: "Base DECAL BLEND Internal Format Texture Function Texture Function --------------- ---------------- ---------------- DUDV_ATI undefined undefined" Table 3.23: Correspondence of texture components to source components for COMBINE_RGB_EXT and COMBINE_ALPHA_EXT arguments" - (p.138, add new section 3.8.11) "3.8.11 Texture Bump Parameters The parameters for environment mapped bump mapping are set through the entry point: void TexBumpParameter[i|f]vATI(enum pname, TYPE *param) When pname is BUMP_ROT_MATRIX_ATI, the rotation matrix applied to each (du, dv) coordinate read from the bumpmap is specified (see section 3.8.9 on environment mapped bump mapping). The size of the rotation matrix can vary across implementations (to allow for future expansion with support for offsets to more than just two coordinates). This size can be queried for using: void GetTexBumpParamter[i|f]vATI(enum pname, TYPE *param) with pname as BUMP_ROT_MATRIX_SIZE_ATI. This returns the number of entries in the BUMP_ROT_MATRIX. When pname is BUMP_NUM_TEX_UNITS_ATI, the number of texture units that support bump mapping is returned. Given this, an array of supported texture units that support bumpmapping can be queried. When pname is BUMP_TEX_UNITS_ATI, an array of size BUMP_NUM_TEX_UNITS_ATI is returned in which each element is one of the valid texture units (TEXTURE0_ARB, TEXTURE1_ARB, etc.)." - After Table 3.20 in EXT_texture_env_combine: "In addition, a special-case COMBINE_RGB_EXT function exists for performing environment mapped bump mapping. This function does not behave as the standard combine functions. Instead, it specifies that the given texture unit has a bumpmap which will be used to offset the texture coordinate reads onto another unit. The texture unit which the bumpmap will bump is specified by setting the BUMP_TARGET_ATI to be a valid texture unit. Environment mapped bump mapping then works as follows: The (du,dv) offset map specified on the texture unit with BUMP_ENVMAP_ATI will be used to offset the texture coordinates read into the map on the BUMP_TARGET_ATI unit. The (du,dv) texel will be fetched from the bumpmap at the texture coordinate specified for the bumpmap. This (du,dv) texel will then be rotated through the BUMP_ROT_MATRIX: du' = du * Rot[00] + dv * Rot[01] dv' = du * Rot[10] + dv * Rot[11] (du',dv') will then be used to offset the (u,v) coordinates used to read into the texture on BUMP_TARGET_ATI: u = u + du' v = v + dv' These final coordinates are then used to fetch from the texture on BUMP_TARGET_ATI." - Change to table 3.23 in EXT_texture_env_combine: "Base Internal Format RGB Values Alpha Value -------------------- ---------- ----------- ALPHA 0, 0, 0 At LUMINANCE Lt, Lt, Lt 1 LUMINANCE_ALPHA Lt, Lt, Lt At INTENSITY It, It, It It RGB Rt, Gt, Bt 1 RGBA Rt, Gt, Bt At DUDV_ATI 0, 0, 0 1 " Additions to Chapter 4: None Additions to Chapter 5: None Additions to Chapter 6: None Additions to the GLX Specification None GLX Protocol None Dependencies on EXT_point_parameters Errors INVALID_ENUM if TexBumpParameter[i|f]vATI is called with pname not equal to BUMP_ROT_MATRIX_ATI. INVALID_ENUM if GetTexBumpParameter[i|f]vATI is called with pname not equal to BUMP_ROT_MATRIX_ATI, BUMP_ROT_MATRIX_SIZE_ATI, BUMP_NUM_TEX_UNITS_ATI, or BUMP_TEX_UNITS_ATI. INVALID_VALUE if the combineRGB function is set on a unit not supported as queried with BUMP_TEX_UNITS_ATI. New State Get Value Get Command Type Minimum Value Description --------- ----------- ---- ------------- ----------- BUMP_ROT_MATRIX_ATI GetTexBumpParameterfv n x F - Bump rotation matrix on current unit BUMP_ROT_MATRIX_SIZE_ATI GetTexBumpParameteriv Z+ 4 Bump rotation matrix size BUMP_NUM_TEX_UNITS_ATI GetTexBumpParameteriv Z+ 1 Number of bump texture units BUMP_TEX_UNITS_ATI GetTexBumpParameteriv n x Z+ - Supported bump texture units New Implementation Dependent State None Revision History Date: 11/4/2006 Revision: 1.02 - Updated contact info after ATI/AMD merger. Date: 1/09/2003 Revision: 1.01 - Added an error condition. Date: 8/21/2001 Revision: 1.0 - First release.