Name SGIS_texture_color_mask Name Strings GL_SGIS_texture_color_mask Contact Jon Leech, SGI (ljp 'at' sgi.com) Status Complete. Not shipping yet. Version Last Modified Date: December 13, 2004 Author Revision: $Header: //depot/main/doc/registry/extensions/SGI/texture_color_mask.spec#7 $ Number 214 Dependencies ARB_texture_compression affects the definition of this extension. Overview This extension implements the same functionality for texture updates that glColorMask implements for color buffer updates. Masks for updating textures with indexed internal formats (the analog for glIndexMask) should be supported by a separate extension. The extension allows an application to update a subset of components in an existing texture. The masks are applied after all pixel transfer operations have been performed, immediately prior to writing the texel value into texture memory. They apply to all texture updates. IP Status No issues. Issues * The functionality provided by this extension can already be performed by using the color mask when rendering to the frame buffer and then using CopyTexture to load the texture. * This functionality may be hard to achieve with compressed textures. It will require a read->decompress->modify->compress->write operation. This may be slower than the DrawPixels/CopyTexture approach. New Procedures and Functions void TextureColorMaskSGIS(boolean r, boolean g, boolean, b, boolean a ); New Tokens Accepted by the parameter of GetBooleanv, GetDoublev, GetIntegerv, and GetFloatv: TEXTURE_COLOR_WRITEMASK_SGIS = 0x81EF Additions to Chapter 2 of the OpenGL 1.1 Specification (OpenGL Operation) None Additions to Chapter 3 of the OpenGL 1.1 Specification (Rasterization) Before the section of Texture Parameters, add a section on texture download masking. Fine Control of Texture Image Updates A set of masks can be used to mask the writing of bits into textures. These masks are applied after all pixel transfer operations have been performed, immediately before the bits are written into the texture. If the texture image being written is compressed, either in one of the generic compressed formats defined by the base ARB_texture_compression extension or in a compressed format defined by an extension layering on ARB_texture_compression, then the texture color mask is not used when writing that texture. The command void TextureColorMaskSGIS( boolean r, boolean g, boolean, b, boolean a ); is used to control updates to texture images with non-indexed internal formats. For an RGBA texture image, TextureColorMaskSGIS is used to mask the writing of R, G, B, and A values to the texture image. The r, g, b, and a parameters indicate whether R, G, B, and A values, respectively, are written. A value of TRUE means the component is written; a value of FALSE means it is not. For Luminance or Intensity texture images, the r parameter indicates whether the Luminance or Intensity component is written. In this case, the g, b, and a parameters are ignored. In the initial state, all color masks are enabled for writing. If a color mask is in effect when a texture image is being defined for the first time, the values of the components whose updates have been disabled are undefined. Additions to Chapter 4 of the OpenGL 1.1 Specification (Per-Fragment Operations and the Frame Buffer) None Additions to Chapter 5 of the OpenGL 1.1 Specification (Special Functions) None Additions to Chapter 6 of the OpenGL OpenGL 1.1 Specification (State and State Requests) The mask values are queried using GetIntegerv with set to TEXTURE_COLOR_WRITEMASK_SGIS. The masks are saved and restored when PushAttrib and PopAttrib are called with TEXTURE_BIT set. They are included in the part of texture state that is associated with the currently bound texture objects. Additions to the GLX Specification None GLX Protocol A new GL rendering command is added to support TextureColorMaskSGIS(). The following command is sent to the server as part of a glXRender request: TextureColorMaskSGIS 2 8 rendering command length 2 2082 rendering command opcode 1 BOOL r 1 BOOL g 1 BOOL b 1 BOOL a Errors INVALID_OPERATION is generated if TextureColorMaskSGIS is executed between the execution of Begin and the corresponding execution of End. New State (table 6.?, p. ???) Get Value Type Get Command Initial Value Description Sec Attribute --------- ---- ----------- ------------- ----------- --- --------- TEXTURE_COLOR_WRITEMASK_SGIS 4xB GetIntegerv (T,T,T,T) Texture color 3.? texture writemask Revision History * Version 6, 2004/12/13 - there was an error listed in the GLX protocol (length 20, using 4 byte BOOL fields). In actuality the generated protocol in use on IRIX, the development platform for this extension, is 8 bytes long using single byte BOOLs. Thanks to Ian Romanick for catching this. * Version 5, 2001/03/14 - defined interaction with compressed textures (that the write mask is ignored).