Name SGIX_texture_coordinate_clamp Name Strings GL_SGIX_texture_coordinate_clamp Version $Date: 1998/03/10 06:23:31 $ $Revision: 1.2 $ Number 235 Dependencies EXT_texture3D affects the definition of this extension Overview This extension provides a mechanism to specify the maximum texture coordinate clamping values. Standard OpenGL always clamps the upper bound to 1.0 when the wrap mode is set to CLAMP. This mechanism can be used to guarantee that non-existent texel data will not be accessed when the texture image has dimensions that are not a power of 2. Issues * What is the effect of wrap modes? -- This mode is only effective when the wrap mode is set to clamp * Are border modes supported? -- Border modes are independent of texture coordinate clamping. Borders live outside the 0.0 to 1.0 texture coordinate range. However, a particular filtering method may access texels beyond the clamped values. It is the users responsibility to ensure that adequate texels are defined or to set the border mode to CLAMP_TO_EDGE_SGIS to prevent access outside this range. The texel value used past the clamped edge is otherwise undefined. * Can defining the clamp values before the texture is defined be used to allocate less texture memory for the texture? -- Maybe. This is an implementation issue that the hardware may or may not take advantage of. However, the clamp value may be increased later to download data into a larger region. * Does subloading a texture image to a region outside the clamped area preserve the contents in the outside area? -- Yes. Downloading texels outside the clamped region should make the data be preserved. * Only the upper limit of the clamp region may be specified. Might other more generic needs be met by allowing both min and max to be defined? For example, you could define a large texture of smaller "tiles" that could be selected for various surfaces. -- Intel has a pending spec to do texture clipping. This is somewhat similar to what is mentioned above. This extension defines a mechanism to clamp and also provides a hint to the size of the texture to be allocated. * Since wrapped textures aren't supported, the only real functionality this appears to add is when the geometry (s,t,r) ranges are not aligned with or matching the (x,y,z) ranges. For example, mapping video to a sphere. Is this correct? Otherwise, one could just define a rectangle with the right (s,t) ranges. -- Yes. However that does not provide OpenGL any hint as to the size of texture that actually needs to be allocated. New Procedures and Functions None New Tokens Accepted by the parameter of TexParameteri, TexParameterf, TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: TEXTURE_MAX_CLAMP_S_SGIX 0x8369 TEXTURE_MAX_CLAMP_T_SGIX 0x836A TEXTURE_MAX_CLAMP_R_SGIX 0x836B Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) None Additions to Chapter 3 of the 1.1 Specification (Rasterization) GL Specification Table 3.9 is updated as follows: Name Type Legal Values ---- ---- ------------ TEXTURE_WRAP_S integer CLAMP, REPEAT TEXTURE_WRAP_T integer CLAMP, REPEAT TEXTURE_WRAP_R_EXT integer CLAMP, REPEAT TEXTURE_MIN_FILTER integer NEAREST, LINEAR, NEAREST_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR, LINEAR_MIPMAP_NEAREST, LINEAR_MIPMAP_LINEAR, FILTER4_SGIS, LINEAR_CLIPMAP_LINEAR_SGIX, TEXTURE_MAG_FILTER integer NEAREST, LINEAR, FILTER4_SGIS, LINEAR_DETAIL_SGIS, LINEAR_DETAIL_ALPHA_SGIS, LINEAR_DETAIL_COLOR_SGIS, LINEAR_SHARPEN_SGIS, LINEAR_SHARPEN_ALPHA_SGIS, LINEAR_SHARPEN_COLOR_SGIS TEXTURE_BORDER_COLOR 4 floats any 4 values in [0,1] DETAIL_TEXTURE_LEVEL_SGIS integer any non-negative integer DETAIL_TEXTURE_MODE_SGIS integer ADD, MODULATE TEXTURE_MIN_LOD_SGIS float any value TEXTURE_MAX_LOD_SGIS float any value TEXTURE_BASE_LEVEL_SGIS integer any non-negative integer TEXTURE_MAX_LEVEL_SGIS integer any non-negative integer GENERATE_MIPMAP_SGIS boolean TRUE or FALSE TEXTURE_CLIPMAP_FRAME_SGIX float any non-negative value TEXTURE_CLIPMAP_CENTER_SGIX 2 integers any 2 non-negative integers TEXTURE_CLIPMAP_OFFSET_SGIX 2 integers any 2 non-negative integers TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 3 integers any 3 non-negative integer TEXTURE_LOD_BIAS_S_SGIX float any value TEXTURE_LOD_BIAS_T_SGIX float any value TEXTURE_LOD_BIAS_R_SGIX float any value TEXTURE_MIPMAP_ANISOTROPY int any value >= 1 TEXTURE_MAX_CLAMP_S_SGIX float any value in [0.0, 1.0] TEXTURE_MAX_CLAMP_T_SGIX float any value in [0.0, 1.0] TEXTURE_MAX_CLAMP_R_SGIX float any value in [0.0, 1.0] Table 3.9: Texture parameters and their values. Texture Minification -------------------- Let s(x,y) be the function that associates an s texture coordinate with each set of window coordinates (x,y) that lie within a primitive; define t(x, y) analogously. Let / 2^n.TEXTURE_MAX_CLAMP_S_SGIX if (TEXTURE_WRAP_S == CLAMP and u(x,y) = ( s(x,y) > TEXTURE_MAX_CLAMP_S_SGIX) \ 2^n.s(x,y), otherwise / 2^n.TEXTURE_MAX_CLAMP_T_SGIX if (TEXTURE_WRAP_T == CLAMP and v(x,y) = ( t(x,y) > TEXTURE_MAX_CLAMP_T_SGIX) \ 2^n.t(x,y), otherwise and / 2^n.TEXTURE_MAX_CLAMP_R_SGIX if (TEXTURE_WRAP_R == CLAMP and w(x,y) = ( r(x,y) > TEXTURE_MAX_CLAMP_R_SGIX) \ 2^n.r(x,y), otherwise (For a one-dimensional texture, define v(x,y) = 0, w(x,y) = 0) Query support ------------- In the initial state the values assigned to TEXTURE_MAX_CLAMP_S_SGIX, TEXTURE_MAX_CLAMP_T_SGIX and TEXTURE_MAX_CLAMP_R_SGIX are 1.0, 1.0, 1.0 respectively. Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations and the Frame Buffer) None Additions to Chapter 5 of the 1.1 Specification (Special Functions) None Additions to Chapter 6 of the 1.1 Specification (State and State Requests) None Additions to the GLX Specification None Dependencies on EXT_texture3D If EXT_texture3D is not implemented, then the reference to clamping of 3D texture coordinates in this file are invalid, and references to TEXTURE_MAX_CLAMP_R_SGIX should be ignored. Errors None New State Initial Get Value Get Command Type Value Attrib --------- ----------- ---- ------- ------ TEXTURE_MAX_CLAMP_S_SGIX GetTexParameteriv R 1.0 texture TEXTURE_MAX_CLAMP_T_SGIX GetTexParameteriv R 1.0 texture TEXTURE_MAX_CLAMP_R_SGIX GetTexParameteriv R 1.0 texture New Implementation Dependent State None