
Name
    SUNX_constant_data

Name Strings

    GL_SUNX_constant_data

Contact

    Ron Bielaski, Sun (Ron.Bielaski 'at' eng.sun.com)
    Jack Middleton, Sun (Jack.Middleton 'at' eng.sun.com)

Status

    Shipping 

Version

    $Date: 1999/12/28 01:40:37 $ $Revision: 1.5 $
    SUN Date: 99/06/25 15:06:46  Revision: 1.2

Number

    163

Dependencies

   None

Overview

   This extension allows the pixel data specified by the
   application to be used internally without making a second copy.
   This extension affects how the pixel data in client memory is
   interpreted and therefore affects DrawPixels, Bitmap,
   PolygonStipple, TexImage1D, TexImage2D, TexImage3DEXT,
   ColorTableSGI.

New Procedures and Functions

    void FinishTextureSUNX(void)

New Tokens

   Accepted by the <pname> parameter PixelStore*()

	UNPACK_CONSTANT_DATA_SUNX		0x81D5
	
   Accepted by <pname> parameter of GetTexLevelParameter()

	TEXTURE_CONSTANT_DATA_SUNX		0x81D6


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

When TexImage1D(), TexImage2D(), TexImage3DEXT() is called,
specifying PixelStore*() with pname UNPACK_CONSTANT_DATA_SUNX set to
TRUE will allow the implementation to use the application provided data
pointer internally thereby avoiding a second copy. If pixel transfer is
enabled when using this pixel store mode or if the constant directive
cannot be honored , then the constant directive will be ignored and a
copy will be made internally. Thus, specifying "constant" data
directive does not prohibit the implementation from making a copy,
rather it is treated as a hint by the implementation to avoid making a
second copy if possible. Note that if UNPACK_CONSTANT_DATA_SUNX is set
to TRUE, and all the pixel store values are not default values then the
constant hint will not be honored. 


A TexSubImage*() will always make a copy of the existing texture
image before updating the subimage except when the scenario given below
is true.

If a TexSubImage1D(), TexSubImage2D(), TexSubImage3DEXT() is
called with PixelStore pname UNPACK_CONSTANT_DATA_SUNX set to TRUE on a
constant texture, then the address of the start of the texture image is
computed using the specified xoffset, yoffset, zoffset. If this
computed address matches the start address of the currently used
constant texture then no action is taken. If the addresses do not match
then a copy is first made of the entire texture and then the subimage
is updated in this copy. A texture is a "constant texture" if at the
time of the specification of the texture no copy was made. This
attribute can be queried as described later.

Before an application changes a part or all of the texture image that
has been specified as a constant texture image, it is necessary to
call FinishTextureSUNX() to ensure that the library has completed all
its processing with the currently specified constant texture image
before the changes are applied to this constant texture image by the
application.

If a CopyTexImage[1/2/3]D or CopyTexSubImage[1/2/3]D is made and
the existing texture image is constant, then a copy is made
internally before executing the CopyTex* calls.


In immediate mode, for DrawPixels()/Bitmap(), specifying constant data
is not meaningful since data does not have a life beyond the call
itself.

A texture image/raster image or bitmap could be specified as constant
at the time of the creation of the display list. If pixelmap/pixel
transfer is enabled before calling the display list, then a copy is
made internally and the data is no longer constant.

It is invalid to specify a texture subimage as constant in a display
list. Doing so, will result in an INVALID_OPERATION error.

Query support
-------------
The pixel store value for the constant data that has been set can be
inquired using Get() with pname set to UNPACK_CONSTANT_DATA_SUNX.

When TexImage*D() is executed with target PROXY_TEXTURE_[1,2,3]D then
the state value of TEXTURE_CONSTANT_DATA_SUNX will be set to 0 if
the texture data cannot be stored as constant, otherwise the value
will be 1.

The constant nature of the texture data can be inquired using
GetTexLevelParameter*() with pname TEXTURE_CONSTANT_DATA_SUNX and
target PROXY_TEXTURE_[1,2,3]D . If the target is TEXTURE_[1,2,3]D and
pname is TEXTURE_CONSTANT_DATA_SUNX, then the value returned is TRUE
if the the texture image defined at this level is currently
constant.

Note that a texture image may become non-constant (that is an internal
copy may be made) at the time when the texture is used rather than at a
time when the texture is specified. If interested, an application could
inquire the constant nature of the texture data after the texture has
been used for rendering.

Additions to the GLX / WGL / AGL Specifications

    None

GLX Protocol

    None

Errors

    None

New State

    ???
    (will affect both pixel pack/unpack and texture state)

New Implementation Dependent State

    None

Revision History

    6/24/99 - Updated name string to SUNX instead of SUN.
    Added fields from the new extension template.


