Name

    SGI_texture_color_table

Name Strings

    GL_SGI_texture_color_table

Contact

    Silicon Graphics, Inc.
    Brian Paul (brian_e_paul 'at' yahoo.com)

Status

    Shipping.

Version

    $Date: 2005/06/02 18:12:31 $ $Revision: 1.1 $

Number

    17

Dependencies

    EXT_abgr affects the definition of this extension
    EXT_texture is required
    EXT_copy_texture affects the definition of this extension
    ARB_multitexture affects the definition of this extension
    The extension is written against the OpenGL 1.0 Specification

Overview

    This extension adds a color lookup table to the texture mechanism.
    The table is applied to the filtered result of a texture lookup,
    before that result is used in the texture environment equations.

    The definition and application of the texture color table are
    similar to those of the color tables defined in SGI_color_table,
    though it is not necessary for that extension to be implemented.

    Texture color tables can be used to expand luminance or intensity
    textures to full RGBA, and also to linearize the results of color
    space conversions implemented by multidimensional texture table
    lookup.

    This specification has been updated to define its interaction with
    multitexture.

Issues

    1.	Should the scale, bias, and clamp that is applied to texels
	be moved to a separate SGIX extension?

	Done.  See GL_SGIX_texture_scale_bias.

    2.  It should be clarified that this state is NOT part of
	EXT_texture_object.  The color table state is per texture unit.

    3. 	Can the texture format change while passing thru the texture
	color table?

	This possibility is mentioned in the overview.  An example of
	when this is useful is an RGBA table applied to a LUMINANCE
	texture.  This expands LUMINANCE to full RGBA.  The table
	defined below does not account for this.

	The specification has been changed to map all texture components
	to Rt, Gt, Bt, At and now the table is always applied to all 4
	components.

    4. 	Do we want to query MAX_TEXTURE_COLOR_TABLE_WIDTH_SGI in
	addition to PROXY method?

	No, this should be done with PROXY.

    5.  Is one texture color table shared by all texture units or is
	there a separate color table for each texture unit?

	Vendors shipping both ARB_multitexture and SGI_texture_color_table
	report that they've implemented per-texture unit tables.

	The texure color table enable flag is also per-texture unit.

    6.	Is the proxy texture color table per context or per texture unit
	state?

	After talking to IBM and 3Dlabs, the consensus is that there is a
	separate proxy texture color table for each texture unit.

    7.	Is the texture color table scale and bias values per context or
	per texture unit?

	Consensus is that there is one set of scale and bias values shared
	for all texture units.  It's part of the pixel state group.

    8.  What if there is a different number of texture image units and
	texture coordinate units (ala NV_fragment_program)?

	The number of texture image units determines the number of texture
	color tables.  All occurances of "texture unit" should be read as
	"texture image unit".

    9.  Has this extension specification changed recently?

	It's been updated to clarify how it interacts with multitexture.
	Also, various cosmetic clean-ups have been made.



New Procedures and Functions

    None

New Tokens

    Accepted by the <cap> parameter of Enable, Disable, and IsEnabled,
    by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv,
    and GetDoublev, and by the <target> parameter of ColorTableSGI,
    CopyColorTableSGI, GetColorTableSGI, ColorTableParameterfvSGI,
    ColorTableParameterivSGI, GetColorTableParameterfvSGI,
    GetColorTableParameterivSGI:

	TEXTURE_COLOR_TABLE_SGI		0x80BC

    Accepted by the <target> parameter of ColorTableSGI,
    GetColorTableParameterivSGI, and GetColorTableParameterfvSGI:

	PROXY_TEXTURE_COLOR_TABLE_SGI	0x80BD

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

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    If TEXTURE_COLOR_TABLE is enabled, the post-filtered texture color
    is used to index into the texture color table to produce a new color.
    The new color is passed along to the texture application step.

    The texture color table is specified in exactly the manner
    described for the color tables in SGI_color_table, using
    TEXTURE_COLOR_TABLE_SGI as the value for the <target> parameters
    of the various commands.

    The table size, specified by the <width> parameter of
    ColorTableSGI is limited to powers-of-two.  Additionally, an
    implementation must support a maximum table size of at least 256
    entries.

    The PROXY_TEXTURE_COLOR_TABLE_SGI target is available for
    configuration queries in exactly the manner described for the
    other tables in SGI_color_table.

    The contents of the table are used to replace a subset of the
    components of each texel group, based on the base internal format
    of the table.

    If the table size is zero, the texture color table
    is effectively disabled.  The texture color table is applied to
    the texture components denoted in the the EXT_texture extension as
    Rt, Gt, Bt, and At according to the following table:


				Modification of Texture Components
				----------------------------------
	Base Table		
	Internal Format		Rt	Gt	Bt	At
	---------------		--	--	--	--

	ALPHA			Rt	Gt	Bt	A(At)

	LUMINANCE		L(Rt)	L(Gt)	L(Bt)	At

	LUMINANCE_ALPHA		L(Rt)	L(Gt)	L(Bt)	A(At)

	INTENSITY		I(Rt)	I(Gt)	I(Bt)	I(At)

	RGB			R(Rt)	G(Gt)	B(Bt)	At

	RGBA			R(Rt)	G(Gt)	B(Bt)	A(At)


    If multiple texture units are supported, there is a texture color
    table, proxy texture color table and enable/disable flag for each
    texture unit.  ACTIVE_TEXTURE determines the texture unit for
    texture color table state changes and queries.

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

Dependencies on EXT_abgr

    EXT_abgr affects this extension in exactly the manner that it
    affects SGI_color_table.

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_copy_texture

    EXT_copy_texture affects this extension in exactly the manner that
    it affects SGI_color_table.

Dependencies on SGI_color_table

    The specification depends heavily on the SGI_color_table
    specification, but it is not necessary that SGI_color_table be
    implemented for this extension to be implemented.

Dependencies on ARB_multitexture

    In the presense of ARB_multitxture, the texture color table state
    is replicated for each texture unit.  Otherwise, the texture color
    table state is per-context state.

Errors

    TEXTURE_COLOR_TABLE_SGI and PROXY_TEXTURE_COLOR_TABLE_SGI are
    added to the list of <target> parameters that are accepted by
    color table commands.  

New State

    Get Value				Get Command			Type		Initial Value	Attribute
    ---------				-----------			----		-------------	---------
    TEXTURE_COLOR_TABLE_SGI		IsEnabled			1* x B		False		texture/enable
    TEXTURE_COLOR_TABLE_SGI		GetColorTableSGI		1* x I		empty		texture*
    COLOR_TABLE_FORMAT_SGI		GetColorTableParameterivSGI	2 x 1* x Z38	RGBA		texture*
    COLOR_TABLE_WIDTH_SGI		GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_RED_SIZE_SGI		GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_GREEN_SIZE_SGI		GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_BLUE_SIZE_SGI		GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_ALPHA_SIZE_SGI		GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_LUMINANCE_SIZE_SGI	GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_INTENSITY_SIZE_SGI	GetColorTableParameterivSGI	2 x 1* x Z+	0		texture*
    COLOR_TABLE_SCALE_SGI		GetColorTableParameterfvSGI	R4		(1,1,1,1)	pixel
    COLOR_TABLE_BIAS_SGI		GetColorTableParameterfvSGI	R4		(0,0,0,0)	pixel

    *Note: if ARB_multitexture is supported, the state is per-texture unit,
    else the state is per-context.

    Note: "1*" denotes one or more texture units.

    Note: "2 x 1* x _" denotes real and proxy state for one or more texture units.

    Note: The state shown here only represents the NEW state added by this
    extension.  There may be additional color table state from ARB_imaging
    or EXT_paletted_texture, for example.

New Implementation Dependent State

    None.

Revision History

    1998
        Original specification by SGI

    2003 Feb 5
        Updated to specify interaction with ARB_multitexture (Brian Paul)

       
