| 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 <pname> 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 <target> set to TEXTURE_1D, |
| TEXTURE_2D, or TEXTURE_3D_EXT, <pname> set to TEXTURE_BASE_LEVEL_SGIS, |
| and <param> set to (or <params> 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 <target> set to TEXTURE_1D, TEXTURE_2D, or |
| TEXTURE_3D_EXT, <pname> set to TEXTURE_MIN_LOD_SGIS or |
| TEXTURE_MAX_LOD_SGIS, and <param> set to (or <params> 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 <target> set to TEXTURE_1D, TEXTURE_2D, or |
| TEXTURE_3D_EXT, <pname> set to TEXTURE_MAX_LEVEL_SGIS, and <param> set |
| to (or <params> 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 |