Name

    SGIX_texture_range

Name Strings

    GL_SGIX_texture_range

Version

    $Date: 1999/06/24 02:20:36 $ $Revision: 1.4 $

Number

    181

Dependencies

    OpenGL 1.2 is required.
    SGI_color_range is required
    SGIS_texture4D affects the definition of this extension

Overview

    This extension defines new internal formats for the storage of signed
    texture images, as well as extended range and precision texture images.

IP Status

    Silicon Graphics has filed for patent protection for some of the
    techniques described in this extension document.

Issues

    * Should the fact that the numeric type is different create new base
      formats to better classify this difference?  Also this might make
      sense if there were more than one internal extended-range component
      resolutions or types in a given system.

      - Yes.  New base formats added to spec.

    * Don't want to get extended-range when we don't want it

      - With new base formats, the user explicitly requests extended-range
	or signed internal formats, either sized or not.

    * TLUT clamping (clamped to [0, 1])

      - Since the texture color lookup section says that it acts as in
	section 3.6.3, for color table lookups, and since that section says
	that the color is first clamped to [0, 1], then everything should be
	fine.

    * Do we want to make the fact that there are floating-point formats
      visible at the API level?

      - Not in this spec.  In any future spec that defines the
	floating-point formats and their API, we probably should add a query
	for exp, mant, sign bits per internal format.

    * Since Bali won't have 4D textures, should we take out references to it
      in this spec?

      - No.

    * OK to add tokens for formats not supported by Bali, for completeness?

      - Moot point, since we have none.  We'll add them as we decide to
	implement hardware that uses them.

    * Since we're not defining the explicit bit representation of the
      format, does it still make sense to define sized formats?  Or should
      we wait until the floating-point formats are defined to put out sized
      enumerants?

      - Keep the sized formats in this spec.

    * It is often assumed in OpenGL that texture values are in the range
      [0, 1].  For instance, in the detail texture extension, the filtered
      detail texture color values are scaled by 2 and then have 1 subtracted
      to generate a number in the [-1, 1] range.  What should happen when
      the texture format can support values in the [-1, 1] range, then?
      Should the GL still do the scale and bias, or should it just pass the
      texture value through?

      - Still do the scale and bias.  This avoids either a) breaking
	previous applications by changing their behavior or b) creating
	hardware that does calculations both with and without the scale and
	bias.

    * Which of the Section 3.8 alterations should be in this spec, as
      opposed to the color_range?  Which color clamping operations should be
      based upon the texture internal format, versus the framebuffer format?

      - The color clampings controlled by this spec should be the:
	a) Clamping of downloaded texture values.
	b) Clamping of the result of the texture filter operation.

	Both are clampings based upon the texture internal format.  All
	other color clamps are based upon the framebuffer format, including
	incoming and outgoing colors of the texture environment operation.

    * Texture environment clamping is made stickier with multitexturing.
      Should the environment function clamp its input values?  Its output
      values?  Should it clamp based upon its associated texture's internal
      format, or based upon the framebuffer format?

      - See above.  All incoming colors, fragment color, texture color,
	etc., and the outgoing color, are clamped based upon the framebuffer
	format.

    * For queries of the min & max component values, what should be returned
      if the component doesn't exist in the texture, e.g., MIN_RED_SGIS in
      an intensity texture or MAX_INTENSITY_SGIS in an RGBA texture.  And
      what about alpha, should it be treated differently since it's implied
      in non-alpha textures?  Should we have the new INTENSITY and LUMINANCE
      tokens at all, or should we query the red and/or alpha components' min
      and max values?

      - If a queried component doesn't exist in the format, both the min and
	max are returned as 0, and no error condition is set.  Because of
	this, we need the INTENSITY and LUMINANCE tokens.

    * What about ALPHA, in textures that don't have it, since it ususally
      is an implied 1, instead of an implied 0?

      - For now, as above, min & max are returned as 0.  Since the user has
	requested an alpha-free texture format, one would hope they would be
	smart enought to not then query the available alpha range.  One
	would hope.

New Procedures and Functions

    None

New Tokens

    Accepted by the <internalformat> parameter of TexImage1D, TexImage2D,
    TexImage3DEXT, TexImage4DSGIS, CopyTexImage1D, and CopyTexImage2D:

    RGB_SIGNED_SGIX				0x85E0
    RGBA_SIGNED_SGIX				0x85E1
    ALPHA_SIGNED_SGIX				0x85E2
    LUMINANCE_SIGNED_SGIX			0x85E3
    INTENSITY_SIGNED_SGIX			0x85E4
    LUMINANCE_ALPHA_SIGNED_SGIX			0x85E5
    RGB16_SIGNED_SGIX				0x85E6
    RGBA16_SIGNED_SGIX				0x85E7
    ALPHA16_SIGNED_SGIX				0x85E8
    LUMINANCE16_SIGNED_SGIX			0x85E9
    INTENSITY16_SIGNED_SGIX			0x85EA
    LUMINANCE16_ALPHA16_SIGNED_SGIX		0x85EB
    RGB_EXTENDED_RANGE_SGIX			0x85EC
    RGBA_EXTENDED_RANGE_SGIX			0x85ED
    ALPHA_EXTENDED_RANGE_SGIX			0x85EE
    LUMINANCE_EXTENDED_RANGE_SGIX		0x85EF
    INTENSITY_EXTENDED_RANGE_SGIX		0x85F0
    LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX		0x85F1
    RGB16_EXTENDED_RANGE_SGIX			0x85F2
    RGBA16_EXTENDED_RANGE_SGIX			0x85F3
    ALPHA16_EXTENDED_RANGE_SGIX			0x85F4
    LUMINANCE16_EXTENDED_RANGE_SGIX		0x85F5
    INTENSITY16_EXTENDED_RANGE_SGIX		0x85F6
    LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX	0x85F7

    Accepted by the <value> parameter of of GetTexLevelParameterfv and
    GetTexLevelParameteriv:

    MIN_LUMINANCE_SGIS				0x85F8
    MAX_LUMINANCE_SGIS				0x85F9
    MIN_INTENSITY_SGIS				0x85FA
    MAX_INTENSITY_SGIS				0x85FB

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

    None

Additions to Chapter 3 of the 1.2 Specification (Rasterization)

    The following is added to Section 3.8.1:

    "... just before final conversion.  Each R, G, B, and A value so
    generated is clamped to [min, max].  The minimum is implementation-
    dependent for extended range and precision internal formats, but at most
    0.	It is -1 for signed internal formats, and is 0 for all other
    formats.  The maximum is implementation-dependent for extended range and
    precision formats, but is at least 1, and is 1 for all other formats.


    The following is added to Table 3.16:

    Sized				     Base				   R	   G	   B	   A	   L	   I
    Internal Format			     Internal Format			  Bits	  Bits	  Bits	  Bits	  Bits	  Bits
    ---------------			     -----------------------------------  ----	  ----	  ----	  ----	  ----	  ----
    RGB16_SIGNED_SGIX		     RGB_SIGNED_SGIX				   16	   16	   16
    RGBA16_SIGNED_SGIX		     RGBA_SIGNED_SGIX				   16	   16	   16	   16
    ALPHA16_SIGNED_SGIX		     ALPHA_SIGNED_SGIX							   16
    LUMINANCE16_SIGNED_SGIX	     LUMINANCE_SIGNED_SGIX						   16
    INTENSITY16_SIGNED_SGIX	     INTENSITY_SIGNED_SGIX								   16
    LUMINANCE16_ALPHA16_SIGNED_SGIX  LUMINANCE_ALPHA_SIGNED_SGIX					   16	   16
    RGB16_EXTENDED_RANGE_SGIX		     RGB_EXTENDED_RANGE_SGIX		   16	   16	   16
    RGBA16_EXTENDED_RANGE_SGIX		     RGBA_EXTENDED_RANGE_SGIX		   16	   16	   16	   16
    ALPHA16_EXTENDED_RANGE_SGIX		     ALPHA_EXTENDED_RANGE_SGIX					   16
    LUMINANCE16_EXTENDED_RANGE_SGIX	     LUMINANCE_EXTENDED_RANGE_SGIX					   16
    INTENSITY16_EXTENDED_RANGE_SGIX	     INTENSITY_EXTENDED_RANGE_SGIX						   16
    LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX  LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX			   16	   16


    The following is added to Section 3.8.3:

    "... values to floating point.  Each of the four values set by
    TEXTURE_BORDER_COLOR is clamped to lie in [min, max], where min and max
    are based upon the internal format of the image in level-of-detail 0, as
    specified in section 3.8.1"


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

    None

Additions to Chapter 5 of the 1.2 Specification (Special Functions)

    None

Additions to Chapter 6 of the 1.2 Specification (State and State Requests)

    The following is added to Section 6.1.3:

    "...when the image array was defined.  Queries of MIN_RED_SGIS,
    MAX_RED_SGIS, MIN_GREEN_SGIS, MAX_GREEN_SGIS, MIN_BLUE_SGIS,
    MAX_BLUE_SGIS, MIN_ALPHA_SGIS, MAX_ALPHA_SGIS, MIN_LUMINANCE_SGIS,
    MAX_LUMINANCE_SGIS, MIN_INTENSITY_SGIS, and MAX_INTENSITY_SGIS
    return the minimum and maximum expressable values of the internal
    format of the image.  Queries of TEXTURE_WIDTH ..."

Additions to the GLX Specification

    None

Dependencies on SGIS_texture4D

    If SGIS_texture4D is not supported, all references to TexImage4DSGIS,
    TexSubImage4DSGIS, and CopyTexSubImage4DSGIS are ignored.

Errors

    None

New State

    Get Value		Get Command	       Type  Initial Value
    ---------		-----------	       ----  -------------
    MIN_RED_SGIS	GetTexLevelParameterfv	R	  0.0
    MAX_RED_SGIS	GetTexLevelParameterfv	R+	  1.0
    MIN_GREEN_SGIS	GetTexLevelParameterfv	R	  0.0
    MAX_GREEN_SGIS	GetTexLevelParameterfv	R+	  1.0
    MIN_BLUE_SGIS	GetTexLevelParameterfv	R	  0.0
    MAX_BLUE_SGIS	GetTexLevelParameterfv	R+	  1.0
    MIN_ALPHA_SGIS	GetTexLevelParameterfv	R	  0.0
    MAX_ALPHA_SGIS	GetTexLevelParameterfv	R+	  1.0
    MIN_LUMINANCE_SGIS	GetTexLevelParameterfv	R	  0.0
    MAX_LUMINANCE_SGIS	GetTexLevelParameterfv	R+	  1.0
    MIN_INTENSITY_SGIS	GetTexLevelParameterfv	R	  0.0
    MAX_INTENSITY_SGIS	GetTexLevelParameterfv	R+	  1.0

New Implementation Dependent State

    Get Value		Get Command	       Type
    ---------		-----------	       ----
    TEXTURE_RANGE_SGIX	GetBooleanv		B

