Name SGIS_texture_lod Name Strings GL_SGIS_texture_lod Version $Date: 1997/05/30 01:34:44 $ $Revision: 1.8 $ Number 24 Dependencies EXT_texture is required EXT_texture3D affects the definition of this extension EXT_texture_object affects the definition of this extension SGI_detail_texture affects the definition of this extension SGI_sharpen_texture affects the definition of this extension Overview This extension imposes two constraints related to the texture level of detail parameter LOD, which is represented by the Greek character lambda in the GL Specification. One constraint clamps LOD to a specified floating point range. The other limits the selection of mipmap image arrays to a subset of the arrays that would otherwise be considered. Together these constraints allow a large texture to be loaded and used initially at low resolution, and to have its resolution raised gradually as more resolution is desired or available. Image array specification is necessarily integral, rather than continuous. By providing separate, continuous clamping of the LOD parameter, it is possible to avoid "popping" artifacts when higher resolution images are provided. Note: because the shape of the mipmap array is always determined by the dimensions of the level 0 array, this array must be loaded for mipmapping to be active. If the level 0 array is specified with a null image pointer, however, no actual data transfer will take place. And a sufficiently tuned implementation might not even allocate space for a level 0 array so specified until true image data were presented. Issues * Should detail and sharpen texture operate when the level 0 image is not being used? A: Sharpen yes, detail no. * Should the shape of the mipmap array be determined by the dimensions of the level 0 array, regardless of the base level? A: Yes, this is the better solution. Driving everything from the base level breaks the proxy query process, and allows mipmap arrays to be placed arbitrarily. The issues of requiring a level 0 array are partially overcome by the use of null-point loads, which avoid data transfer and, potentially, data storage allocation. * With the arithmetic as it is, a linear filter might access an array past the limit specified by MAX_LEVEL or p. But the results of this access are not significant, because the blend will weight them as zero. New Procedures and Functions None New Tokens Accepted by the parameter of TexParameteri, TexParameterf, TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: TEXTURE_MIN_LOD_SGIS 0x813A TEXTURE_MAX_LOD_SGIS 0x813B TEXTURE_BASE_LEVEL_SGIS 0x813C TEXTURE_MAX_LEVEL_SGIS 0x813D Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) None Additions to Chapter 3 of the 1.0 Specification (Rasterization) GL Specification Table 3.7 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 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 Table 3.7: Texture parameters and their values. Base Array ---------- Although it is not explicitly stated, it is the clear intention of the OpenGL specification that texture minification filters NEAREST and LINEAR, and all texture magnification filters, be applied to image array zero. This extension introduces a parameter, BASE_LEVEL, that explicitly specifies which array level is used for these filter operations. Base level is specified for a specific texture by calling TexParameteri, TexParameterf, TexParameteriv, or TexParameterfv with set to TEXTURE_1D, TEXTURE_2D, or TEXTURE_3D_EXT, set to TEXTURE_BASE_LEVEL_SGIS, and set to (or pointing to) the desired value. The error INVALID_VALUE is generated if the specified BASE_LEVEL is negative. Level of Detail Clamping ------------------------ The level of detail parameter LOD is defined in the first paragraph of Section 3.8.1 (Texture Minification) of the GL Specification, where it is represented by the Greek character lambda. This extension redefines the definition of LOD as follows: LOD'(x,y) = log_base_2 (Q(x,y)) / MAX_LOD LOD' > MAX_LOD LOD = ( LOD' LOD' >= MIN_LOD and LOD' <= MAX_LOD \ MIN_LOD LOD' < MIN_LOD \ undefined MIN_LOD > MAX_LOD The variable Q in this definition represents the Greek character rho, as it is used in the OpenGL Specification. (Recall that Q is computed based on the dimensions of the BASE_LEVEL image array.) MIN_LOD is the value of the per-texture variable TEXTURE_MIN_LOD_SGIS, and MAX_LOD is the value of the per-texture variable TEXTURE_MAX_LOD_SGIS. Initially TEXTURE_MIN_LOD_SGIS and TEXTURE_MAX_LOD_SGIS are -1000 and 1000 respectively, so they do not interfere with the normal operation of texture mapping. These values are respecified for a specific texture by calling TexParameteri, TexParemeterf, TexParameteriv, or TexParameterfv with set to TEXTURE_1D, TEXTURE_2D, or TEXTURE_3D_EXT, set to TEXTURE_MIN_LOD_SGIS or TEXTURE_MAX_LOD_SGIS, and set to (or pointing to) the new value. It is not an error to specify a maximum LOD value that is less than the minimum LOD value, but the resulting LOD values are not defined. LOD is clamped to the specified range prior to any use. Specifically, the mipmap image array selection described in the Mipmapping Subsection of the GL Specification is based on the clamped LOD value. Also, the determination of whether the minification or magnification filter is used is based on the clamped LOD. Mipmap Completeness ------------------- The GL Specification describes a "complete" set of mipmap image arrays as array levels 0 through p, where p is a well defined function of the dimensions of the level 0 image. This extension modifies the notion of completeness: instead of requiring that all arrays 0 through p meet the requirements, only arrays 0 and arrays BASE_LEVEL through MAX_LEVEL (or p, whichever is smaller) must meet these requirements. The specification of BASE_LEVEL was described above. MAX_LEVEL is specified by calling TexParameteri, TexParemeterf, TexParameteriv, or TexParameterfv with set to TEXTURE_1D, TEXTURE_2D, or TEXTURE_3D_EXT, set to TEXTURE_MAX_LEVEL_SGIS, and set to (or pointing to) the desired value. The error INVALID_VALUE is generated if the specified MAX_LEVEL is negative. If MAX_LEVEL is smaller than BASE_LEVEL, or if BASE_LEVEL is greater than p, the set of arrays is incomplete. Array Selection --------------- Magnification and non-mipmapped minification are always performed using only the BASE_LEVEL image array. If the minification filter is one that requires mipmapping, one or two array levels are selected using the equations in the table below, and the LOD value is clamped to a maximum value that insures that no array beyond the limits specified by MAX_LEVEL and p is accessed. Minification Filter Maximum LOD Array level(s) ------------------- ----------- -------------- NEAREST_MIPMAP_NEAREST M + 0.4999 floor(B + 0.5) LINEAR_MIPMAP_NEAREST M + 0.4999 floor(B + 0.5) NEAREST_MIPMAP_LINEAR M floor(B), floor(B)+1 LINEAR_MIPMAP_LINEAR M floor(B), floor(B)+1 where: M = min(MAX_LEVEL,p) - BASE_LEVEL B = BASE_LEVEL + LOD For NEAREST_MIPMAP_NEAREST and LINEAR_MIPMAP_NEAREST the specified image array is filtered according to the rules for NEAREST or LINEAR respectively. For NEAREST_MIPMAP_LINEAR and LINEAR_MIPMAP_LINEAR both selected arrays are filtered according to the rules for NEAREST or LINEAR, respectively. The resulting values are then blended as described in the Mipmapping section of the OpenGL specification. Additional Filters ------------------ Sharpen filters (described in SGIS_sharpen_texture) operate on array levels BASE_LEVEL and BASE_LEVEL+1. If the minimum of MAX_LEVEL and p is not greater than BASE_LEVEL, then sharpen texture reverts to a LINEAR magnification filter. Detail filters (described in SGIS_detail_texture) operate only when BASE_LEVEL is zero. Texture Capacity ---------------- In Section 3.8 the OpenGL specification states: "In order to allow the client to meaningfully query the maximum image array sizes that are supported, an implementation must not allow an image array of level one or greater to be created if a `complete' set of image arrays consistent with the requested array could not be supported." Given this extension's redefinition of completeness, the above paragraph should be rewritten to indicate that all levels of the `complete' set of arrays must be supportable. E.g. "In order to allow the client to meaningfully query the maximum image array sizes that are supported, an implementation must not allow an image array of level one or greater to be created if a `complete' set of image arrays (all levels 0 through p) consistent with the requested array could not be supported." Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and the Frame Buffer) None Additions to Chapter 5 of the 1.0 Specification (Special Functions) None Additions to Chapter 6 of the 1.0 Specification (State and State Requests) None Additions to the GLX Specification None Dependencies on EXT_texture EXT_texture is required. Dependencies on EXT_texture3D If EXT_texture3D is not supported, references to 3D texture mapping and to TEXTURE_3D_EXT in this document are invalid and should be ignored. Dependencies on EXT_texture_object If EXT_texture_object is implemented, the state values named TEXTURE_MIN_LOD_SGIS TEXTURE_MAX_LOD_SGIS TEXTURE_BASE_LEVEL_SGIS TEXTURE_MAX_LEVEL_SGIS are added to the state vector of each texture object. When an attribute set that includes texture information is popped, the bindings and enables are first restored to their pushed values, then the bound textures have their LOD and LEVEL parameters restored to their pushed values. Dependencies on SGIS_detail_texture If SGIS_detail_texture is not supported, references to detail texture mapping in this document are invalid and should be ignored. Dependencies on SGIS_sharpen_texture If SGIS_sharpen_texture is not supported, references to sharpen texture mapping in this document are invalid and should be ignored. Errors INVALID_VALUE is generated if an attempt is made to set TEXTURE_BASE_LEVEL_SGIS or TEXTURE_MAX_LEVEL_SGIS to a negative value. New State Initial Get Value Get Command Type Value Attrib --------- ----------- ---- ------- ------ TEXTURE_MIN_LOD_SGIS GetTexParameterfv n x R -1000 texture TEXTURE_MAX_LOD_SGIS GetTexParameterfv n x R 1000 texture TEXTURE_BASE_LEVEL_SGIS GetTexParameteriv n x R 0 texture TEXTURE_MAX_LEVEL_SGIS GetTexParameteriv n x R 1000 texture New Implementation Dependent State None