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