Name NV_texture_border_clamp Name Strings GL_NV_texture_border_clamp Contributors Jussi Rasanen, NVIDIA Greg Roth, NVIDIA Contact Greg Roth, NVIDIA (groth 'at' nvidia 'dot' com) Status Complete Version Date: Aug 24, 2012 Revision: 2 Number OpenGL ES Extension #149 Dependencies OpenGL ES 2.0 is required. This extension is written against the OpenGL ES 2.0.25 specification. OES_texture_3D affects the definition of this extension. Overview OpenGL ES provides only a single clamping wrap mode: CLAMP_TO_EDGE. However, the ability to clamp to a constant border color can be useful to quickly detect texture coordinates that exceed their expected limits or to dummy out any such accesses with transparency or a neutral color in tiling or light maps. This extension defines an additional texture clamping algorithm. CLAMP_TO_BORDER_NV clamps texture coordinates at all mipmap levels such that NEAREST and LINEAR filters of clamped coordinates return only the constant border color. This does not add the ability for textures to specify borders using glTexImage2D, but only to clamp to a constant border value set using glTexParameter. New Procedures and Functions None. New Tokens Accepted by the parameter of TexParameteri, TexParameterf, TexParameteriv, and TexParameterfv: TEXTURE_BORDER_COLOR_NV 0x1004 Accepted by the parameter of TexParameteri and TexParameterf, and by the parameter of TexParameteriv and TexParameterfv, and returned by the parameter of GetTexParameteriv and GetTexParameterfv when their parameter is TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R_OES: CLAMP_TO_BORDER_NV 0x812D Additions to Chapter 3 of the OpenGL ES 2.0.25 Specification (Rasterization) Modify Section 3.7.4 "Texture Parameters" Append to the end of the first paragraph: If the values for TEXTURE_BORDER_COLOR_NV are specified as integers, they are converted to floating-point as described in section 2.1.2. Each of the four values set by TEXTURE_BORDER_COLOR_NV is clamped to lie in [0, 1]. Modify Table 3.10, edit the following lines: Name Type Legal Values ============== ======= ==================== TEXTURE_WRAP_S integer CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, CLAMP_TO_BORDER_NV TEXTURE_WRAP_T integer CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, CLAMP_TO_BORDER_NV TEXTURE_WRAP_R_OES integer CLAMP_TO_EDGE, REPEAT, MIRRORED_REPEAT, CLAMP_TO_BORDER_NV and add: Name Type Legal Values ============== ======= ==================== TEXTURE_BORDER_COLOR_NV 4 floats any 4 values in {0,1} Modify Section 3.7.6 "Texture Wrap Modes" Add after wrap mode CLAMP_TO_EDGE: Wrap Mode CLAMP_TO_BORDER_NV CLAMP_TO_BORDER_NV clamps texture coordinates at all mipmaps such that the texture filter always samples the constant border color for fragments whose corresponding texture coordinate is sufficiently far outside the range [0, 1]. The color returned when clamping is derived only from the constant border color. Texture coordinates are clamped to the range [min, max]. The minimum value is defined as min = -1 / 2N where N is the size of the one-, two-, or three-dimensional texture image in the direction of clamping. The maximum value is defined as max = 1 - min so that clamping is always symmetric about the [0,1] mapped range of a texture coordinate. Modify Section 3.7.7 "Texture Minification" Add to the end of Subsection "Scale Factor and Level of Detail" If any of the selected Tijk or Tij in the above equations refer to a border texel with i < 0, j < 0, k < 0, i >= ws, j >= hs, or k >= ds, then the border values defined by TEXTURE_BORDER_COLOR_NV are used instead of the unspecified value or values. If the texture contains color components, the values of TEXTURE_BORDER_COLOR_NV are interpreted as an RGBA color to match the texture's internal format in a manner consistent with table 3.8. If the texture contains depth components, the first component of TEXTURE_BORDER_COLOR_NV is interpreted as a depth value. Modify Section 3.7.12 "Texture state" Modify the last two sentences of the section: Next, there are the two sets of texture properties; each consists of the selected minification and magnification filters, the wrap modes for s, t, and r, and the TEXTURE_BORDER_COLOR_NV. In the initial state, the value assigned to TEXTURE_MIN_FILTER is NEAREST_- MIPMAP_LINEAR, and the value for TEXTURE_MAG_FILTER is LINEAR. s, t, and r wrap modes are all set to REPEAT, and TEXTURE_BORDER_COLOR_NV is (0,0,0,0). Errors None. New State Modify table 6.8: Change the type information changes for these parameters. Initial Get Value Type Get Command Value Description Sec. --------- ------ ----------- ------- ----------- ---- TEXTURE_WRAP_S n x Z4 GetTexParameter REPEAT Texture wrap 3.7 TEXTURE_WRAP_T n x Z4 GetTexParameter REPEAT Texture wrap 3.7 TEXTURE_WRAP_R_OES n x Z4 GetTexParameter REPEAT Texture wrap 3.7 Add the following parameter: Get Value Type Get Command Value Description Sec. --------- ------ ----------- ------- ----------- ---- TEXTURE_BORDER_COLOR_NV 2+ x C GetTexParameter 0,0,0,0 Texture border 3.7 Dependencies on OES_texture_3D If OES_texture_3D is not supported, ignore all references to three-dimensional textures and token TEXTURE_WRAP_R_OES as well as any reference to r wrap modes. References to Tijk, k, and ds in section 3.7.6 should also be removed. Issues None Revision History Rev. Date Author Changes ---- -------- --------- ------------------------------------- 4 04 Sep 2012 groth Restored langauge in 3.7.7 about texture borders 3 29 Aug 2012 groth Minor copy edits. 2 24 Aug 2012 groth Clarified constant color language and tex_3d dependency 1 14 Aug 2012 groth Initial draft based off ARB_texture_border_clamp