Name

    EXT_subtexture

Name Strings

    GL_EXT_subtexture

Version

    $Date: 2005/06/02 18:11:10 $ $Revision: 1.1 $

Number

    9

Dependencies

    EXT_abgr affects the definition of this extension
    EXT_texture is required
    EXT_texture3D affects the definition of this extension

Overview

    This extension allows a contiguous portion of an already-existing
    texture image to be redefined, without affecting the remaining portion
    of the image, or any of the other state that describe the texture.  No
    provision is made to query a subregion of a texture.

    Semantics for null image pointers are defined for TexImage1D,
    TexImage2D, and TexImage3DEXT.  Null image pointers can be used by
    applications to effectively support texture arrays whose dimensions
    are not a power of 2.

New Procedures and Functions

    void TexSubImage1DEXT(enum target,
			  int level,
			  int xoffset,
			  sizei width,
			  enum format,
			  enum type,
			  const void* pixels);

    void TexSubImage2DEXT(enum target,
			  int level,
			  int xoffset,
			  int yoffset,
			  sizei width,
			  sizei height,
			  enum format,
			  enum type,
			  const void* pixels);

    void TexSubImage3DEXT(enum target,
			  int level,
			  int xoffset,
			  int yoffset,
			  int zoffset,
			  sizei width,
			  sizei height,
			  sizei depth,
			  enum format,
			  enum type,
			  const void* pixels);

New Tokens

    None

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

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    This extension makes no changes or additions to the texture operations
    defined in the GL Specification.  Its sole purpose is to extend the
    semantics of texture specification.

    TexSubImage1DEXT, TexSubImage2DEXT, and TexSubImage3DEXT redefine a
    contiguous subregion of an existing texture image.  Their <target>
    parameters must be TEXTURE_1D, TEXTURE_2D, and TEXTURE_3D_EXT
    respectively.  (The proxy targets defined by EXT_texture are not
    accepted by the subtexture commands.)  <level>, <width>, <height>,
    <depth>, <format>, <type>, and <pixels> correspond precisely to the
    corresponding arguments of TexImage1D, TexImage2D, and TexImage3DEXT.
    <xoffset>, <yoffset>, and <zoffset> specify texel offsets in the x, y,
    and z directions within the texture array being modified.  The new
    image replaces the portion of the texture array indexed with

	xoffset <= i < (xoffset + width),
	yoffset <= j < (yoffset + height),
	zoffset <= k < (zoffset + depth),

    where i, j, and k are indexes as described in Figure 3.10 of the GL
    Specification.  It is an error for this region to include any texels
    outside the range of the texture array as it was originally specified.  
    Specifically, the error INVALID_VALUE results if any of the following
    conditions are met:

	xoffset < -TEXTURE_BORDER
	(xoffset + width) > (TEXTURE_WIDTH - TEXTURE_BORDER)
	yoffset < -TEXTURE_BORDER
	(yoffset + height) > (TEXTURE_HEIGHT - TEXTURE_BORDER)
	zoffset < -TEXTURE_BORDER
	(zoffset + depth) > (TEXTURE_DEPTH_EXT - TEXTURE_BORDER)

    and TEXTURE_WIDTH, TEXTURE_HEIGHT, TEXTURE_DEPTH_EXT, and TEXTURE_BORDER
    are the state values of the texture array that is being modified.  Note
    that TEXTURE_WIDTH, TEXTURE_HEIGHT, and TEXTURE_DEPTH_EXT include twice
    the border width.

    It is not an error to specify a subtexture with zero width, height, or
    depth.  Such a specification has no effect, however.

    Counting from zero, each Nth pixel is assigned internal integer
    coordinates [i,j,k], where

	i = xoffset + (N mod width),			1D, 2D, and 3D textures

	j = yoffset + ((N div width) mod height),	2D and 3D textures only

	k = zoffset + ((N div (width * height)) mod depth),  3D textures only

    and the div operator performs integer division with truncation.

    Null images
    -----------

    It is sometimes useful to define the parameters of a texture image
    without actually initializing the contents of that image.  In
    particular, this capability is expected to be used in conjunction with
    the TexSubImage commands that are defined in this extension.  If
    EXT_subtexture is implemented, and TexImage1D, TexImage2D, or
    TexImage3DEXT is called with <pixels> equal to the null pointer
    (a pointer to location zero in the C language), then the specified
    texture is created as it would otherwise be, but no pixels are
    processed, so the contents of the resulting texture image are undefined.
    It is permissible to use such an uninitialized texture image, the
    resulting color buffer contents being undefined only due to the random
    color values of the texture image.

Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Framebuffer)

    None

Additions to Chapter 5 of the 1.0 Specification (Special Functions)

    None

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

    None.  No provision is made to query a subregion of a texture image.

Additions to the GLX Specification

    None

GLX Protocol

    Several new GL rendering commands are added. All of these commands have pixel
    data; thus they are sent to the server either as part of a glXRender request or 
    a glXRenderLarge request:

        TexSubImage1DEXT
            2           60+n+p          rendering command length
            2           4099
            1           BOOL            swap_bytes
            1           BOOL            lsb_first
            2                           unused
            4           CARD32          row_length
            4           CARD32          skip_rows
            4           CARD32          skip_pixels
            4           CARD32          alignment
            4           ENUM            target
            4           INT32           level
            4           INT32           xoffset
            4           INT32           yoffset
            4           INT32           width
            4           INT32           height
            4           ENUM            format
            4           ENUM            type
            4           CARD32		unused
            n           LISTofBYTE      image
            p                           unused, p=pad(n)

            If the command is encoded in a glXRenderLarge request, the command
            opcode and command length fields above are expanded to 4 bytes each:

            4           64+n+p          rendering command length
            4           4099            rendering command opcode

        If <width> < 0, <format> is invalid or <type> is invalid, then the command is 
        erroneous and n=0. The <yoffset> and <height> parameters in this request are 
        ignored.

        The structure of <pixels> is described in Appendix A of the GLX Protocol 
        Specification, "Pixel Data", using the parameters <swap_bytes>, <lsb_first>, 
        <row_length>, <skip_rows>, <skip_pixels>, <alignment>, <width>, <format>, and 
        <type> as given in the request and height = 1.


        TexSubImage2DEXT
            2           60+n+p          rendering command length
            2           4100            rendering command opcode
            1           BOOL            swap_bytes
            1           BOOL            lsb_first
            2                           unused
            4           CARD32          row_length
            4           CARD32          skip_rows
            4           CARD32          skip_pixels
            4           CARD32          alignment
            4           ENUM            target
            4           INT32           level
            4           INT32           xoffset
            4           INT32           yoffset
            4           INT32           width
            4           INT32           height
            4           ENUM            format
            4           ENUM            type
	    4	        CARD32		unused
            n           LISTofBYTE      image
            p                           unused, p=pad(n)

            If the command is encoded in a glXRenderLarge request, the command
            opcode and command length fields above are expanded to 4 bytes each:

            4           64+n+p          rendering command length
            4           4100            rendering command opcode

	If <width> < 0, <height> < 0, <format> is invalid or <type> is invalid, then 
        the command is erroneous and n=0.

        The structure of <pixels> is described in Appendix A of the GLX Protocol 
        Specification, "Pixel Data", using the parameters <swap_bytes>, <lsb_first>, 
        <row_length>, <skip_rows>, <skip_pixels>, <alignment>, <width>, <height>, 
        <format>, and <type> as given in the request.


        TexSubImage3DEXT
            2           88+n+p          rendering command length
            2           4115            rendering command opcode
            1           BOOL            swap_bytes
            1           BOOL            lsb_first
            2                           unused
            4           CARD32          row_length
            4           CARD32          image_height
            4           CARD32          image_depth
            4           CARD32          skip_rows
            4           CARD32          skip_images
            4           CARD32          skip_volumes
            4           CARD32          skip_pixels
            4           CARD32          alignment
            4           ENUM            target
            4           INT32           level
            4           INT32           xoffset
            4           INT32           yoffset
            4           INT32           zoffset
            4           INT32           woffset
            4           INT32           width
            4           INT32           height
            4           INT32           depth
            4           INT32           size4d
            4           ENUM            format
            4           ENUM            type
            4           CARD32		unused
            n           LISTofBYTE      image
            p                           unused, p=pad(n)

            If the command is encoded in a glXRenderLarge request, the command
            opcode and command length fields above are expanded to 4 bytes each:

            4           92+n+p          rendering command length
            4           4115            rendering command opcode

	If <width> < 0, <height> < 0, <depth> < 0, <format> is invalid or <type> is 
        invalid, then the command is erroneous and n=0. The <woffset>, <size4d>,
        <image_depth>, and <skip_volumes> parameters in this request are ignored.

        <pixels> is arranged as a sequence of adjacent rectangles. Each rectangle is a
        2-dimensional image, whose structure is determined by the image height and the
        parameters <swap_bytes>, <lsb_first>, <row_length>, <skip_rows>, <skip_pixels>,
        <alignment>, <width>, <format>, and <type> given in the request. If <image_height>
        is not positive then the number of rows (i.e., the image height) is <height>;
        otherwise the number of rows is <image_height>.

        <skip_images> allows a sub-volume of the 3-dimensional image to be selected.
        If <skip_images> is positive, then the pointer is advanced by <skip_images>
        times the number of elements in one 2-dimensional image. Then <depth>
        2-dimensional images are read, each having a subimage extracted in the
        manner described in Appendix A of the GLX Protocol Specification.

Dependencies on EXT_abgr

    If EXT_abgr is supported, the <format> parameters of TexSubImage1DEXT,
    TexSubImage2DEXT, and TexSubImage3DEXT accept ABGR_EXT.  Otherwise they
    do not.

Dependencies on EXT_texture

    EXT_texture is required.  This extension builds on the notion of
    internal image format, which is defined by EXT_texture.

Dependencies on EXT_texture3D

    If EXT_texture3D is not supported, then TexSubImage3DEXT is not defined
    by this extension.  In this case, none of the description of
    3-dimensional texture mapping in this extension document is valid.  The
    descriptions of TexSubImage1DEXT and TexSubImage2DEXT remain valid,
    however.

Errors

    INVALID_ENUM is generated by TexSubImage1DEXT if its <target> parameter
    is not TEXTURE_1D.

    INVALID_ENUM is generated by TexSubImage2DEXT if its <target> parameter
    is not TEXTURE_2D.

    INVALID_ENUM is generated by TexSubImage3DEXT if its <target> parameter
    is not TEXTURE_3D_EXT.

    INVALID_OPERATION is generated by TexSubImage1DEXT if the specified
    texture array has not been defined by a previous TexImage1D operation.

    INVALID_OPERATION is generated by TexSubImage2DEXT if the specified
    texture array has not been defined by a previous TexImage2D operation.

    INVALID_OPERATION is generated by TexSubImage3DEXT if the specified
    texture array has not been defined by a previous TexImage3DEXT
    operation.

    INVALID_VALUE is generated if <level> is less than zero

    INVALID_VALUE is generated if <width>, <height>, or <depth> is negative.

    INVALID_VALUE is generated if <xoffset>, <yoffset>, or <zoffset> is
    less than -TEXTURE_BORDER.

    INVALID_VALUE is generated if
	(xoffset + width) > (TEXTURE_WIDTH - TEXTURE_BORDER), or if
	(yoffset + height) > (TEXTURE_HEIGHT - TEXTURE_BORDER), or if
	(zoffset + depth) > (TEXTURE_DEPTH_EXT - TEXTURE_BORDER).

    INVALID_ENUM is generated if <format> is not COLOR_INDEX, RED, GREEN,
    BLUE, ALPHA, RGB, RGBA, LUMINANCE, or LUMINANCE_ALPHA (or ABGR_EXT if
    EXT_abgr is supported).

    INVALID_ENUM is generated if <type> is not UNSIGNED_BYTE, BYTE,
    UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT, or FLOAT.

    INVALID_OPERATION is generated if TexSubImage1DEXT, TexSubImage2DEXT,
    or TexSubImage3DEXT is called between execution of Begin and the
    corresponding execution of End.

New State

    None

New Implementation Dependent State

    None
