Name
SGIX_decimation
Name Strings
GL_SGIX_decimation
Version
$Date: 1997/07/18 00:49:00 $ $Revision: 1.4 $
Number
125
Dependencies
EXT_convolution affects the definition of this extension
SGI_color_table affects the definition of this extension
Overview
This extension adds a decimation operation to the pixel transfer
path.
Decimation occurs after convolution and prior to the post-convolution
color table.
The operation is controlled by two positive integer parameters, stepx
and stepy, that specify the decimation step size in the x and y
directions, respectively. During a pixel transfer, the decimation
operation passes only those pixels which are at a position (i*stepx,
j*stepy), for integers (i, j), relative to the bottom left corner of
the image that is being transferred. All other pixels are discarded.
Decimation is applied to the image that results from convolution,
which may differ in size from the source image if convolution is
enabled.
By default, stepx and stepy are both 1.
Issues
* This spec allows for future extension to 3D decimation.
* What is a reasonable minimum maximum decimation step that we should
enforce? Two is probably sufficient.
* Future extensions that redefine the convolution operation at the border
of an image may affect this specification.
* Decimation doesn't apply to bitmaps because they are not affected
by the PixelTransfer state. This is probably best.
* Decimation is related to interlacing, as defined in the
SGIX_interlace extension. In fact, it provides the inverse of
interlacing. It appears useful to be able to enable decimation and
interlacing on the same transfer. Interactions between these
two extensions should be examined further.
New Procedures and Functions
None
New Tokens
Accepted by the parameter of glPixelTransferf,
glPixelTransferi, GetBooleanv, GetIntegerv,
GetFloatv, and GetDoublev:
DECIMATION_X_SGIX 0xXXXX
DECIMATION_Y_SGIX 0xXXXX
Accepted by the parameter of GetBooleanv, GetIntegerv,
GetFloatv, and GetDoublev:
MAX_DECIMATION_X_SGIX 0xXXXX
MAX_DECIMATION_Y_SGIX 0xXXXX
Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 1.0 Specification (Rasterization)
The specification of the decimation operation is added to the GL
Specification in section 3.6.2, "Pixel Transfer Modes."
The decimation operation is added to the GL Specification in section
3.6.3, "Rasterization of Pixel Rectangles, immediately following the
operations described in EXT_convolution, and prior to the
post-convolution color table operation that is described in the
SGI_color_table extension.
Decimation operates on the image of pixels resulting from the
convolution stage of the pixel transfer path. If stepx and stepy are
the current decimation step parameters, then the decimation
operation passes only those pixels which are at a position (i*stepx,
j*stepy), for integers (i, j), relative to the bottom left corner of
the image. All other pixels are discarded. If the image size prior
to decimation is (nx, ny), where nx >= 1 and ny >= 1, then its size
after decimation will be (floor((nx-1)/stepx) + 1,
floor((ny-1)/stepy) + 1)).
Decimation is applied to the image that results from convolution,
which may differ in size from the source image if convolution is
enabled.
In cases where errors can result from the specification of invalid
image dimensions, it is these resulting dimensions that are tested,
not the dimensions of the source image.
If this extension is implemented, decimation is always active, and is
applied to any pixel transfer, regardless of the command used to
generate it. (There is no enable or disable of decimation.)
The x and y decimation parameters are specified by calling
PixelTransfer with set to DECIMATION_X_SGIX, and
DECIMATION_Y_SGIX, respectively. Each parameter value must be a
positive integer less than or equal to MAX_DECIMATION_X_SGIX and
MAX_DECIMATION_Y_SGIX, respectively.
Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Framebuffer)
The operation of decimation during pixel copy and query operations is
identical to the operation during pixel drawing and texture image
definition. This operation occurs immediately after the operations
described by EXT_convolution, and prior to the post-convolution color
table operation that is described in the SGI_color_table extension,
which follow section 4.3.2 (Reading Pixels) of the GL Specification.
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)
The x decimation step parameter is queried using GetIntegerv with
set to DECIMATION_X_SGIX.
The y decimation step parameter is queried using GetIntegerv with
set to DECIMATION_Y_SGIX.
The maximum allowed x decimation step parameter is queried using
GetIntegerv with set to MAX_DECIMATION_X_SGIX.
The maximum allowed y decimation step parameter is queried using
GetIntegerv with set to MAX_DECIMATION_Y_SGIX.
Additions to the GLX Specification
None
GLX Protocol
None
Dependencies on EXT_convolution
The decimation operation follows the convolution operation (and its
scale and bias). If convolution is not supported, the location of
the decimation operation with respect to all other pixel operations
remains the same.
Dependencies on SGI_color_table
The decimation operation precedes the post-convolution color table
operation. If the post-convolution color table operation is not
supported, the location of the decimation operation with respect to
all other pixel operations remains the same.
Errors
INVALID_VALUE is generated if PixelTransfer is called with parameter
equal to DECIMATION_X_SGIX and parameter less
than 1 or greater than MAX_DECIMATION_X_SGIX as queried using
GetIntegerv with MAX_DECIMATION_X_SGIX.
INVALID_VALUE is generated if PixelTransfer is called with parameter
equal to DECIMATION_Y_SGIX and parameter less
than 1 or greater than MAX_DECIMATION_Y_SGIX as queried using
GetIntegerv with MAX_DECIMATION_Y_SGIX.
New State
Get Value Get Command Type Initial Value Attribute
--------- ----------- ---- ------------- ---------
DECIMATION_X_SGIX GetIntegerv Z+ 1 pixel
DECIMATION_Y_SGIX GetIntegerv Z+ 1 pixel
New Implementation Dependent State
Get Value Get Command Type Minimum Value
--------- ----------- ---- -------------
MAX_DECIMATION_X_SGIX GetIntegerv Z+ 2
MAX_DECIMATION_Y_SGIX GetIntegerv Z+ 2