XXX - not complete yet! Name SGIS_texture4D Name Strings GL_SGIS_texture4D Version $Date: 1997/03/15 02:52:10 $ $Revision: 1.25 $ Number 16 Dependencies EXT_abgr affects the definition of this extension EXT_texture is required EXT_texture3D is required EXT_subtexture affects the definition of this extension Overview This extension defines 4-dimensional texture mapping. If EXT_subtexture is supported, this extension also defines a mechanism to redefine a portion of an existing 4-dimensional texture image. Because EXT_texture3D is required, this extension utilizes the 3-dimensional image support defined in by EXT_texture3D as a base for 4-dimensional image manipulation. The 4th dimension has an abstract, rather than physical, reference and will be called "extent", since the definition of extent is "that which specifies the range or magnitude of an area or volume." Four-dimensional texture mapping is more constrained than its one, two, and three-dimensional counterparts. Mipmapping is not supported, so only the level-zero 4-dimensional texture image can be defined. Cubic filtering is not supported, so the border width must be either zero or one. Four-dimensional textures are used primarily as color lookup tables for color conversion. New Procedures and Functions void TexImage4DSGIS(enum target, int level, enum internalformat, sizei width, sizei height, sizei depth, sizei extent, int border, enum format, enum type, const void* pixels); void TexSubImage4DSGIS(enum target, int level, int xoffset, int yoffset, int zoffset, int woffset, sizei width, sizei height, sizei depth, sizei extent, enum format, enum type, const void* pixels); New Tokens Accepted by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev, and by the parameter of PixelStore: PACK_SKIP_VOLUMES_SGIS PACK_IMAGE_DEPTH_SGIS UNPACK_SKIP_VOLUMES_SGIS UNPACK_IMAGE_DEPTH_SGIS Accepted by the parameter of Enable, Disable, and IsEnabled, by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev, and by the parameter of TexImage4DSGIS, GetTexImage, GetTexLevelParameteriv, GetTexLevelParameterfv, GetTexParameteriv, and GetTexParameterfv: TEXTURE_4D_SGIS Accepted by the parameter of TexImage4DSGIS, GetTexLevelParameteriv, and GetTexLevelParameterfv: PROXY_TEXTURE_4D_SGIS Accepted by the parameter of GetTexLevelParameteriv and GetTexLevelParameterfv: TEXTURE_4DSIZE_SGIS Accepted by the parameter of TexParameteriv, TexParameterfv, GetTexParameteriv, and GetTexParameterfv: TEXTURE_WRAP_Q_SGIS Accepted by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: MAX_4D_TEXTURE_SIZE_SGIS TEXTURE_4D_BINDING_SGIS Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) None Additions to Chapter 3 of the 1.0 Specification (Rasterization) XXX - not written yet. Be sure to handle the null image case. 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) TexImage4DSGIS with a proxy target is not included in display lists, but is instead executed immediately. Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 4-dimensional texture images are queried using GetTexImage with its parameter set to TEXTURE_4D_SGIS. The assignment of texel component values to the initial R, G, B, and A components of a pixel group is described in EXT_texture. Pixel transfer and pixel storage operations are applied as if the image were 3-dimensional, except that the additional pixel storage state values PACK_IMAGE_DEPTH_SGIS and PACK_SKIP_VOLUMES_SGIS affect the storage of the image into memory. The correspondence of texels to memory locations is as defined for TexImage4DSGIS above, substituting PACK* state for UNPACK* state in all occurrences. Additions to the GLX Specification None GLX Protocol A new GL rendering command is added. This command contains pixel data; thus it is sent to the server either as part of a glXRender request or as part of a glXRenderLarge request: TexImage4DSGIS 2 84+n+p rendering command length 2 2057 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 ENUM internalformat 4 INT32 width 4 INT32 height 4 INT32 depth 4 INT32 size4d 4 INT32 border 4 ENUM format 4 ENUM type 4 CARD32 null_image n LISTofBYTE pixels 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 88+n+p rendering command length 4 2057 rendering command opcode If < 0, < 0, < 0, < 0, is invalid i or is invalid, then the command is erroneous and n=0. is arranged as a sequence of adjacent volumes. Each volume is a 3-dimensional image, whose structure is determined by the image depth and the parameters , , , , , , , , , and given in the request. If is not positive then the number of images (i.e., the image depth) is ; otherwise the number of images is . allows a sub-piece of the 4-dimensional image to be selected. If is positive, then the pointer is advanced by times the number of elements in one 3-dimensional image. Then 3-dimensional images are read, each having a subimage extracted in the manner described in Appendix A of the GLX Protocol Specification. TexSubImage4DSGIS 2 88+n+p rendering command length 2 2058 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 2058 rendering command opcode If < 0, < 0, < 0, , is invalid or is invalid, then the command is erroneous and n=0. is arranged as a sequence of adjacent volumes. Each volume is a 3-dimensional image, whose structure is determined by the image height, image depth and the parameters , , , , , , , , and given in the request. If is not positive then the number of 2Dimages (i.e., the volume depth) is ; otherwise the number of 2Dimages is . allows a sub-volume of the 4-dimensional image to be selected. If is positive, then the pointer is advanced by times the number of elements in one 3-dimensional image. Then 3-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 parameter of TexImage4DSGIS accepts ABGR_EXT. Otherwise it does not. Dependencies on EXT_texture EXT_texture is required. All of the tokens defined by EXT_texture are accepted by the parameter of TexImage4DSGIS, with the same semantics that are defined by EXT_texture. The query and error extensions defined by EXT_texture are extended in this document. Dependencies on EXT_texture3D EXT_texture3D is required, because the 3-dimensional image support that it defines is used by this extension, and because it doesn't make sense to support 4D textures if 3D textures are not supported. Dependencies on EXT_subtexture If EXT_subtexture is not supported, this extension does not define TexSubImage4DSGIS. All discussion of replacing a subset of the image of an existing 4-dimensional texture is void. Errors INVALID_ENUM is generated if TexImage4DSGIS parameter is not TEXTURE_4D_SGIS. INVALID_VALUE is generated if TexImage4DSGIS parameter is less than zero. INVALID_ENUM is generated if TexImage4DSGIS parameter is not ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA, or one of the tokens defined by the EXT_texture extension. (Values 1, 2, 3, and 4 are not accepted as internal formats by TexImage4DSGIS). INVALID_VALUE is generated if TexImage4DSGIS parameter , , or is less than zero, or cannot be represented as 2**k + 2*border for some integer k. INVALID_VALUE is generated if TexImage4DSGIS parameter is not 0 or 1. INVALID_ENUM is generated if TexImage4DSGIS parameter 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 TexImage4DSGIS parameter is not UNSIGNED_BYTE, BYTE, UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT, or FLOAT. INVALID_OPERATION is generated if TexImage4DSGIS is called between execution of Begin and the corresponding execution of End. TEXTURE_TOO_LARGE_SGI is generated if the texture as specified cannot be accommodated by the implementation. This error will not occur if none of , , or is greater than MAX_4D_TEXTURE_SIZE_SGIS. INVALID_ENUM is generated by TexSubImage4DSGIS if its parameter is not TEXTURE_4D_SGIS. INVALID_VALUE is generated by TexSubImage4DSGIS if the specified texture array has not been defined by a previous TexImage4DSGIS operation. INVALID_VALUE is generated if TexSubImage4DSGIS parameter is not equal to zero. INVALID_VALUE is generated if TexSubImage4DSGIS parameter , , , or is negative. INVALID_VALUE is generated if TexSubImage4DSGIS parameter , , , or is less than -TEXTURE_BORDER. INVALID_VALUE is generated by TexSubImage4DSGIS if (xoffset + width) > (TEXTURE_WIDTH - TEXTURE_BORDER), or if (yoffset + height) > (TEXTURE_HEIGHT - TEXTURE_BORDER), or if (zoffset + depth) > (TEXTURE_DEPTH_EXT - TEXTURE_BORDER), or if (woffset + extent) > (TEXTURE_4DSIZE_SGIS - TEXTURE_BORDER). INVALID_ENUM is generated if TexSubImage4DSGIS parameter 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 TexSubImage4DSGIS parameter is not UNSIGNED_BYTE, BYTE, UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT, or FLOAT. INVALID_OPERATION is generated if TexSubImage4DSGIS is called between execution of Begin and the corresponding execution of End. New State Get Value Get Command Type Initial Value Attribute --------- ----------- ---- ------------- --------- UNPACK_SKIP_VOLUMES_SGIS GetIntegerv Z+ 0 - UNPACK_IMAGE_DEPTH_SGIS GetIntegerv Z+ 0 - PACK_SKIP_VOLUMES_SGIS GetIntegerv Z+ 0 - PACK_IMAGE_DEPTH_SGIS GetIntegerv Z+ 0 - TEXTURE_4D_SGIS IsEnabled B FALSE texture/enable TEXTURE_WRAP_Q_SGIS GetTexParameteriv 1 x Z2 REPEAT texture TEXTURE_4DSIZE_SGIS GetTexLevelParameteriv 1 x 2 x Z+ 0 - TEXTURE GetTexImage 4 x 1 x levels x I null - TEXTURE_RED_SIZE_EXT GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_GREEN_SIZE_EXT GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_BLUE_SIZE_EXT GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_ALPHA_SIZE_EXT GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_LUMINANCE_SIZE_EXT GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_INTENSITY_SIZE_EXT GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_WIDTH GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_HEIGHT GetTexLevelParameteriv 3 x 2 x levels x Z+ 0 - TEXTURE_DEPTH_EXT GetTexLevelParameteriv 2 x 2 x levels x Z+ 0 - TEXTURE_BORDER GetTexLevelParameteriv 4 x 2 x levels x Z+ 0 - TEXTURE_COMPONENTS (1D and 2D) GetTexLevelParameteriv 2 x 2 x levels x Z42 1 - TEXTURE_COMPONENTS (3D and 4D) GetTexLevelParameteriv 2 x 2 x levels x Z38 LUMINANCE - TEXTURE_BORDER_COLOR GetTexParameteriv 4 x C 0, 0, 0, 0 texture TEXTURE_MIN_FILTER GetTexParameteriv 4 x Z7 NEAREST_MIPMAP_LINEAR texture TEXTURE_MAG_FILTER GetTexParameteriv 4 x Z3 LINEAR texture TEXTURE_WRAP_S GetTexParameteriv 4 x Z2 REPEAT texture TEXTURE_WRAP_T GetTexParameteriv 3 x Z2 REPEAT texture TEXTURE_WRAP_R_EXT GetTexParameteriv 2 x Z2 REPEAT texture New Implementation Dependent State Get Value Get Command Type Minimum Value --------- ----------- ---- ------------- MAX_4D_TEXTURE_SIZE_SGIS GetIntegerv Z+ 16