Name

    EXT_copy_texture

Name Strings

    GL_EXT_copy_texture

Version

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

Number

    10

Dependencies

    EXT_texture is required.
    EXT_texture3D affects the definition of this extension.
    SGIS_texture_filter4 affects the definition of this extension.
    EXT_subtexture affects the definition of this extension.

Overview

    This extension defines methods to load texture images directly from the
    framebuffer.  Methods are defined for both complete and partial
    replacement of a texture image.  Because it is not possible to define
    an entire 3D texture using a 2D framebuffer image, 3D textures are
    supported only for partial replacement.

New Procedures and Functions

    void CopyTexImage1DEXT(enum target,
			   int level,
			   enum internalformat,
			   int x,
			   int y,
			   sizei width,
			   int border);

    void CopyTexImage2DEXT(enum target,
			   int level,
			   enum internalformat,
			   int x,
			   int y,
			   sizei width,
			   sizei height,
			   int border);

    void CopyTexSubImage1DEXT(enum target,
			      int level,
			      int xoffset,
			      int x,
			      int y,
			      sizei width);

    void CopyTexSubImage2DEXT(enum target,
			      int level,
			      int xoffset,
			      int yoffset,
			      int x,
			      int y,
			      sizei width,
			      sizei height);

    void CopyTexSubImage3DEXT(enum target,
			      int level,
			      int xoffset,
			      int yoffset,
			      int zoffset,
			      int x,
			      int y,
			      sizei width,
			      sizei height);

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)

    CopyTexImage1DEXT and CopyTexImage2DEXT are related to TexImage1D and
    TexImage2D in exactly the way that CopyPixels is related to DrawPixels.
    Rather than accepting image data from memory, they copy image data from
    the color buffer specified by the current ReadBuffer mode.
    CopyTexImage2DEXT accepts image data from a width+2*border pixel wide by
    height+2*border pixel high color buffer region whose lower-left pixel
    has window coordinates <x>,<y>.  If any pixels within this region are
    outside the window that is associated with the GL context, the values
    obtained for those pixels are undefined.  These pixel values are
    processed exactly as if CopyPixels had been called, but the process
    stops just before final conversion.  Subsequent processing is exactly
    as though TexImage2D had be called, beginning with the clamping of the
    pixel group components to [0,1].  Pixel ordering is such that lower X
    screen coordinates correspond to lower i texture coordinates, and lower
    Y screen coordinates correspond to lower j texture coordinates (refer to
    Figure 3.10 - A texture image and the coordinates used to access it, GL
    Specification).  The semantics and accepted values of the <target>,
    <level>, and <border> parameters are exactly equivalent to their
    TexImage2D counterparts, except that <target> does not accept
    PROXY_TEXTURE_2D_EXT.  The semantics of <internalformat> are identical
    to those of the <components> parameter of TexImage2D, except that
    values 1, 2, 3, and 4 are not accepted by CopyTexImage2DEXT.

    CopyTexImage1DEXT accepts image data from a width+2*border pixel wide
    by 1 pixel high color buffer region whose left-most pixel has window
    coordinates <x>,<y>.  If any pixels within this region are outside the
    window that is associated with the GL context, the values obtained for
    those pixels are undefined.  The pixels are processed just as those of
    CopyTexImage2DEXT are, and they define a texture such that lower X
    window coordinates correspond to lower i texture coordinates, as per
    Figure 3.10 of the GL Specification.  The semantics and accepted values
    of the <level>, <border>, and <internalformat> parameters are exactly
    those of CopyTexImage2DEXT.  <target> accepts only TEXTURE_1D.
    
    If EXT_subtexture is supported, this extension also defines
    CopyTexSubImage1DEXT and CopyTexSubImage2DEXT.  These commands are
    related to TexSubImage1DEXT and TexSubImage2DEXT in exactly the way
    that CopyPixels is related to DrawPixels.  Rather than accepting image
    data from memory, they copy image data from the framebuffer.  The
    semantics and accepted values of the <target>, <level>, <xoffset>, and
    <yoffset> parameters are exactly equivalent to their TexSubImage1DEXT
    and TexSubImage2DEXT counterparts.  The semantics and accepted values
    of the <x>, <y>, <width>, and <height> parameters are exactly equivalent
    to their CopyTexImage1DEXT and CopyTexImage2DEXT counterparts.

    If EXT_subtexture and EXT_texture3D are both supported, this extension
    also defines CopyTexSubImage3DEXT.  Because framebuffer memory is two-
    dimensional, only a portion of a single s,t slice of a 3D texture is
    replaced by this command.  Thus CopyTexSubImage3DEXT is related to
    TexSubImage3DEXT in exactly the way that CopyPixels is related to
    DrawPixels, except that it is as though TexSubImage3DEXT parameter
    <depth> were 1.  Rather than accepting image data from memory,
    CopyTexSubImage3DEXT copies image data from the framebuffer.  The
    semantics and accepted values of the <target>, <level>, <xoffset>,
    <yoffset>, and <zoffset> parameters are exactly equivalent to their
    TexSubImage3DEXT counterparts.  The semantics and accepted values of
    the <x>, <y>, <width>, and <height> parameters are exactly equivalent
    to their CopyTexImage2DEXT counterparts.

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

Additions to the GLX Specification

    None

GLX Protocol

    Five new GL rendering commands are added. The following commands are sent to the
    server as part of a glXRender request:

	CopyTexImage1DEXT
            2           32              rendering command length
            2           4119            rendering command opcode
            4           ENUM		target
	    4	        INT32           level
	    4		ENUM		internalformat
	    4	 	INT32		x	
	    4	 	INT32		y	
	    4	 	INT32		width
	    4	 	INT32		border

    	CopyTexImage2DEXT
            2           36              rendering command length
            2           4120            rendering command opcode
            4           ENUM		target
	    4	        INT32           level
	    4		ENUM		internalformat
	    4	 	INT32		x	
	    4	 	INT32		y	
	    4	 	INT32		width
	    4	 	INT32		height
	    4	 	INT32		border

    	CopyTexSubImage1DEXT
            2           28              rendering command length
            2           4121            rendering command opcode
            4           ENUM		target
	    4	        INT32           level
	    4	        INT32           xoffset
	    4	 	INT32		x	
	    4	 	INT32		y	
	    4	 	INT32		width

    	CopyTexSubImage2DEXT
            2           36              rendering command length
            2           4122            rendering command opcode
            4           ENUM		target
	    4	        INT32           level
	    4	        INT32           xoffset
	    4	        INT32           yoffset
	    4	 	INT32		x	
	    4	 	INT32		y	
	    4	 	INT32		width
	    4	 	INT32		height

    	CopyTexSubImage3DEXT
            2           40              rendering command length
            2           4123            rendering command opcode
            4           ENUM		target
	    4	        INT32           level
	    4	        INT32           xoffset
	    4	        INT32           yoffset
	    4	        INT32           zoffset
	    4	 	INT32		x	
	    4	 	INT32		y	
	    4	 	INT32		width
	    4	 	INT32		height

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, CopyTexSubImage3DEXT is not defined
    by this extension.

Dependencies on SGIS_texture_filter4

    If SGIS_texture_filter4 is not supported, 2 is not accepted as a border
    value.

Dependencies on EXT_subtexture

    If EXT_subtexture is not supported, CopyTexSubImage1DEXT,
    CopyTexSubImage2DEXT, and CopyTexSubImage3DEXT are not defined by this
    extension.

Errors

    INVALID_ENUM is generated if CopyTexImage1DEXT or CopyTexSubImage1DEXT
    parameter <target> is not TEXTURE_1D.  (The commands defined by this
    extension do not accept PROXY targets.)

    INVALID_ENUM is generated if CopyTexImage2DEXT or CopyTexSubImage2DEXT
    parameter <target> is not TEXTURE_2D.

    INVALID_ENUM is generated if CopyTexSubImage3DEXT parameter <target>
    is not TEXTURE_3D_EXT.

    INVALID_VALUE is generated if CopyTexImage1DEXT or CopyTexImage2DEXT
    parameter <level> is less than zero, or greater than the maximum value
    supported by the implementation.

    INVALID_ENUM is generated if CopyTexImage1DEXT or CopyTexImage2DEXT
    parameter <internalformat> is not ALPHA, RGB, RGBA, LUMINANCE,
    LUMINANCE_ALPHA, or one of the token values defined by EXT_texture.

    INVALID_VALUE is generated when any of the <width> or <height>
    parameters of CopyTexImage1DEXT or CopyTexImage2DEXT is less than zero,
    or if it cannot be represented as 2**k + 2*border for some integer k.

    INVALID_VALUE is generated if CopyTexSubImage1DEXT, CopyTexSubImage2DEXT,
    or CopyTexSubImage3DEXT parameter <xoffset>, CopyTexSubImage2DEXT or
    CopyTexSubImage3DEXT parameter <yoffset>, or CopyTexSubImage3DEXT
    parameter <zoffset> is less than -TEXTURE_BORDER, where TEXTURE_BORDER
    is the border width of the texture array to be modified.

    INVALID_VALUE is generated if CopyTexSubImage1DEXT, CopyTexSubImage2DEXT,
    or CopyTexSubImage3DEXT (xoffset + width) > (TEXTURE_WIDTH -
    TEXTURE_BORDER), or if CopyTexSubImage2DEXT or CopyTexSubImage3DEXT
    (yoffset + height) > (TEXTURE_HEIGHT - TEXTURE_BORDER), or if
    CopyTexSubImage3DEXT zoffset >= (TEXTURE_DEPTH_EXT - TEXTURE_BORDER).
    Note that TEXTURE_WIDTH, TEXTURE_HEIGHT, and TEXTURE_DEPTH_EXT include
    twice the border width.

    TEXTURE_TOO_LARGE_EXT is generated by CopyTexImage1DEXT or
    CopyTexImage2DEXT if the specified image is too large, for any reason.
    (See EXT_texture for a discussion of how applications can query the
    maximum texture size.)

    INVALID_VALUE is generated if CopyTexImage1DEXT or CopyTexImage2DEXT
    parameter <border> is not 0, 1, or 2.

    INVALID_OPERATION is generated if CopyTexImage1DEXT, CopyTexImage2DEXT,
    CopyTexSubImage1DEXT, CopyTexSubImage2DEXT, or CopyTexSubImage3DEXT is
    called between execution of Begin and the corresponding execution of
    End.

New State

    None

New Implementation Dependent State

    None
