glCopyTexSubImage1D replaces a
portion of a one-dimensional texture image with pixels from the current
GL_READ_BUFFER (rather than from main memory, as is the case for glTexSubImage1D).

The screen-aligned pixel row with left corner at (x, y), and with length
width replaces the portion of the texture array with x indices xoffset
through $"xoffset" ~+~ "width" ~-~ 1$, inclusive. The destination in the
texture array may not include any texels outside the texture array as
it was originally specified.

The pixels in the row are processed exactly
as if glCopyPixels had been called, but the process stops just before final
conversion. At this point all pixel component values are clamped to the
range [0, 1] and then converted to the texture's internal for storage in
the texel array.

It is not an error to specify a subtexture with zero width,
but such a specification has no effect. If any of the pixels within the
specified row of the current GL_READ_BUFFER are outside the read window
associated with the current rendering context, then the values obtained
for those pixels are undefined.

No change is made to the internalformat,
width, or border parameters of the specified texture array or to texel
values outside the specified subregion.

GL_INVALID_OPERATION is generated
if the texture array has not been defined by a previous glTexImage1D or
glCopyTexImage1D operation.

GL_INVALID_VALUE is generated if level is less
than 0.

GL_INVALID_VALUE may be generated if level$>log sub 2$ max, where
max is the returned value of GL_MAX_TEXTURE_SIZE.

GL_INVALID_VALUE is generated
if y$ ~<~ ~-b$ or if width$ ~<~ ~-b$, where $b$ is the border width of the
texture array.

GL_INVALID_VALUE is generated if $"xoffset" ~<~ ~-b$, or $("xoffset"~+~"width")
~>~ (w-b)$, where $w$ is the GL_TEXTURE_WIDTH, and $b$ is the GL_TEXTURE_BORDER
of the texture image being modified. Note that $w$ includes twice the border
width.