OpenGL Extension Specification

EXT_texture_rectangle

-- Preliminary Specification --

Name

     EXT_texture_rectangle

Name Strings

     GL_EXT_texture_rectangle

Contributors

     Daniel Ginsburg
     Mark J. Kilgard
     Geoff Stahl
     
Contact

     Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)
     Geoff Stahl, Apple Computer (gstahl 'at' apple.com)

Notice

     Copyright NVIDIA Corporation, 2000, 2001, 2002.

Status

     Shipping (Implemented in Mac OS X version 10.1 and in NVIDIA's
     Release 10 drivers.

Version

    $Date: 2002/08/22 22:57:17 $ $Revision: 1.4 $

Number

     XXX - Unknown

Dependencies

     OpenGL 1.1 is required
     ARB_mirrored_repeat affects the definition of this extension.
     EXT_paletted_texture affects the definition of this extension.
     EXT_texture_compression_s3tc affects the definition of this
     extension.
     This extension is written against the OpenGL 1.3 specification.
     
Overview

     The EXT_texture_rectangle extension adds the ability to accept
     borderless non-power of two (a.k.a., rectangular) textures by
     means of a new texture target, TEXTURE_RECTANGLE_EXT, for two
     dimensional texturing.

     Textures using the TEXTURE_RECTANGLE_EXT texture target have
     both different limitations and implementation specifics from
     textures utilizing the GL_TEXTURE_2D, or other, target.

Issues

  *  Is mipmap filtering permitted?

     Mipmap filtering is not permitted.  Since this is the case the
     default minification filter for TEXTURE_RECTANGLE_EXT targets is
     GL_LINEAR.

  *  What texture wrap modes are allowed and what is the default
     state?

     Only the GL_CLAMP, GL_CLAMP_TO_EDGE, and CLAMP_TO_BORDER wrap
     modes are allowed.  CLAMP_TO_EDGE is the default state.
     REPEAT and MIRRORED_REPEAT_ARB are not supported with the
     TEXTURE_RECTANGLE_EXT texture target.

  *  Are texture borders supported?

     Borders are not supported.

  *  Are paletted textures supported?

     Paletted rectangular textures are not supported.

  *  What is the status of the use of texture compression in
     conjunction with this extension?

     While texture compression is not specifically precluded, certain
     compression schemes are incompatible with rectangular textures thus
     compressed internal textures formats, in general, are not supported
     with this extension.

  *  How are rectangular textures enabled?

     Rectangular textures are enabled by enabling the
     TEXTURE_RECTANGLE_EXT texture target via Enable
     (TEXTURE_RECTANGLE_EXT). This enable is prioritized above
     TEXTURE_2D and below TEXTURE_3D.

  *  What texture target should be used?

     The texture target TEXTURE_RECTANGLE_EXT should be used for
     GetTexImage, GetTexLevelParameteriv, GetTexLevelParameterfv,
     TexImage2D, CopyTexImage2D, TexSubImage2D, and CopySubTexImage2D
     functions.

  *  How are texture coordinates addressed for rectangular textures?

     Texture coordinates are addressed without being normalized from
     [0..1], instead [0..w] and [0..h] are used, where w and h are width
     and height of the texture respectively.

  *  How should applications determine the available maximum texture
     dimensions available?

     Implementation dependent rectangular texture size limitations are
     queried using the MAX_RECTANGLE_TEXTURE_SIZE_EXT parameter and
     may be different that standard texture size limits.

  *  How does the handling of the R texture component differ from
     the handling of S and T?

     The R texture coordinate for rectangular textures is handled as it
     would be for standard two dimensional textures.  Thus the
     coordinates range from [0..1] and the wrapping mode is unchanged
     from the default.

New Procedures and Functions

    None

New Tokens

     Accepted by the <cap> parameter of Enable, Disable and
     IsEnabled; 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_EXT            0x84F5
     
     Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
     GetFloatv and GetDoublev:

     TEXTURE_BINDING_RECTANGLE_EXT    0x84F6
     
     Accepted by the <target> parameter of GetTexLevelParameteriv,
     GetTexLevelParameterfv, GetTexParameteriv and TexImage2D:

     PROXY_TEXTURE_RECTANGLE_EXT      0x84F7
     
     Accepted by the <pname> parameter of GetBooleanv, GetDoublev,
     GetIntegerv and GetFloatv:

     MAX_RECTANGLE_TEXTURE_SIZE_EXT   0x84F8

     Accepted by the <target> parameter of GetTexImage,
     GetTexLevelParameteriv, GetTexLevelParameterfv, TexImage2D,
     CopyTexImage2D, TexSubImage2D and CopySubTexImage2D:

     TEXTURE_RECTANGLE_EXT

Additions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation)

     None

Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization)

   These changes describe use of the TEXTURE_RECTANGLE_EXT texture
   target, supported formats, texture dimensions, and texture proxies:

   - (3.6.3, pg.84)  "Pixel Transfer Modes" under "Color Table
     Specification" or the ColorTableEXT description in the
     EXT_paletted_texture specification

     Add the following statement after paragraph 5 of the sub-section:

     "The error INVALID_ENUM is generated if the target to ColorTable (or
     ColorTableEXT or the various ColorTable and ColorTableEXT
     alternative commands) is TEXTURE_RECTANGLE_EXT or
     PROXY_TEXTURE_RECTANGLE_EXT."

   - (3.6.5, pg. 106) "Pixel Transfer Operations" under "Convolution"

     Change the first paragraph in this sub-section, 3rd sentence to
     read:

     "If CONVOLUTION_2D is enabled, the two-dimensional convolution
     filter is applied only to the two-dimensional images passed to
     DrawPixels, CopyPixels, ReadPixels, TexImage2D, TexSubImage2D,
     CopyTexImage2D, CopyTexSubImage2D, and CopyTexSubImage3D, and
     returned by GetTexImage with one of the targets TEXTURE_2D,
     TEXTURE_RECTANGLE_EXT, TEXTURE_CUBE_MAP_POSITIVE_X,
     TEXTURE_CUBE_MAP_NEGATIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y,
     TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_POSITIVE_Z, or
     TEXTURE_CUBE_MAP_NEGATIVE_Z."

   - (3.8.1, pg. 121) "Texture Image Specification"

     Add a sentence to the middle of the 16th paragraph of the section
     (third paragraph on the page), directly after "... for image arrays
     of level 0 through k, where k is the log base 2 of
     MAX_TEXTURE_SIZE." reading:

     "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_EXT."

   - (3.8.1, pg. 121) "Texture Image Specification"

     In the 18th paragraph of this section (sixth paragraph on the page),
     change the sentence following "The command void TexImage2D ... a
     two-dimensional texture image." through the rest of the paragraph in
     the section describing two-dimensional texturing to read:

     "<target> must be one of TEXTURE_2D for a 2D texture, or one of
     TEXTURE_RECTANGLE_EXT for a rectangle texture, or one of
     TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_NEGATIVE_X,
     TEXTURE_CUBE_MAP_POSITIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Y,
     TEXTURE_CUBE_MAP_POSITIVE_Z, or TEXTURE_CUBE_MAP_NEGATIVE_Z for a
     cube map texture. Additionally, <target> may be either
     PROXY_TEXTURE_2D for a 2D proxy texture, PROXY_TEXTURE_RECTANGLE_EXT
     for a rectangle proxy texture or PROXY_TEXTURE_CUBE_MAP for a cube
     map proxy texture as discussed in section 3.8.10. The other
     parameters match the corresponding parameters of TexImage3D."

   - (3.8.1, pg. 121) "Texture Image Specification"

     Add 2 paragraphs following the above two-dimensional texturing
     introduction, reading:

     "Rectangular textures do not support paletted formats. The error
     INVALID_ENUM is generated if the target is TEXTURE_RECTANGLE_EXT or
     PROXY_TEXTURE_RECTANGLE_EXT and the format is COLOR_INDEX or the
     internal format is COLOR_INDEX or one of the COLOR_INDEX<n>_EXT
     internal formats."

     When the target is TEXTURE_RECTANGLE_EXT, 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_EXT, 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."
    
  - (3.8.1, pg. 122) "Texture Image Specification"
    
    Amend the second paragraph on the page to read:
    
    "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 two-dimensional 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 *
    targets listed above update their appropriate cube map face 2D
    texture image. Note that the six cube map two-dimensional image
    tokens such as TEXTURE CUBE MAP POSITIVE X are used when specifying,
    updating, or querying one of a cube map's six two-dimensional
    images, 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 two-dimensional image), the TEXTURE CUBE
    MAP target is specified."
    
  - (3.8.1, pg. 123) "Texture Image Specification"
    
    Append to the end of the third to the last paragraph in the section:
    
    "A rectangular texture array has depth dt=1, with height ht and
    width wt defined by the specified image height and width
    parameters."
    
  - (3.8.2, pg. 125) "Alternate Texture Image Specification Commands"
    
    Add TEXTURE_RECTANGLE_EXT to the target list of the second paragraph
    of the section to say:
    
    ... "Currently, <target> must be TEXTURE_2D, TEXTURE_RECTANGLE_EXT,
    TEXTURE_CUBE_MAP_POSITIVE_X, TEXTURE_CUBE_MAP_NEGATIVE_X,
    TEXTURE_CUBE_MAP_POSITIVE_Y, TEXTURE_CUBE_MAP_NEGATIVE_Y,
    TEXTURE_CUBE_MAP_POSITIVE_Z, or TEXTURE_CUBE_MAP_NEGATIVE_Z." ...
    
  - (3.8.2, pg. 126) "Alternate Texture Image Specification Commands"
    
    Add TEXTURE_RECTANGLE_EXT to the target list in the fourth paragraph
    of the section 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_EXT, TEXTURE_CUBE_MAP_POSITIVE_X,
    TEXTURE_CUBE_MAP_NEGATIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y,
    TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_POSITIVE_Z, or
    TEXTURE_CUBE_MAP_NEGATIVE_Z, and the <target> arguments of
    TexSubImage3D and CopyTexSubImage3D must be TEXTURE_3D." ...
    
    Also append to the end of this paragraph:
    
    "If target is TEXTURE_RECTANGLE_EXT and level is not zero, the error
    INVALID_VALUE is generated."
    
  - (3.8.3, pg. 129) "Compressed Texture Images"
    
    Add the following paragraph after the second paragraph in the
    section, which introduces 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_EXT."
    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_EXT."
    
  - (3.8.4, pg. 132) "Texture Parameters"
    
    Add TEXTURE_RECTANGLE_EXT to paragraph one to say:

    ... "<target> is the target, either TEXTURE_1D, TEXTURE_2D,
    TEXTURE_RECTANGLE_EXT, TEXTURE_3D, or TEXTURE_CUBE_MAP." ...
    
  - (3.8.4, pg. 133) "Texture Parameters"
    
    Add the following paragraph to the end of the section after Table
    3.19:
    
    "Certain texture parameter values may not be specified for textures
    with a target of TEXTURE_RECTANGLE_EXT. The error INVALID_ENUM is
    generated if the target is TEXTURE_RECTANGLE_EXT and the
    TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_WRAP_R parameter is set
    to REPEAT or MIRRORED_REPEAT_ARB. The error INVALID_ENUM is
    generated if the target is TEXTURE_RECTANGLE_EXT 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_EXT and
    TEXTURE_BASE_LEVEL is set to any value other than zero."
    
  - (3.8.5, pg. 135) "Texture Wrap Modes"
    
    Add this final additional paragraph after Table 3.20:

    "Texture coordinates are clamped differently for rectangular
    textures. The r texture coordinate is wrapped as described above.
    When the texture target is TEXTURE_RECTANGLE_EXT, 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 causes the s coordinate to be clamped to the range
    [-0.5, ws + 0.5]. CLAMP_TO_BORDER causes the t coordinate to be
    clamped to the range [-0.5, hs + 0.5]."
    
  - (3.8.7, pg. 136) "Texture Minification"
    
    Under the "Scale Factor and Level of Detail" sub-section, change the
    fourth paragraph in the subsection 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)."
    
  - (3.8.7, pg. 137 and 138) "Texture Minification"
    
    Update the last sentence in the third paragraph on the page 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"

  - (3.8.7, pg. 138) "Texture Minification"
    
    Change the last sentence in the first paragraph on the page,
    directly 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."
    
  - (3.8.7, pg. 139) "Texture Minification"
    
    Change the sentence preceding equation 3.20:
    
    "For a two-dimensional or rectangular texture,"
    
  - (3.8.7, pg. 140) "Texture Minification"
    
    Follow the first full paragraph on the page which ends with "...
    must be defined, as discussed in section 3.8.9." with:

    "Rectangular textures do not support mipmapping (it is an error to
    specify a minification filter that requires mipmapping)."
    
  - (3.8.10, pg. 143) "Texture State and Proxy State"
    
    Change the first sentence of the first paragraph 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." ...
    
  - (3.8.10, pg. 143) "Texture State and Proxy State"
    
    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."
    
  - (3.8.10, pg. 143) "Texture State and Proxy State"
    
    Change the second paragraph of the section 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." ...
    
  - (3.8.10, pg. 144) "Texture State and Proxy State"
    
    Change the third paragraph 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_EXT."
    
  - (3.8.10, pg. 144) "Texture State and Proxy State"
    
    Change the second sentence of the fifth paragraph of the section to:
    
    "Therefore PROXY_TEXTURE_1D, PROXY_TEXTURE_2D,
    PROXY_TEXTURE_RECTANGLE_EXT, PROXY_TEXTURE_3D, and
    PROXY_TEXTURE_CUBE_MAP cannot be used as textures, and their images
    must never be queried using GetTexImage." ...
    
  - (3.8.11, pg. 144) "Texture Objects"
    
    Change the first sentence of the first paragraph to say:

    "In addition to the default textures TEXTURE_1D, TEXTURE_2D,
    TEXTURE_RECTANGLE_EXT, TEXTURE_3D, and TEXTURE_CUBE_MAP, named
    one-dimensional, two-dimensional, rectangular, and three-dimensional
    texture objects and cube map texture objects can be created and
    operated on." ...
    
  - (3.8.11, pg. 144) "Texture Objects"
    
    Change the second paragraph in the section to say:

    "A texture object is created by binding an unused name to
    TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_EXT, TEXTURE_3D, or
    TEXTURE_CUBE_MAP." ... "If the new texture object is bound to
    TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_EXT, TEXTURE_3D, or
    TEXTURE_CUBE_MAP, it remains a one-dimensional, two-dimensional,
    rectangular, three-dimensional, or cube map texture until it is
    deleted."
    
  - (3.8.11, pg. 144) "Texture Objects"
    
    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_EXT, TEXTURE_3D, or
    TEXTURE_CUBE_MAP."
    
  - (3.8.11, pg. 145) "Texture Objects"
    
    Change paragraph five of the section to say:
    
    "In the initial state, TEXTURE_1D, TEXTURE_2D,
    TEXTURE_RECTANGLE_EXT, 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_EXT, TEXTURE_3D, and TEXTURE_CUBE_MAP respectively
    while 0 is bound to the corresponding targets."
    
  - (3.8.11, pg. 145) "Texture Objects"
    
    Change paragraph six of the section to say:
    
    ... "If a texture that is currently bound to one of the targets
    TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_EXT, TEXTURE_3D, or
    TEXTURE_CUBE_MAP is deleted, it is as though BindTexture has been
    executed with the same <target> and <texture> zero." ...
    
  - (3.8.13 pg. ) "Texture Application"
    
    Replace the beginning sentences of the first paragraph with:
    
    "Texturing is enabled or disabled using the generic Enable and
    Disable commands, respectively, with the symbolic constants
    TEXTURE_1D, TEXTURE_2D, TEXTURE_RECTANGLE_EXT, TEXTURE_3D, or
    TEXTURE_CUBE_MAP 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 OpenGL 1.3 Specification (Per-Fragment
Operations and the Framebuffer)

    None

Additions to Chapter 5 of the OpenGL 1.3 Specification (Special
Functions)

  - (5.4, pg. 195) "Display Lists"

    In the second to last paragraph of the section, add
    PROXY_TEXTURE_RECTANGLE_EXT to the list of PROXY_* tokens.

Additions to Chapter 6 of the OpenGL 1.3 Specification (State and State
Requests)

  - (6.1.3, pg. 199) "Enumerated Queries"

    Change the fourth paragraph to say:

    "The GetTexParameter parameter <target> may be one of TEXTURE_1D,
    TEXTURE_2D, TEXTURE_RECTANGLE_EXT, TEXTURE_3D, or TEXTURE_CUBE_MAP,
    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_EXT, TEXTURE_3D, TEXTURE_CUBE_MAP_POSITIVE_X,
    TEXTURE_CUBE_MAP_NEGATIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y,
    TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_POSITIVE_Z,
    TEXTURE_CUBE_MAP_NEGATIVE_Z, PROXY_TEXTURE_1D, PROXY_TEXTURE_2D,
    PROXY_TEXTURE_RECTANGLE_EXT, PROXY_TEXTURE_3D, or
    PROXY_TEXTURE_CUBE_MAP, 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 is not a valid <target>
    parameter for GetTexLevelParameter because it does not specify a
    particular cube map face."
    
  - (6.1.4, pg. 201) "Texture Queries"
    
    Change the first paragraph 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_EXT indicates a
    rectangular texture, TEXTURE_3D indicates a three-dimensional
    texture, and TEXTURE_CUBE_MAP_POSITIVE_X,
    TEXTURE_CUBE_MAP_NEGATIVE_X, TEXTURE_CUBE_MAP_POSITIVE_Y,
    TEXTURE_CUBE_MAP_NEGATIVE_Y, TEXTURE_CUBE_MAP_POSITIVE_Z, and
    TEXTURE_CUBE_MAP_NEGATIVE_Z indicate the respective face of a cube
    map texture."
    
  - (6.1.4, pg. 201) "Texture Queries"
    
    Add a final sentence to the fourth paragraph of the section,
    immediately after ... "or DEPTH COMPONENT causes the error INVALID
    ENUM.":

    "Calling GetTexImage with a lod not zero when the tex is
    TEXTURE_RECTANGLE_EXT causes the error INVALID_VALUE."

Additions to the GLX Specification

    None

GLX Protocol

    None

Dependencies on ARB_mirrored_repeat

    If ARB_mirrored_repeat is not supported, references to the
    MIRRORED_REPEAT_ARB 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_EXT or
    PROXY_TEXTURE_RECTANGLE_EXT.

    INVALID_ENUM is generated when TexImage2D is called and the target
    is TEXTURE_RECTANGLE_EXT or PROXY_TEXTURE_RECTANGLE_EXT 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_EXT 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_EXT 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_EXT 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_EXT.

    INVALID_ENUM is generated when one of the
    CompressedTexSubImage<n>DARB commands is called when the target
    parameter is TEXTURE_RECTANGLE_EXT.

    INVALID_ENUM is generated when TexParameter is called with a target
    of TEXTURE_RECTANGLE_EXT and the TEXTURE_WRAP_S, TEXTURE_WRAP_T, or
    TEXTURE_WRAP_R parameter is set to REPEAT or MIRRORED_REPEAT_ARB.

    INVALID_ENUM is generated when TexParameter is called with a target
    of TEXTURE_RECTANGLE_EXT 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_EXT 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_EXT.

New State

  - (Table 6.14, Texture Objects, pg. 222) amend/add the following entries:
    
    Get Value                     Type   Get Command  Initial Value   Description           Sec     Attribute
    ----------------------------  ----   -----------  -------------   --------------------  ------  --------------
    TEXTURE_RECTANGULAR_EXT        B     IsEnabled    False           True if rectangular   3.8.10  texture/enable
                                                                      texturing is enabled
                                                                      
    TEXTURE_BINDING_RECTANGLE_EXT  Z+    GetIntegerv  0               Texture object        3.8.8   texture
                                                                      for TEXTURE_CUBE_MAP
                                                                      
    TEXTURE_RECTANGLE_EXT          I     GetTexImage  see 3.8         rectangular texture   3.8     -
                                                                      image for lod 0
    
    
  - (Table 6.16, Texture Objects (cont.), pg. 224) amend/add the following entries:
    
    Get Value             Type    Get Command       Initial Value     Description           Sec    Attribute
    ------------------    -----   --------------    --------------    -------------------   -----  --------------
    TEXTURE_MIN_FILTER    n x Z6  GetTexParameter   See 3.8 except    Texture minification  3.8.7  texture
                                                    for rectangular   function
                                                    which is
                                                    LINEAR
                                                    
    TEXTURE_WRAP_S        n x Z4  GetTexParameter   REPEAT except     Texture wrap mode S   3.8    texture
                                                    for rectangular
                                                    which is
                                                    CLAMP_TO_EDGE
                                                    
    TEXTURE_WRAP_T        n x Z4  GetTexParameter   REPEAT except     Texture wrap mode T   3.8    texture
                                                    for rectangular
                                                    which is
                                                    CLAMP_TO_EDGE
                                                    
    TEXTURE_WRAP_R        n x Z4  GetTexParameter   REPEAT except     Texture wrap mode R   3.8    texture
                                                    for rectangular
                                                    which is
                                                    CLAMP_TO_EDGE

New Implementation Dependent State

  - (Table 6.27, Implementation Dependent Values, pg. 235) add the following entry:

    Get Value                       Type    Get Command   Minimum Value   Description           Sec    Attribute
    --------                        ----    -----------   -------------   -----------           -----  --------------
    MAX_RECTANGLE_TEXTURE_SIZE_EXT   Z+     GetIntegerv   64              Maximum rectangular   3.8.1  -
                                                                          texture image
                                                                          dimension

Backwards Compatibility

    This extension is semantically equivalent to NV_texture_rectangle
    replaces it.  The tokens, and name strings now refer to EXT instead
    of NV.  Enumerant values are unchanged. 
    
Revision History

    None