| XXX - Not complete yet!!! |
| |
| Name |
| |
| SGIX_clipmap |
| |
| Name Strings |
| |
| GL_SGIX_clipmap |
| |
| Version |
| |
| $Date: 1996/06/12 17:19:43 $ $Revision: 1.9 $ |
| |
| Number |
| |
| 33 |
| |
| Dependencies |
| |
| EXT_texture is required |
| EXT_texture_object affects the definition of this extension |
| SGIS_texture_lod 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 |
| |
| Mipmaps provide a general but expensive solution when the texture image |
| is very large. This extension defines clipmaps, which occupy a small |
| subset of the memory required by equivalent mipmaps, but provide much |
| of the mipmap rendering capabilities. Clipmaps are especially useful |
| for rendering terrain. |
| |
| Issues |
| |
| * Is lod clamping treated properly if we have no texel data? |
| * Should we always have to specify a virtual depth? |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <param> parameter of TexParameteri and TexParameterf, |
| and by the <params> parameter of TexParameteriv and TexParameterfv, |
| when their <pname> parameter is TEXTURE_MIN_FILTER: |
| |
| LINEAR_CLIPMAP_LINEAR_SGIX |
| |
| Accepted by the <pname> parameter of TexParameteri, TexParameterf, |
| TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: |
| |
| TEXTURE_CLIPMAP_FRAME_SGIX |
| |
| Accepted by the <pname> parameter of TexParameteriv, TexParameterfv, |
| GetTexParameteriv, and GetTexParameterfv: |
| |
| TEXTURE_CLIPMAP_CENTER_SGIX |
| TEXTURE_CLIPMAP_OFFSET_SGIX |
| TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX |
| |
| Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, |
| GetFloatv, and GetDoublev: |
| |
| MAX_CLIPMAP_DEPTH_SGIX |
| MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX |
| |
| 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, |
| 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 integers |
| |
| Table 3.7: Texture parameters and their values. |
| |
| Notes: |
| |
| * Clipmap filtering is supported only for 2D, borderless textures. |
| |
| * Clipmap filtering is performed when the texture minification filter |
| is LINEAR_CLIPMAP_LINEAR_SGIX. We could define other clipmap |
| filters with NEAREST sampling, but it probably isn't worth the |
| trouble. |
| |
| * Clipmap filtering is supported with all magnification filters |
| except FILTER4_SGIS. Detail and sharpen filtering are performed |
| only when the texture data are supplied by the level 0 image. |
| |
| * A clipmap virtualizes a mipmap by holding, at any given time, only a |
| portion of a full mipmap pyramid. A clipmap is complete only if |
| levels 0 through B have the same dimension, levels B through N form |
| the base of a valid mipmap, all image dimensions are a power of 2, |
| and N is less than MAX_CLIPMAP_DEPTH_SGIX. |
| |
| Each image level P, where P ranges from B through N, is treated as |
| though it contains the full image from the same level of the complete |
| (N+1) level mipmap. |
| |
| Each image level P, where P ranges from 0 through B-1, is treated as |
| though it contains a subimage from the same level of the complete |
| (N+1) level mipmap. This subimage is centered at texel coordinates |
| |
| S = (Scenter >> P) |
| T = (Tcenter >> P) |
| |
| where Scenter and Tcenter are specified by the application. |
| |
| For instance, if the width of the clipmap is W=8, N=12, and Scenter= |
| 2048, the clipmap will contain the data given by 0's in the S-edge |
| view below: |
| |
| 0 .********************************00000000********************************. |
| 1 .********************************00000000********************************. |
| 2 .********************************00000000********************************. |
| 3 .********************************00000000********************************. |
| 4 .********************************00000000********************************. |
| 5 .********************************00000000********************************. |
| 6 ****************************00000000**************************** |
| 7 ************00000000************ |
| 8 ****00000000**** |
| B=9 00000000 |
| 10 0000 |
| 11 00 |
| N=12 0 |
| |
| Likewise, if Scenter=2016 (32 less than above): |
| |
| 0 .00000000****************************************************************. |
| 1 .****************00000000************************************************. |
| 2 .************************00000000****************************************. |
| 3 .****************************00000000************************************. |
| 4 .******************************00000000**********************************. |
| 5 .*******************************00000000*********************************. |
| 6 ****************************00000000***************************** |
| 7 ************00000000************ |
| 8 ****00000000**** |
| 9 00000000 |
| 10 0000 |
| 11 00 |
| N=12 0 |
| |
| * Scenter and Tcenter are specified by the application by calling |
| TexParameteriv or TexParameterfv with <target> set to TEXTURE_2D, |
| <pname> set to <TEXTURE_CLIPMAP_CENTER_SGIX>, and <params> pointing |
| to a vector whose first component is Scenter and whose second |
| component is Tcenter. The center can be changed at any time. |
| |
| * The clipped levels (i.e. those levels P, where P<B) of the map can |
| be framed with a region of texels guaranteed not to be displayed. |
| The frames allow for paging of new texture data into a non-active |
| portion of texture memory, enabling efficient roaming throughout the |
| larger virtual mipmap. The frames for all of the clipped levels are |
| the same width and are measured as a fraction of the width of the |
| clipped levels. Specifically, |
| |
| width of frame in texels = Cframe * W / 2 |
| |
| The floating point value Cframe can take on values from 0.0 to 1.0 |
| and is specified by the application. |
| |
| Cframe is a non-negative fraction of half the level width specified |
| by calling TexParameterf or TexParameterfv with <target> set to |
| TEXTURE_2D, <pname> set to <TEXTURE_CLIPMAP_FRAME_SGIX>, and <param> |
| set to Cframe or <params> pointing to Cframe. Cframe is clamped to |
| the range [0,1]. The frame width can be changed at any time. |
| |
| * During filtering a level of detail is determined just as it would be |
| for the equivalent (N+1) level mipmap. If the level of detail falls |
| into the clipped portion of the clipmap and the required texels are |
| not available within the framed region of the two closest image |
| levels, the level of detail is increased to the nearest image level |
| that does include the required texels. The values of TEXTURE_WRAP_S |
| and TEXTURE_WRAP_T have no effect during clipmap minification. |
| |
| If SGIS_texture_lod is supported, the level of detail is clamped to |
| the range defined by TEXTURE_MIN_LOD_SGIS, TEXTURE_MAX_LOD_SGIS, |
| TEXTURE_BASE_LEVEL_SGIS, and TEXTURE_MAX_LEVEL_SGIS. (Issue: what |
| if texels do not exist on the level given by max_lod?) |
| |
| * As the center moves, only texels along the edges of the clipmap levels |
| change. To allow for incremental loading only of these texels via |
| TexSubImage2DEXT, torroidal offset values are added to the texture |
| addresses of each level. For the Pth level where P ranges from 0 to |
| B-1, these offsets are |
| |
| Soffsetp = (Soffset >> P) |
| Toffsetp = (Toffset >> P) |
| |
| where Soffset and Toffset are specified by the application. Note that |
| Soffset and Toffset for the top level defines the offsets for |
| subsequent levels by a simple shift just as with the center. |
| |
| Soffset and Toffset are specified by calling TexParameteriv or |
| TexParameterfv with <target> set to TEXTURE_2D, <pname> set to |
| <TEXTURE_CLIPMAP_OFFSET_SGIX>, and <params> pointing to a vector |
| whose first component is Soffset and whose second component is |
| Toffset. The offset can be changed at any time. |
| |
| * To index into a clipmap of greater than MAX_CLIPMAP_DEPTH_SGIX levels |
| of detail, additional parameters are provided to restrictively index |
| a smaller clipmap of (N+1) levels located wholly within a complete, |
| larger clipmap. The larger clipmap is complete only if levels 0 |
| through B have the same dimension, levels B through V form the base |
| of a valid mipmap, all image dimensions are a power of 2, and V is |
| less than MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX. These constraints are |
| precisely those given above with the exception of the depth, V, being |
| allowed to range up to MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX. |
| |
| The second, smaller clipmap has a base level located at level D of |
| the larger clipmap and has a depth of N. Both parameters D and N are |
| specified by the application. The smaller clipmap is valid only if D |
| is between 0 and V, (D+N) is less than or equal to V, and D is less |
| than MAX_CLIPMAP_DEPTH_SGIX. |
| |
| Scenter, Tcenter, Soffset, and Toffset are still relative the level |
| 0, the base level of the larger, virtual mipmap, as are the minimum |
| and maximum levels of detail specified in the SGIS_texture_lod |
| extension. |
| |
| For D=2, N=5, V=12, and Scenter=2048, the valid texels are given by |
| the x's in the diagram below. |
| |
| 0 ...******************************00000000******************************... |
| 1 ...******************************00000000******************************... |
| D=2 ...******************************xxxxxxxx******************************... |
| 3 ...******************************xxxxxxxx******************************... |
| 4 ...******************************xxxxxxxx******************************... |
| 5 ...******************************00xxxx00******************************... |
| 6 ****************************000xx000**************************** |
| D+N=7 ************000x0000************ |
| 8 ****00000000**** |
| 9 00000000 |
| 10 0000 |
| 11 00 |
| V=12 0 |
| |
| Likewise, if Scenter=2016 (32 less than above): |
| |
| 0 .00000000**************************************************************... |
| 1 .****************00000000**********************************************... |
| D=2 ...**********************xxxxxxxx**************************************... |
| 3 ...**************************xxxxxxxx**********************************... |
| 4 ...****************************xxxxxxxx********************************... |
| 5 ...*****************************00xxxx00*******************************... |
| 6 ****************************000xx000****************************** |
| D+N=7 ************000x0000************ |
| 8 ****00000000**** |
| 9 00000000 |
| 10 0000 |
| 11 00 |
| V=12 0 |
| |
| Texel address and level of detail generation proceed with the smaller |
| clipmap precisely as described above for the original clipmap. If |
| the level of detail is such that a level below D would be indexed, |
| texture magnification is performed even though the finer texture |
| information may be present in texture memory. Likewise, levels of |
| detail coarser than D+N may demonstrate aliasing. The onus is on the |
| application to choose parameters D and N to prevent unwanted |
| filtering operations. |
| |
| The finest level of the clipmap, D, the depth of the clipmap, N+1, and |
| the depth of the virtual clipmap, V+1, are specified by calling |
| TexParameteriv, or TexParameterfv with <target> set to TEXTURE_2D, |
| <pname> set to <TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX>, and <params> set |
| to (D,N+1,V+1). These parameters can be changed at any time. |
| |
| If the depth of the virtual clipmap is zero, clipmap virtualization |
| is ignored, and texturing proceeds as with a non-virtual clipmap. |
| |
| * Special Case: |
| TEXTURE_CLIPMAP_LOD_OFFSET_SGIX is ignored |
| TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX === TEXTURE_CLIPMAP_DEPTH_SGIX |
| |
| 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_texture_object |
| |
| If EXT_texture_object is implemented, the state values named |
| |
| TEXTURE_CLIPMAP_FRAME_SGIX |
| TEXTURE_CLIPMAP_CENTER_SGIX |
| TEXTURE_CLIPMAP_OFFSET_SGIX |
| TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX |
| |
| 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 TEXTURE_CLIPMAP_FRAME_SGIX, |
| TEXTURE_CLIPMAP_CENTER_SGIX, TEXTURE_CLIPMAP_OFFSET_SGIX, and |
| TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX parameters restored to their pushed |
| values. |
| |
| Dependencies on SGIS_texture_lod |
| |
| If SGIS_texture_lod is not supported, references to user-defined lod |
| clamping and ranges in this document are invalid and should be ignored. |
| |
| 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 TexParameteriv, TexParameterfv, |
| parameter <pname> is TEXTURE_CLIPMAP_CENTER_SGIX, and either of the two |
| parameters <params> points to are negative. |
| |
| INVALID_VALUE is generated if TexParameteriv, TexParameterfv, |
| parameter <pname> is TEXTURE_CLIPMAP_OFFSET_SGIX, and either of the two |
| parameters <params> points to are negative. |
| |
| INVALID_VALUE is generated if TexParameteriv, TexParameterfv, |
| parameter <pname> is TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX, and any of the |
| three parameters <params> points to are negative. |
| |
| INVALID_VALUE is generated if TexParameteriv, TexParameterfv, |
| parameter <pname> is TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX, and the sum of |
| the clipmap level of detail offset and the clipmap depth is greater than |
| the virtual clipmap depth. |
| |
| New State |
| |
| Initial |
| Get Value Get Command Type Value Attrib |
| --------- ----------- ---- ------- ------ |
| TEXTURE_CLIPMAP_FRAME_SGIX GetTexParameterf Z+ 0 texture |
| TEXTURE_CLIPMAP_CENTER_SGIX GetTexParameterfv 2 x Z+ 0,0 texture |
| TEXTURE_CLIPMAP_OFFSET_SGIX GetTexParameterfv 2 x Z+ 0,0 texture |
| TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX GetTexParameterfv 3 x Z+ 0,0,0 texture |
| |
| |
| New Implementation Dependent State |
| |
| Minimum |
| Get Value Get Command Type Value |
| --------- ----------- ---- ------- |
| MAX_CLIPMAP_DEPTH_SGIX GetIntegerv Z+ 10 |
| MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX GetIntegerv Z+ 10 |