blob: 031587b621bd578f072aab7dace8e407c13a9169 [file] [log] [blame]
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.