| Name |
| |
| NV_texture_rectangle |
| |
| Name Strings |
| |
| GL_NV_texture_rectangle |
| |
| Contact |
| |
| Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com) |
| |
| Notice |
| |
| Copyright NVIDIA Corporation, 2000, 2001, 2002, 2003, 2004. |
| |
| Status |
| |
| Implemented in NVIDIA's Release 10 drivers. |
| |
| Version |
| |
| NVIDIA Date: March 5, 2004 |
| |
| Number |
| |
| 229 |
| |
| Dependencies |
| |
| Written based on the OpenGL 1.2.1 specification including |
| ARB_texture_cube_map wording. |
| |
| IBM_mirrored_repeat affects the definition of this extension. |
| |
| ARB_texture_border_clamp affects the definition of this extension. |
| |
| EXT_paletted_texture affects the definition of this extension. |
| |
| This extension affects the definition of the NV_texture_shader |
| extension. |
| |
| Overview |
| |
| OpenGL texturing is limited to images with power-of-two dimensions |
| and an optional 1-texel border. NV_texture_rectangle extension |
| adds a new texture target that supports 2D textures without requiring |
| power-of-two dimensions. |
| |
| Non-power-of-two dimensioned textures are useful for storing |
| video images that do not have power-of-two dimensions. Re-sampling |
| artifacts are avoided and less texture memory may be required by using |
| non-power-of-two dimensioned textures. Non-power-of-two dimensioned |
| textures are also useful for shadow maps and window-space texturing. |
| |
| However, non-power-of-two dimensioned (NPOTD) textures have |
| limitations that do not apply to power-of-two dimensioned (POT) |
| textures. NPOTD textures may not use mipmap filtering; POTD |
| textures support both mipmapped and non-mipmapped filtering. |
| NPOTD textures support only the GL_CLAMP, GL_CLAMP_TO_EDGE, |
| and GL_CLAMP_TO_BORDER_ARB wrap modes; POTD textures support |
| GL_CLAMP_TO_EDGE, GL_REPEAT, GL_CLAMP, GL_MIRRORED_REPEAT_IBM, |
| and GL_CLAMP_TO_BORDER. NPOTD textures do not support an optional |
| 1-texel border; POTD textures do support an optional 1-texel border. |
| |
| NPOTD textures are accessed by non-normalized texture coordinates. |
| So instead of thinking of the texture image lying in a [0..1]x[0..1] |
| range, the NPOTD texture image lies in a [0..w]x[0..h] range. |
| |
| This extension adds a new texture target and related state (proxy, |
| binding, max texture size). |
| |
| Issues |
| |
| Should rectangular textures simply be an extension to the 2D texture |
| target that allows non-power-of-two widths and heights? |
| |
| RESOLUTION: No. The rectangular texture is an entirely new texture |
| target type called GL_TEXTURE_RECTANGLE_NV. This is because while |
| the texture rectangle target relaxes the power-of-two dimensions |
| requirements of the texture 2D target, it also has limitations |
| such as the absence of both mipmapping and the GL_REPEAT and |
| GL_MIRRORED_REPEAT_IBM wrap modes. Additionally, rectangular |
| textures do not use [0..1] normalized texture coordinates. |
| |
| How is the image of a rectangular texture specified? |
| |
| RESOLUTION: Using the standard OpenGL API for specifying a 2D |
| texture image: glTexImage2D, glSubTexImage2D, glCopyTexImage2D, |
| and glCopySubTexImage2D. The target for these commands is |
| GL_TEXTURE_RECTANGLE_NV though. |
| |
| This is similar to how the ARB_texture_cube_map extension uses |
| the 2D texture image specification API though with its own texture |
| target. |
| |
| Should 3D textures be allowed to be NPOTD? |
| |
| RESOLUTION: No. That should be left to another extension. |
| |
| Should cube map textures be allowed to be NPOTD? |
| |
| RESOLUTION: No. Probably not particularly interesting for |
| cube maps. If it becomes important, another extension should |
| provide NPOTD cube maps. |
| |
| Should 1D textures be allowed to be NPOTD? |
| |
| RESOLUTION: No. Rectangular textures are always considered 2D |
| by this extension. You can always simulate a 1D NPOTD textures |
| by using a 2D Wx1 or 1xH dimensioned rectangular texture. |
| |
| Should anything be said about performance? |
| |
| RESOLUTION: No, but developers should not be surprised if |
| conventional POTD textures will render slightly faster than NPOTD |
| textures. This is particularly likely to be true when NPOTD |
| textures are minified leading to texture cache thrashing. |
| |
| How are rectangular textures enabled? |
| |
| RESOLUTION: Since rectangular textures add a new texture target, |
| you enable rectangular textures by enabling this target. Example: |
| |
| glEnable(GL_TEXTURE_RECTANGLE_NV); |
| |
| What is the priority of the rectangular texture target enable relative to |
| existing texture enables? |
| |
| RESOLUTION: The texture rectangle target is like a 2D texture in |
| many ways so its enable priority is just above GL_TEXTURE_2D. From |
| lowest priority to highest priority: GL_TEXTURE_1D, GL_TEXTURE_2D, |
| GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_3D, GL_TEXTURE_CUBE_MAP_ARB. |
| |
| What is the default wrap state for a texture rectangle? |
| |
| RESOLUTION: GL_CLAMP_TO_EDGE. The normal default wrap state is |
| GL_REPEAT, but that mode is not allowed for rectangular textures? |
| |
| What is the default minification filter for a texture rectangle? |
| |
| RESOLUTION: GL_LINEAR. The normal default minification filter |
| state is GL_NEAREST_MIPMAP_LINEAR, but that mode is not allowed |
| for rectangular textures because mipmapping is not supported. |
| |
| Do paletted textures work with rectangular textures? |
| |
| RESOLUTION: No. Similar (but not identical) functionality can |
| be accomplished using dependent texture shader operations (see |
| NV_texture_shader). |
| |
| The difference between paletted texture accesses and dependent |
| texture accesses is that paletted texture lookups are |
| "pre-filtering" while dependent texture shader operations are |
| "post-filtering". |
| |
| Can compressed texture images be specified for a rectangular texture? |
| |
| RESOLUTION: The generic texture compression internal formats |
| introduced by ARB_texture_compression are supported for rectangular |
| textures because the image is not presented as compressed data and |
| the ARB_texture_compression extension always permits generic texture |
| compression internal formats to be stored in uncompressed form. |
| Implementations are free to support generic compression internal |
| formats for rectangular textures if supported but such support is |
| not required. |
| |
| This extensions makes a blanket statement that specific compressed |
| internal formats for use with CompressedTexImage<n>DARB are NOT |
| supported for rectangular textures. This is because several |
| existing hardware implementations of texture compression formats |
| such as S3TC are not designed for compressing rectangular textures. |
| This does not preclude future texture compression extensions from |
| supporting compressed internal formats that do work with rectangular |
| extensions (by relaxing the current blanket error condition). |
| |
| Does this extension work with SGIX_shadow-style shadow mapping? |
| |
| RESOLUTION: Yes. The one non-obvious allowance to support |
| SGIX_shadow-style shadow mapping is that the R texture coordinate |
| wrap mode remains UNCHANGED for rectangular textures. Clamping of |
| the R texture coordinate for rectangular textures uses the standard |
| [0,1] interval rather than the [0,ws] or [0,hs] intervals as in |
| the case of S and T. This is because R represents a depth value |
| in the [0,1] range whether using a 2D or rectangular texture. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <cap> parameter of Enable, Disable, IsEnabled, and |
| by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, |
| and GetDoublev, and by the <target> parameter of BindTexture, |
| GetTexParameterfv, GetTexParameteriv, TexParameterf, TexParameteri, |
| TexParameterfv, and TexParameteriv: |
| |
| TEXTURE_RECTANGLE_NV 0x84F5 |
| |
| Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, |
| GetFloatv, and GetDoublev: |
| |
| TEXTURE_BINDING_RECTANGLE_NV 0x84F6 |
| |
| Accepted by the <target> parameter of GetTexImage, |
| GetTexLevelParameteriv, GetTexLevelParameterfv, TexImage2D, |
| CopyTexImage2D, TexSubImage2D, and CopySubTexImage2D: |
| |
| TEXTURE_RECTANGLE_NV |
| |
| Accepted by the <target> parameter of GetTexLevelParameteriv, |
| GetTexLevelParameterfv, GetTexParameteriv, and TexImage2D: |
| |
| PROXY_TEXTURE_RECTANGLE_NV 0x84F7 |
| |
| Accepted by the <pname> parameter of GetBooleanv, GetDoublev, |
| GetIntegerv, and GetFloatv: |
| |
| MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 |
| |
| Additions to Chapter 2 of the GL Specification (OpenGL Operation) |
| |
| None |
| |
| Additions to Chapter 3 of the GL Specification (Rasterization) |
| |
| -- Section 3.6.3 "Pixel Transfer Modes" under "Color Table |
| Specification" or the ColorTableEXT description in the |
| EXT_paletted_texture specification (rev 1.2) |
| |
| Add the following statement after introducing ColorTableEXT: |
| |
| "The error INVALID_ENUM is generated if the target to ColorTable (or |
| ColorTableEXT or the various ColorTable and ColorTableEXT alternative |
| commands) is TEXTURE_RECTANGLE_NV or PROXY_TEXTURE_RECTANGLE_NV." |
| |
| -- Section 3.8.1 "Texture Image Specification" |
| |
| Change the second sentence through the rest of the paragraph |
| describing TexImage2D on page 116 to: |
| |
| "<target> must be one of TEXTURE_2D for a 2D texture, or one |
| of TEXTURE_RECTANGLE_NV for a rectangle texture, or one of |
| TEXTURE_CUBE_MAP_POSITIVE_X_ARB, TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, |
| TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, |
| TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, or TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB |
| for a cube map texture. Additionally, <target> can be either |
| PROXY_TEXTURE_2D for a 2D proxy texture or PROXY_TEXTURE_RECTANGLE_NV |
| for a rectangle proxy texture or PROXY_TEXTURE_CUBE_MAP_ARB for a |
| cube map proxy texture as discussed in section 3.8.7. |
| The other parameters match the corresponding parameters of TexImage3D." |
| |
| Add a following paragraph reading: |
| |
| "Rectangular textures do not support paletted formats. The error |
| INVALID_ENUM is generated if the target is TEXTURE_RECTANGLE_NV |
| or PROXY_TEXTURE_RECTANGLE_NV and the format is COLOR_INDEX or |
| the internalformat is COLOR_INDEX or one of the COLOR_INDEX<n>_EXT |
| internal formats." |
| |
| Change the 14th paragraph (page 116) to read: |
| |
| "In a similar fashion, the maximum allowable width of a rectangular |
| texture image, and the maximum allowable height of a rectangular |
| texture image, must be at least the implementation-dependent value |
| of MAX_RECTANGLE_TEXTURE_SIZE_NV." |
| |
| Add the following paragraph after the paragraph introducing |
| TexImage2D (page 116): |
| |
| "When the target is TEXTURE_RECTANGLE_NV, the INVALID_VALUE error is |
| generated if border is any value other than zero or the level is any |
| value other than zero. Also when the target is TEXTURE_RECTANGLE_NV, |
| the texture dimension restrictions specified by equations 3.11, |
| 3.12, and 3.13 are ignored; however, if the width is less than zero or |
| the height is less than zero, the error INVALID_VALUE is generated. |
| In the case of a rectangular texture, ws and hs equal the specified |
| width and height respectively of the rectangular texture image |
| while ds is 1." |
| |
| Amend the following paragraph that was added by the |
| ARB_texture_cube_map specification after the first paragraph on |
| page 117: |
| |
| "A 2D texture consists of a single 2D texture image. A rectangle |
| texture consists of a single 2D texture image. A cube map texture |
| is a set of six 2D texture images. The six cube map texture |
| targets form a single cube map texture though each target names |
| a distinct face of the cube map. The TEXTURE_CUBE_MAP_*_ARB |
| targets listed above update their appropriate cube map face 2D |
| texture image. Note that the six cube map 2D image tokens such as |
| TEXTURE_CUBE_MAP_POSITIVE_X_ARB are used when specifying, updating, |
| or querying one of a cube map's six 2D image, but when enabling cube |
| map texturing or binding to a cube map texture object (that is when |
| the cube map is accessed as a whole as opposed to a particular 2D |
| image), the TEXTURE_CUBE_MAP_ARB target is specified." |
| |
| Append to the end of the third to the last paragraph in the section |
| (page 118): |
| |
| "A rectangular texture array has depth dt=1, with height ht and width |
| wt defined by the specified image height and width parameters." |
| |
| -- Section 3.8.2 "Alternate Texture Image Specification Commands" |
| |
| Add TEXTURE_RECTANGLE_NV to the second paragraph (page 120) to say: |
| |
| ... "Currently, <target> must be TEXTURE_2D, |
| TEXTURE_RECTANGLE_NV, TEXTURE_CUBE_MAP_POSITIVE_X_ARB, |
| TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, |
| TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, |
| or TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB." ... |
| |
| Add TEXTURE_RECTANGLE_NV to the fourth paragraph (page 121) to say: |
| |
| ... "Currently the target arguments of TexSubImage1D and |
| CopyTexSubImage1D must be TEXTURE_1D, the <target> arguments of |
| TexSubImage2D and CopyTexSubImage2D must be one of TEXTURE_2D, |
| TEXTURE_RECTANGLE_NV, TEXTURE_CUBE_MAP_POSITIVE_X_ARB, |
| TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, |
| TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, |
| or TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, and the <target> arguments of |
| TexSubImage3D and CopyTexSubImage3D must be TEXTURE_3D." ... |
| |
| Also add to the end of the fourth paragraph (121): |
| |
| "If target is TEXTURE_RECTANGLE_NV and level is not zero, the error |
| INVALID_VALUE is generated." |
| |
| -- Section "Compressed Texture Images" in the ARB_texture_compression |
| specification |
| |
| Add the following paragraph after introducing the |
| CompressedTexImage<n>DARB commands: |
| |
| "The error INVALID_ENUM is generated if the target parameter to one |
| of the CompressedTexImage<n>DARB commands is TEXTURE_RECTANGLE_NV." |
| |
| Add the following paragraph after introducing the |
| CompressedTexSubImage<n>DARB commands: |
| |
| "The error INVALID_ENUM is generated if the target parameter |
| to one of the CompressedTexSubImage<n>DARB commands is |
| TEXTURE_RECTANGLE_NV." |
| |
| -- Section 3.8.3 "Texture Parameters" |
| |
| Add TEXTURE_RECTANGLE_NV to paragraph one (page 124) to say: |
| |
| ... "<target> is the target, either TEXTURE_1D, TEXTURE_2D, |
| TEXTURE_RECTANGLE_NV, TEXTURE_3D, or TEXTURE_CUBE_MAP_ARB." ... |
| |
| Add the following paragraph to the end of the section (page 134): |
| |
| "Certain texture parameter values may not be specified for textures |
| with a target of TEXTURE_RECTANGLE_NV. The error INVALID_ENUM |
| is generated if the target is TEXTURE_RECTANGLE_NV and the |
| TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R parameter is set to |
| REPEAT or MIRRORED_REPEAT_IBM. The error INVALID_ENUM is generated |
| if the target is TEXTURE_RECTANGLE_NV and the TEXTURE_MIN_FILTER is |
| set to a value other than NEAREST or LINEAR (no mipmap filtering |
| is permitted). The error INVALID_ENUM is generated if the target |
| is TEXTURE_RECTANGLE_NV and TEXTURE_BASE_LEVEL is set to any value |
| other than zero." |
| |
| -- Section 3.8.4 "Texture Wrap Modes" |
| |
| Add this final additional paragraph: |
| |
| "Texture coordinates are clamped differently for rectangular |
| textures. The r texture coordinate is wrapped as described above (as |
| required for shadow mapping to operate correctly). When the texture |
| target is TEXTURE_RECTANGLE_NV, the s and t coordinates are wrapped |
| as follows: CLAMP causes the s coordinate to be clamped to the range |
| [0,ws]. CLAMP causes the t coordinate to be clamped to the range |
| [0,hs]. CLAMP_TO_EDGE causes the s coordinate to be clamped to |
| the range [0.5,ws-0.5]. CLAMP_TO_EDGE causes the t coordinate |
| to be clamped to the range [0.5,hs-0.5]. CLAMP_TO_BORDER_ARB |
| causes the s coordinate to be clamped to the range [-0.5,ws+0.5]. |
| CLAMP_TO_BORDER_ARB causes the t coordinate to be clamped to the |
| range [-0.5,hs+0.5]." |
| |
| -- Section 3.8.5 "Texture Minification" under "Mipmapping" |
| |
| Change the second full paragraph on page 126 to read: |
| |
| "For non-rectangular textures, let u(x,y) = 2^n*s(x,y), v(x,y) = |
| 2^m*t(x,y), and w(x,y) = 2^l*r(x,y), where n, m, and l are defined |
| by equations 3.11, 3.12, and 3.13 with ws, hs, and ds equal to |
| the width, height, and depth of the image array whose level is |
| TEXTURE_BASE_LEVEL. However, for rectangular textures let u(x,y) |
| = s(x,y), v(x,y) = t(x,y), and w(x,y) = r(x,y)." |
| |
| Update the last sentence in the first full paragraph on page 127 |
| to read: |
| |
| "Depending on whether the texture's target is rectangular or |
| non-rectangular, this means the texel at location (i,j,k) becomes |
| the texture value, with i given by |
| |
| / floor(u), s < 1 |
| / |
| i = { 2^n-1, s == 1, non-rectangular texture (3.17) |
| \ |
| \ ws-1, s == 1, rectangular texture |
| |
| (Recall that if TEXTURE_WRAP_S is REPEAT, then 0 <= s < 1.) Similarly, |
| j is found as |
| |
| / floor(v), t < 1 |
| / |
| j = { 2^m-1, t == 1, non-rectangular texture (3.18) |
| \ |
| \ hs-1, t == 1, rectangular texture |
| |
| and k is found as |
| |
| / floor(w), r < 1 |
| / |
| k = { 2^l-1, r == 1, non-rectangular texture (3.19) |
| \ |
| \ 0, r == 1, rectangular texture" |
| |
| Change the last sentence in the partial paragraph after equation |
| 3.19 to read: |
| |
| "For a two-dimensional or rectangular texture, k is irrelevant; |
| the texel at location (i,j) becomes the texture value." |
| |
| Change the sentence preceding equation 3.20 (page 128) specifying |
| how to compute the value tau for a two-dimensional texture to: |
| |
| "For a two-dimensional or rectangular texture," |
| |
| Follow the first full paragraph on page 130 with: |
| |
| "Rectangular textures do not support mipmapping (it is an error to |
| specify a minification filter that requires mipmapping)." |
| |
| -- Section 3.8.7 "Texture State and Proxy State" |
| |
| Change the first sentence of the first paragraph (page 131) to say: |
| |
| "The state necessary for texture can be divided into two categories. |
| First, there are the ten sets of mipmap arrays (one each for the |
| one-, two-, and three-dimensional texture targets, one for the |
| rectangular texture target (though the rectangular texture target |
| has only one mipmap level), and six for the cube map texture targets) |
| and their number." ... |
| |
| Change the fourth and third to last sentences of the first paragraph |
| to say: |
| |
| "In the initial state, the value assigned to TEXTURE_MIN_FILTER |
| is NEAREST_MIPMAP_LINEAR, except for rectangular textures where |
| the initial value is LINEAR, and the value for TEXTURE_MAG_FILTER |
| is LINEAR. s, t, and r warp modes are all set to REPEAT, except |
| for rectangular textures where the initial value is CLAMP_TO_EDGE." |
| |
| Change the second paragraph (page 132) to say: |
| |
| "In addition to the one-, two-, three-dimensional, rectangular, and |
| the six cube map sets of image arrays, the partially instantiated |
| one-, two-, and three-dimensional, rectangular, and one cube map |
| sets of proxy image arrays are maintained." ... |
| |
| Change the third paragraph (page 132) to: |
| |
| "One- and two-dimensional and rectangular proxy arrays are operated |
| on in the same way when TexImage1D is executed with target specified |
| as PROXY_TEXTURE_1D, or TexImage2D is executed with target specified |
| as PROXY_TEXTURE_2D or PROXY_TEXTURE_RECTANGLE_NV." |
| |
| Change the second sentence of the fourth paragraph (page 132) to: |
| |
| "Therefore PROXY_TEXTURE_1D, PROXY_TEXTURE_2D, |
| PROXY_TEXTURE_RECTANGLE_NV, PROXY_TEXTURE_3D, and |
| PROXY_TEXTURE_CUBE_MAP_ARB cannot be used as textures, and their |
| images must never be queried using GetTexImage." ... |
| |
| -- Section 3.8.8 "Texture Objects" |
| |
| Change the first sentence of the first paragraph (page 132) to say: |
| |
| "In addition to the default textures TEXTURE_1D, TEXTURE_2D, |
| TEXTURE_RECTANGLE_NV, TEXTURE_3D, and TEXTURE_CUBE_MAP_ARB, named |
| one-dimensional, two-dimensional, rectangular, and three-dimensional |
| texture objects and cube map texture objects can be created and |
| operated on." ... |
| |
| Change the second paragraph (page 132) to say: |
| |
| "A texture object is created by binding an unused name to |
| TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, or |
| TEXTURE_CUBE_MAP_ARB." ... "If the new texture object is bound |
| to TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, or |
| TEXTURE_CUBE_MAP_ARB, it remains a one-dimensional, two-dimensional, |
| rectangular, three-dimensional, or cube map texture until it is |
| deleted." |
| |
| Change the third paragraph (page 133) to say: |
| |
| "BindTexture may also be used to bind an existing texture object |
| to either TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, |
| or TEXTURE_CUBE_MAP_ARB." |
| |
| Change paragraph five (page 133) to say: |
| |
| "In the initial state, TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, |
| TEXTURE_3D, and TEXTURE_CUBE_MAP have one-dimensional, |
| two-dimensional, rectangular, three-dimensional, and cube map state |
| vectors associated with them respectively." ... "The initial, |
| one-dimensional, two-dimensional, rectangular, three-dimensional, and |
| cube map texture is therefore operated upon, queried, and applied |
| as TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, |
| and TEXTURE_CUBE_MAP_ARB respectively while 0 is bound to the |
| corresponding targets." |
| |
| Change paragraph six (page 133) to say: |
| |
| ... "If a texture that is currently bound to one of the targets |
| TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, or |
| TEXTURE_CUBE_MAP_ARB is deleted, it is as though BindTexture has |
| been executed with the same <target> and <texture> zero." ... |
| |
| -- Section 3.8.10 "Texture Application" |
| |
| Replace the beginning sentences of the first paragraph (page 138) |
| with: |
| |
| "Texturing is enabled or disabled using the generic Enable and |
| Disable commands, respectively, with the symbolic constants |
| TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, |
| or TEXTURE_CUBE_MAP_ARB to enable the one-dimensional, |
| two-dimensional, rectangular, three-dimensional, or cube map |
| texturing respectively. If both two- and one-dimensional textures |
| are enabled, the two-dimensional texture is used. If the rectangular |
| and either of the two- or one-dimensional textures is enabled, the |
| rectangular texture is used. If the three-dimensional and any of the |
| rectangular, two-dimensional, or one-dimensional textures is enabled, |
| the three-dimensional texture is used. If the cube map texture |
| and any of the three-dimensional, rectangular, two-dimensional, |
| or one-dimensional textures is enabled, then cube map texturing is |
| used. |
| |
| Additions to Chapter 4 of the GL Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| None |
| |
| Additions to Chapter 5 of the GL Specification (Special Functions) |
| |
| -- Section 5.4 "Display Lists" |
| |
| In the first paragraph (page 179), add PROXY_TEXTURE_RECTANGLE_NV |
| to the list of PROXY_* tokens. |
| |
| Additions to Chapter 6 of the GL Specification (State and State Requests) |
| |
| -- Section 6.1.3 "Enumerated Queries" |
| |
| Change the fourth paragraph (page 183) to say: |
| |
| "The GetTexParameter parameter <target> may be one of |
| TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, or |
| TEXTURE_CUBE_MAP_ARB, indicating the currently bound one-dimensional, |
| two-dimensional, rectangular, three-dimensional, or cube map |
| texture object. For GetTexLevelParameter, <target> may be one |
| of TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_NV, TEXTURE_3D, |
| TEXTURE_CUBE_MAP_POSITIVE_X_ARB, TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, |
| TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, |
| TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, |
| PROXY_TEXTURE_1D, PROXY_TEXTURE_2D, PROXY_TEXTURE_RECTANGLE_NV, |
| PROXY_TEXTURE_3D, or PROXY_TEXTURE_CUBE_MAP_ARB, indicating the |
| one-dimensional texture object, two-dimensional texture object, |
| rectangular texture object, three-dimensional texture object, or one |
| of the six distinct 2D images making up the cube map texture object |
| or one-dimensional, two-dimensional, rectangular, three-dimensional, |
| or cube map proxy state vector. Note that TEXTURE_CUBE_MAP_ARB is |
| not a valid <target> parameter for GetTexLevelParameter because it |
| does not specify a particular cube map face." |
| |
| -- Section 6.1.4 "Texture Queries" |
| |
| Change the first paragraph (page 184) to read: |
| |
| ... "It is somewhat different from the other get commands; <tex> is a |
| symbolic value indicating which texture (or texture face in the case |
| of a cube map texture target name) is to be obtained. TEXTURE_1D |
| indicates a one-dimensional texture, TEXTURE_2D indicates a |
| two-dimensional texture, TEXTURE_RECTANGLE_NV indicates a rectangular |
| texture, TEXTURE_3D indicates a three-dimensional texture, and |
| TEXTURE_CUBE_MAP_POSITIVE_X_ARB, TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, |
| TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, |
| TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, and TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB |
| indicate the respective face of a cube map texture." |
| |
| Add a final sentence to the fourth paragraph: |
| |
| "Calling GetTexImage with a lod not zero when the tex is |
| TEXTURE_RECTANGLE_NV causes the error INVALID_VALUE." |
| |
| Additions to the GLX Specification |
| |
| None |
| |
| GLX Protocol |
| |
| None |
| |
| Dependencies on ARB_texture_border_clamp |
| |
| If ARB_texture_border_clamp is not supported, references to the |
| CLAMP_TO_BORDER_ARB wrap mode in this document should be ignored. |
| |
| Dependencies on IBM_mirrored_repeat |
| |
| If IBM_mirrored_repeat is not supported, references to the |
| MIRRORED_REPEAT_IBM wrap mode in this document should be ignored. |
| |
| Dependencies on EXT_paletted_texture |
| |
| If EXT_paletted_texture is not supported, references to the |
| COLOR_INDEX, COLOR_INDEX<n>_EXT, ColorTable, and ColorTableEXT should |
| be ignored. |
| |
| Dependencies on EXT_texture_compression_s3tc |
| |
| If EXT_texture_compression_s3tc is not supported, references |
| to CompressedTexImage2DARB and CompressedTexSubImageARB and the |
| COMPRESSED_*_S3TC_DXT*_EXT enumerants should be ignored. |
| |
| Errors |
| |
| INVALID_ENUM is generated when ColorTable (or ColorTableEXT or the |
| various ColorTable and ColorTableEXT alternative commands) is called |
| and the target is TEXTURE_RECTANGLE_NV or PROXY_TEXTURE_RECTANGLE_NV. |
| |
| INVALID_ENUM is generated when TexImage2D is called and the target |
| is TEXTURE_RECTANGLE_NV or PROXY_TEXTURE_RECTANGLE_NV and the format |
| is COLOR_INDEX or the internalformat is COLOR_INDEX or one of the |
| COLOR_INDEX<n>_EXT internal formats. |
| |
| INVALID_VALUE is generated when TexImage2D is called when the target |
| is TEXTURE_RECTANGLE_NV if border is any value other than zero or |
| the level is any value other than zero. |
| |
| INVALID_VALUE is generated when TexImage2D is called when the target |
| is TEXTURE_RECTANGLE_NV if the width is less than zero or the height |
| is less than zero. |
| |
| INVALID_VALUE is generated when TexSubImage2D or CopyTexSubImage2D |
| is called when the target is TEXTURE_RECTANGLE_NV if the level is |
| any value other than zero. |
| |
| INVALID_ENUM is generated when one of the CompressedTexImage<n>DARB |
| commands is called when the target parameter is TEXTURE_RECTANGLE_NV. |
| |
| INVALID_ENUM is generated when one of the CompressedTexSubImage<n>DARB |
| commands is called when the target parameter is TEXTURE_RECTANGLE_NV. |
| |
| INVALID_ENUM is generated when TexParameter is called with a |
| target of TEXTURE_RECTANGLE_NV and the TEXTURE_WRAP_S, TEXTURE_WRAP_T, |
| or TEXTURE_WRAP_R parameter is set to REPEAT or MIRRORED_REPEAT_IBM. |
| |
| INVALID_ENUM is generated when TexParameter is called with a |
| target of TEXTURE_RECTANGLE_NV and the TEXTURE_MIN_FILTER is set to |
| a value other than NEAREST or LINEAR. |
| |
| INVALID_VALUE is generated when TexParameter is called with a |
| target of TEXTURE_RECTANGLE_NV and the TEXTURE_BASE_LEVEL is set to |
| any value other than zero. |
| |
| INVALID_VALUE is generated when GetTexImage is called with a lod |
| not zero when the tex is TEXTURE_RECTANGLE_NV. |
| |
| New State |
| |
| (table 6.12, p202) amend/add the following entries: |
| |
| Get Value Type Get Command Initial Value Description Sec Attribute |
| ---------------------------- ---- ----------- ------------- --------------------- ------ -------------- |
| TEXTURE_RECTANGULAR_NV B IsEnabled False True if rectangular 3.8.10 texture/enable |
| texturing is enabled |
| TEXTURE_BINDING_RECTANGLE_NV Z+ GetIntegerv 0 Texture object 3.8.8 texture |
| for texture rectangle |
| TEXTURE_RECTANGLE_NV I GetTexImage see 3.8 rectangular texture 3.8 - |
| image for lod 0 |
| |
| |
| (table 6.13, p203) amend/add the following entries: |
| |
| Get Value Type Get Command Initial Value Description Sec Attribute |
| ------------------ ----- --------------- --------------------- -------------------- ----- --------- |
| TEXTURE_MIN_FILTER 2+xZ6 GetTexparameter NEAREST_MIPMAP_LINEAR Texture minification 3.8.5 texture |
| except for function |
| rectangular which is |
| LINEAR |
| TEXTURE_WRAP_S 5+xZ5 GetTexParameter REPEAT except Texture wrap mode S 3.8 texture |
| for rectangular |
| which is |
| CLAMP_TO_EDGE |
| TEXTURE_WRAP_T 5+xZ5 GetTexParameter REPEAT except Texture wrap mode T 3.8 texture |
| for rectangular |
| which is |
| CLAMP_TO_EDGE |
| TEXTURE_WRAP_R 5+xZ5 GetTexParameter REPEAT except Texture wrap mode R 3.8 texture |
| for rectangular |
| which is |
| CLAMP_TO_EDGE |
| |
| New Implementation Dependent State |
| |
| (table 6.24, p214) add the following entry: |
| |
| Get Value Type Get Command Minimum Value Description Sec Attribute |
| ----------------------------- ---- ----------- ------------- ------------------- ----- --------- |
| MAX_RECTANGLE_TEXTURE_SIZE_NV Z+ GetIntegerv 64 Maximum rectangular 3.8.1 - |
| texture image |
| dimension |
| |
| Revision History |
| |
| Jan 2, 2003 - Fix typo in 4th paragraph of Overview to read: "NPOTD |
| textures are accessed by non-normalized texture coordinates." |
| |
| March 5, 2004 - Delete update to the convolution section because |
| it was bogus language in the OpenGL 1.2.1 specification saying |
| convolution affects glGetTexImage (it does not); this language was |
| deleted in OpenGL 1.3. Fix minor typo in 6.12 table. |