blob: bd471a66ee032e0a39315dfbdf9b44ca854a87f9 [file] [log] [blame]
Name
SGIS_pixel_texture
Name Strings
GL_SGIS_pixel_texture
Version
Last Modified Date: July 15, 1998
Author Revision: $Header: //depot/main/doc/registry/extensions/SGI/pixel_texture.spec#14 $
Number
15
Dependencies
None
Overview
The geometry rasterization and pixel pipeline "convert to fragment"
stages each produce fragments. The fragments are processed by
a unified per fragment pipeline that begins with the application
of the texture to the fragment color. Because the pixel pipeline
shares the per fragment processing with the geometry pipeline, the
fragments produced by the pixel pipeline must have the same fields
as the ones produced by the geometry pipeline. When
pixel groups are being converted to fragments, the parts
of the fragment that aren't derived from the pixel groups
are taken from the associated values in the current raster position.
A fragment consists of x and y window coordinates and their
associated color value, depth value, and texture coordinates.
In the 1.1 OpenGL specification, when the pixel group is RGBA
the fragment color is always derived from the pixel group,
and the depth value and texture coordinates always come
from the raster position.
This extension provides a way to specify how the texture coordinates
of the fragments can be derived from RGBA pixel groups. When
this option is enabled, the source of the fragment color value
when the pixel group is RGBA can be specified to come from either
the raster position or the pixel group.
Deriving the fragment texture coordinates from the pixel group
effectively converts a color image into a texture coordinate image.
The multidimensional texture mapping lookup logic also makes this
extension useful for implementing multidimensional color lookups.
Multidimensional color lookups can be used to implement very
accurate color space conversions.
Deriving texture coordinates from the pixel groups in the pixel
pipeline introduces a problem with the lambda parameter in the
texture mapping equations. When texture coordinates are
being taken from the current raster position texture coordinates,
the texture coordinate values don't change from pixel to pixel,
and the equation for calculating lambda always produces zero.
Enabling pixel_texture introduces changes in the texture
coordinates from pixel to pixel which are not necessarily
meaningful for texture lookups. This problem is addressed
by specifying that lambda is always set to zero when pixel_texture
is enabled.
Issues
* Why do we need the named param?
Originally the single mode parameter was sufficient to control
the fragment's color source. However, new extensions (currently
lod and bit and possibly more in the future) introduce
additional ways to manipulate the way pixel texture operates.
These extensions modify the behavior of functionality which
is orthogonal to the functionality modified by this extension,
so multiple pixel_texture parameters are needed. The named
parameter provides a way to set the multiple pixel_texture
parameters.
* Should LOD be supported?
This has been addressed by the GL_SGIX_pixel_texture_lod extension.
* The fragment color source can be viewed as having its own
distinct functionality separate from the role it plays in
PIXEL_TEXTURE_SGIS. Should it have its own extension?
No.
* We chose the name PixelTexGenParameterSGIS because PixelTexGenSGIX
has already been taken by the impact_pixel_texture extension.
Should the name be TexGenParam rather than PixelTexGenParam?
TexGenParam would then be used to expand either geometry texgen
functionality or pixel_texture functionality. Or can we get
away with using PixelTexGen{if}?
Use PixelTexGenParameteriSGIS and PixelTexGenParameterivSGIS.
* Should the PIXEL_TEXTURE_SGIS pipeline include a texture matrix?
No. The color matrix can be used if needed.
The texture matrix takes place during geometry rasterization --
it's nice to keep that part of the pipeline separate
from the pixel part.
* Do we need to include PixelTexGenParameter{if}vSGIS to be
complete?
Yes. This will make things less confusing if future
extensions want to define a float named param.
New Procedures and Functions
void PixelTexGenParameter{if}SGIS(enum pname, T param);
void GetPixelTexGenParameter{if}vSGIS(enum pname, T params);
New Tokens
Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and
by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and
GetDoublev:
PIXEL_TEXTURE_SGIS = 0x8353
Accepted by the <pname> parameter of PixelTexGenParameteriSGIS
and GetPixelTexGenParameterivSGIS:
PIXEL_FRAGMENT_RGB_SOURCE_SGIS = 0x8354
PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = 0x8355
Accepted by the <param> parameter of PixelTexGenParameteriSGIS:
PIXEL_GROUP_COLOR_SGIS = 0x8356
Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 1.0 Specification (Rasterization)
This extension modifies the "Conversion to Fragments" subsection of
section 3.6.3 (Rasterization of Pixel Rectangles) of the GL
Specification. The paragraph beginning with "A fragment
arising from a group..." ends with "color and texture coordinates
are given by those associated with the current raster position."
The rest of the paragraph, beginning with "In both cases texture
coordinates..." is replaced with the following:
In all cases texture coordinates s, t, and r are replaced with
s/q, t/q, and r/q, respectively. If q is less than or equal to
zero, the results are undefined. Groups arising from DrawPixels
with a format of STENCIL_INDEX are treated specially and
are described in section 4.3.1.
The treatment of fragments arising from groups consisting of RGBA color
data is affected by PIXEL_TEXTURE_SGIS, which is enabled and disabled by
calling Enable and Disable with PIXEL_TEXTURE_SGIS passed as the <cap>
parameter.
When PIXEL_TEXTURE_SGIS is enabled, a fragment arising from
a group consisting of RGBA color data takes its depth component
from the current raster position depth, and the texture coordinates
are assigned as follows:
Pixel group's red becomes the fragment S texture coordinate
Pixel group's green becomes the fragment T texture coordinate
Pixel group's blue becomes the fragment R texture coordinate
Pixel group's alpha becomes the fragment Q texture coordinate
The default operation is to set the texture coordinate value to
the color component value with no conversion.
Various parameters control how the fragment is derived from
the pixel group when PIXEL_TEXTURE_SGIS is enabled.
Each parameter is set by calling
PixelTexGenParameter{if}(enum pname, T param) ;
PixelTexGenParameter{if}v(enum pname, T params) ;
The parameter pname is a symbolic constant indicating the parameter to be
set. In the first form of the command, params is value to which
to set a single-valued parameter; in the second form of the
command, params is an array of parameters whose type depends
on the parameter being set.
If pname is PIXEL_FRAGMENT_RGB_SOURCE_SGIS or
PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS, param is an integer
that is one of the symbolic constants CURRENT_RASTER_COLOR or
PIXEL_GROUP_COLOR_SGIS.
The assignment of the fragment color components when PIXEL_TEXTURE_SGIS
is enabled is determined by the values of PIXEL_FRAGMENT_RGB_SOURCE_SGIS
and PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS as defined by the following tables:
PIXEL_FRAGMENT_RGB_SOURCE_SGIS Resulting fragment RGB
------------------------------ ----------------------
CURRENT_RASTER_COLOR CRP's RGB
PIXEL_GROUP_COLOR_SGIS PG's RGB
PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS Resulting fragment A
-------------------------------- --------------------
CURRENT_RASTER_COLOR CRP's A
PIXEL_GROUP_COLOR_SGIS PG's A
PG, CRP, R, G, B, A are abbreviations of "current raster
position", "pixel group", "red", "green", "blue", and "alpha"
respectively.
When the pixel_texture extension is enabled, the lambda
value used in the texture mapping equations is set to zero.
Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Frame Buffer)
The operation of PIXEL_TEXTURE_SGIS during pixel copy operations is
identical to the operation during pixel drawing.
Additions to Chapter 5 of the 1.0 Specification (Special Functions)
The following commands are not included in display lists:
GetPixelTexGenParameter{if}vSGIS
Additions to Chapter 6 of the 1.0 Specification (State and State Requests)
Add to the list of Get commands following the paragraph starting
with "Other commands exist to obtain state variables that are
indexed by a target...":
GetPixelTexGenParameter{if}vSGIS( enum value, T data );
Change the phrase a few paragraph later "GetMaterial, GetTexGen,
GetTexEnv, and GetTexParameter are similar to GetLight,
placing information..." to "GetMaterial, GetTexGen, GetTexEnv,
GetTexParameter, and GetPixelTexGenParameter{if}vSGIS
are similar to GetLight, placing information..."
Additions to the GLX Specification
None
Errors
INVALID_ENUM is generated if PixelTexGenParameterSGIS parameter <pname>
is not PIXEL_FRAGMENT_RGB_SOURCE_SGIS or PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS.
INVALID_ENUM is generated if PixelTexGenParameterSGIS parameter <pname>
is one of PIXEL_FRAGMENT_RGB_SOURCE_SGIS or
PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS and parameter <param> is not
CURRENT_RASTER_COLOR or PIXEL_GROUP_COLOR_SGIS.
INVALID_OPERATION is generated if PixelTexGenParameteriSGIS,
PixelTexGenParameterivSGIS, or GetPixelTexGenParameterivSGIS
are called between the execution of Begin and the execution
of the corresponding End.
New State
The following is added to Table 6.16. Pixels.
Get Value Get Command Type Initial Value Attrib
--------- ----------- ---- ------------- ------
PIXEL_TEXTURE_SGIS IsEnabled B FALSE pixel/enable
PIXEL_FRAGMENT_RGB_SOURCE_SGIS GetPixelTexGenParameterivSGIS Z2 PIXEL_GROUP_COLOR_SGIS pixel
PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS GetPixelTexGenParameterivSGIS Z2 PIXEL_GROUP_COLOR_SGIS pixel
New Implementation Dependent State
None