Texture images may also be specified using image data taken directly from the framebuffer, and rectangular subregions of existing texture images may be respecified.
The command
void CopyTexImage2D ( enum target, int level, enum internalformat, int x, int y, sizei width, sizei height, int border ) ;
defines a two-dimensional texture array in exactly the manner of
TexImage2D ,
except that the image data are taken from the framebuffer
rather than from client memory.
Currently, target must be TEXTURE_2D.
x, y, width, and height
correspond precisely to the corresponding arguments to CopyPixels
(refer to section 4.3.3);
they specify the image's width and height,
and the lower left coordinates of the framebuffer region to be copied.
The image is taken from the framebuffer exactly as if these arguments
were passed to CopyPixels ,
with argument type set to COLOR,
stopping after pixel transfer processing is complete.
Subsequent processing is identical to that described for TexImage2D ,
beginning with clamping of the R, G, B, and A values
from the resulting pixel groups.
Parameters level, internalformat, and border are specified using the same values,
with the same meanings,
as the equivalent arguments of TexImage2D ,
except that internalformat may not be specified as
1, 2, 3, or 4.
An invalid value specified for internalformat generates the error INVALID_ENUM.
The constraints on width, height, and border are exactly those for
the equivalent arguments of TexImage2D .
The command
void CopyTexImage1D ( enum target, int level, enum internalformat, int x, int y, sizei width, int border ) ;
defines a one-dimensional texture array in exactly the manner of TexImage1D , except that the image data are taken from the framebuffer, rather than from client memory. Currently, target must be TEXTURE_1D. For the purposes of decoding the texture image, CopyTexImage1D is equivalent to calling CopyTexImage2D with corresponding arguments and height of 1, except that the height of the image is always 1, regardless of the value of border. level, internalformat, and border are specified using the same values, with the same meanings, as the equivalent arguments of TexImage1D , except that internalformat may not be specified as 1, 2, 3, or 4. The constraints on width and border are exactly those of the equivalent arguments of TexImage1D .
Four additional commands,
void TexSubImage1D ( enum target, int level, int xoffset, sizei width, enum format, enum type, void *data ) ;
void TexSubImage2D ( enum target, int level, int xoffset, int yoffset, sizei width, sizei height, enum format, enum type, void *data ) ;
void CopyTexSubImage1D ( enum target, int level, int xoffset, int x, int y, sizei width ) ;
void CopyTexSubImage2D ( enum target, int level, int xoffset, int yoffset, int x, int y, sizei width, sizei height ) ;
respecify only a rectangular subregion of an existing texture array. No change is made to the internalformat, width, height, or border parameters of the specified texture array, nor is any change made to texel values outside the specified subregion. Currently the target arguments of TexSubImage1D and CopyTexSubImage1D must be TEXTURE_1D, and the target arguments of TexSubImage2D and CopyTexSubImage2D must be TEXTURE_2D. The level parameter of each command specifies the level of the texture array that is modified. If level is less than zero or greater than the base 2 logarithm of the maximum texture width or height, the error INVALID_VALUE is generated.
TexSubImage2D arguments width, height, format, type, and data match the corresponding arguments to TexImage2D , meaning that they are specified using the same values, and have the same meanings. Likewise, TexSubImage1D arguments width, format, type, and data match the corresponding arguments to TexImage1D . CopyTexSubImage2D arguments x, y, width, and height match the corresponding arguments to CopyTexImage2D . And CopyTexSubImage1D arguments x, y, and width match the corresponding arguments to CopyTexImage1D . Each of the four TexSubImage commands interprets and processes pixel groups in exactly the manner of its TexImage counterpart, except that the assignment of R, G, B, and A pixel group values to the texture components is controlled by the internalformat of the texture array, not by an argument to the command.
Arguments xoffset and yoffset
of TexSubImage2D and CopyTexSubImage2D
specify the lower left texel coordinates
of a width-wide by height-high rectangular subregion
of the texture array.
Negative values of xoffset and yoffset correspond
to the coordinates of border texels,
addressed as in Figure 3.10.
Taking ,
, and
to be the specified width, height, and border width of the texture array,
(not the actual array dimensions
,
, and
),
and taking x, y, w, and h to be the xoffset, yoffset,
width, and height argument values,
any of the following relationships generates the error
INVALID_VALUE:
(Recall that and
include
twice the specified border width
.)
Counting from zero,
the nth pixel group is assigned to the texel with
coordinates
, where
The xoffset argument
of TexSubImage1D and CopyTexSubImage1D
specifies the left texel coordinate
of a width-wide subregion of the texture array.
Negative values of xoffset correspond
to the coordinates of border texels.
Taking and
to be the specified width and border width
of the texture array,
and x and w to be the xoffset and width argument values,
either of the following relationships generates the error
INVALID_VALUE:
Counting from zero,
the nth pixel group is assigned to the texel with internal integer
coordinates , where