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
    $Date: 2005/06/02 18:11:48 $ $Revision: 1.1 $
    $Id: texture_rectangle.txt,v 1.1 2005/06/02 18:11:48 nightspawn Exp $

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.
