Name EXT_subtexture Name Strings GL_EXT_subtexture Version $Date: 1995/10/03 05:39:55 $ $Revision: 1.17 $ 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 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.) , , , , , , and correspond precisely to the corresponding arguments of TexImage1D, TexImage2D, and TexImage3DEXT. , , and 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 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 < 0, is invalid or is invalid, then the command is erroneous and n=0. The and parameters in this request are ignored. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , , , , , , , and 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 < 0, < 0, is invalid or is invalid, then the command is erroneous and n=0. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , , , , , , , , and 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 < 0, < 0, < 0, is invalid or is invalid, then the command is erroneous and n=0. The , , , and parameters in this request are ignored. 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 , , , , , , , , and given in the request. If is not positive then the number of rows (i.e., the image height) is ; otherwise the number of rows is . allows a sub-volume of the 3-dimensional image to be selected. If is positive, then the pointer is advanced by times the number of elements in one 2-dimensional image. Then 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 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 parameter is not TEXTURE_1D. INVALID_ENUM is generated by TexSubImage2DEXT if its parameter is not TEXTURE_2D. INVALID_ENUM is generated by TexSubImage3DEXT if its 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 is less than zero INVALID_VALUE is generated if , , or is negative. INVALID_VALUE is generated if , , or 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 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 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