Name

    SGIS_texture_select

Name Strings

    GL_SGIS_texture_select

Version

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

Number

    51

Dependencies

    EXT_texture
    EXT_texture3D
    EXT_texture_object
    SGIS_detail_texture

Overview

    This extension introduces several new texture internal formats.  The
    purpose of these new formats is to reorganize the components of a
    texture into groups of components.  The currently selected group
    effectively becomes the internal format.

    Also, two new texture parameters are introduced that control the
    selection of these groups of components.

    For example, assume a texture internal format of DUAL_LUMINANCE4_SGIS is
    specified.  Now there are two groups of components, where each group has
    a format of LUMINANCE4.  One of the two LUMINANCE groups is always
    selected.  components can be selected and then interpreted as a LUMINANCE
    texture.

    The purpose of this extension is allow better utilization of texture
    memory by subdividing the internal representation of a texel into 1, 2,
    or 4 smaller texels.  Additionally, this may improve performance of
    texture downloads.

Issues

    *	This spec still needs values for the enumerants.  Also, the GLX
	section is empty.

    *	This extension was formerly named SGIS_component_select.  The
	reference to "component" was confusing so we changed it.

    *	We have removed the ability to "alias" or reinterpret groups of
	components.  Specifically, once a texture is defined with a DUAL*
	or QUAD* internal format, the fact that it is ALPHA, LUMINANCE,
	INTENSITY, or LUMINANCE_ALPHA is not changeable.  a previous version
	of this spec allowed this.  IrisGL on RealityEngine allowed it as
	well.  Since this function might be useful, it should be revisited
	in a separate spec that allows this for all internal formats, not
	just the ones defined here.  Additionally, any porting document
	should mention this subtle point.  

    *	Should we include versions of these new internal formats that don't 
	specify bit resolution?  (e.g. DUAL_ALPHA_SGIS)  It would add the
	ability to be vague about the actual resolution and would make it
	appear consistent with internal formats from EXT_texture.  Can
	someone make a good argument for adding these?

    *	Do we need a new query to determine component bit resolution?
	A. No.  The existing queries defined by EXT_texture are sufficient.
	The query applies to the selected group of components.

    *	Need to review dependencies on detail_texture, sharpen, etc.  Can
	one create a detail texture using these new formats?  A. The
	dependency on SGIS_detail_texture is mentioned below.

    *	Is there an easy way to know whether this extension is actually
	"enabled"?  A. This extension is enabled when the current texture
	format is one of the new internal formats defined here.  An
	additional query is required to determine which group of components 
	is selected. 


New Procedures and Functions

    None

New Tokens

    Accepted by the <components> parameter of TexImage1D and TexImage2D, and
    the <internalformat> parameter of TexImage3DEXT:

	DUAL_ALPHA4_SGIS
	DUAL_ALPHA8_SGIS
	DUAL_ALPHA12_SGIS
	DUAL_ALPHA16_SGIS
	DUAL_LUMINANCE4_SGIS
	DUAL_LUMINANCE8_SGIS
	DUAL_LUMINANCE12_SGIS
	DUAL_LUMINANCE16_SGIS
	DUAL_INTENSITY4_SGIS
	DUAL_INTENSITY8_SGIS
	DUAL_INTENSITY12_SGIS
	DUAL_INTENSITY16_SGIS
	DUAL_LUMINANCE_ALPHA4_SGIS
	DUAL_LUMINANCE_ALPHA8_SGIS
	QUAD_ALPHA4_SGIS
	QUAD_ALPHA8_SGIS
	QUAD_LUMINANCE4_SGIS
	QUAD_LUMINANCE8_SGIS
	QUAD_INTENSITY4_SGIS
	QUAD_INTENSITY8_SGIS

    Accepted by the <pname> parameter of TexParameterf, TexParameteri,
    TexParameterfv, TexParameteriv, GetTexParameterfv, and 
    GetTexParameteriv:

	DUAL_TEXTURE_SELECT_SGIS
	QUAD_TEXTURE_SELECT_SGIS


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

    None.

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    The selection of a group of components is specified by using 
    TexParameterf, TexParameteri, TexParameterfv, or TexParameteriv with 
    a <pname> parameter of DUAL_TEXTURE_SELECT_SGIS or QUAD_TEXTURE_SELECT_SGIS.

    The value of DUAL_TEXTURE_SELECT_SGIS selects one of two groups of
    components (hence the term DUAL).  The <param> parameter must be 0 or 1.
    Otherwise, an INVALID_VALUE error is set.  When the texture internal
    format is one of the DUAL* formats, this selection becomes active. A
    value of 0 specifies that the first group of components is used, a value
    of 1 specifies the second group, and so on.

    Similarly, the value of QUAD_TEXTURE_SELECT_SGIS selects one of four
    groups of components in the case that the texture internal format is one
    of the QUAD* formats.  The <param> value must be 0, 1, 2 or 3.
    Otherwise, an INVALID_VALUE error is set.
    
    There is always a selection defined for both DUAL_TEXTURE_SELECT_SGIS
    and QUAD_TEXTURE_SELECT_SGIS formats.  It becomes active when the
    current texture format becomes one of the DUAL* or QUAD* formats,
    respectively.  If the current texture format is not one of DUAL* or
    QUAD* formats, this extension has no effect.

    The mapping of components from the canonical RGBA to these new internal
    formats needs to be clarified.  There are three cases.  The first case
    is for the DUAL* formats that are groups of ALPHA, LUMINANCE, and
    INTENSITY.  The RED component goes to the first group while ALPHA goes
    to the second group.  The second case is for the DUAL* formats that are
    groups of LUMINANCE_ALPHA.  The RED and GREEN components go to the first
    group while BLUE and ALPHA go to the second group.  The third case is
    for the QUAD* formats.  The RED component goes to the first group, the
    GREEN component to the second group, the BLUE component to the third
    group, and the ALPHA component to the fourth group.

    The interpretation of the bit resolutions of the new internal formats 
    is implementation dependent.  (Similar to EXT_texture.)  The actual
    resolution granted can be queried using Get*.  The bit resolution of
    similar type components in a group, such as multiple LUMINANCE
    components, is always the same.


Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Frame Buffer)

    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

    XXX

Dependencies on EXT_texture

    EXT_texture is required.  This extension defines new texture internal
    formats that build on concepts (such as the INTENSITY format and
    component numeric resolutions) introduced in the EXT_texture extension.

Dependencies on EXT_texture3D

    If EXT_texture3D is not supported, references to it should be ignored.
    (see New State)

Dependencies on EXT_texture_object

    If EXT_texture_object is not supported, references to it should be
    ignored.  (See New State.)

Dependencies on SGIS_detail_texture

    The condition for using the detail texture (see detail_texture.spec,
    section 3.8.2.1 Texture magnification with detail) is modified to read:

    "The conditions are:

	1.  The active texture must be TEXTURE_2D.

	2.  The internal formats of TEXTURE_2D and DETAIL_TEXTURE_2D_SGIS
	    must have been specified identically.

	3.  If SGIS_texture_select is supported and if the internal formats
	    of TEXTURE_2D and DETAIL_TEXTURE_2D_SGIS are one of those
	    defined by SGIS_texture_select (e.g. DUAL_LUMINANCE4_SGIS),
	    then the corresponding group selections (e.g. the value of
	    DUAL_TEXTURE_SELECT_SGIS) must have been specified identically.

    If these conditions are not met, it is as though the magnification
    texture filter was LINEAR."

Errors

    See above.

New State

											Initial
    Get Value				Get Command		Type			Value		Attrib
    ---------				-----------		----			-------		------

    DUAL_TEXTURE_SELECT_SGIS		GetTexParameter		n x 3 x Z2		0		texture

    QUAD_TEXTURE_SELECT_SGIS		GetTexParameter		n x 3 x Z4		0		texture


    Note:  The "Type" column shows "n x ..." since this state will appear 
    in each of "n" objects defined by EXT_texture_object.

New Implementation Dependent State

    None.
