15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci SGIX_decimation 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_SGIX_decimation 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciVersion 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci $Date: 1997/07/18 00:49:00 $ $Revision: 1.4 $ 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciNumber 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci 125 165bd8deadSopenharmony_ci 175bd8deadSopenharmony_ciDependencies 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ci EXT_convolution affects the definition of this extension 205bd8deadSopenharmony_ci SGI_color_table affects the definition of this extension 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ciOverview 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ci This extension adds a decimation operation to the pixel transfer 255bd8deadSopenharmony_ci path. 265bd8deadSopenharmony_ci 275bd8deadSopenharmony_ci Decimation occurs after convolution and prior to the post-convolution 285bd8deadSopenharmony_ci color table. 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci The operation is controlled by two positive integer parameters, stepx 315bd8deadSopenharmony_ci and stepy, that specify the decimation step size in the x and y 325bd8deadSopenharmony_ci directions, respectively. During a pixel transfer, the decimation 335bd8deadSopenharmony_ci operation passes only those pixels which are at a position (i*stepx, 345bd8deadSopenharmony_ci j*stepy), for integers (i, j), relative to the bottom left corner of 355bd8deadSopenharmony_ci the image that is being transferred. All other pixels are discarded. 365bd8deadSopenharmony_ci Decimation is applied to the image that results from convolution, 375bd8deadSopenharmony_ci which may differ in size from the source image if convolution is 385bd8deadSopenharmony_ci enabled. 395bd8deadSopenharmony_ci 405bd8deadSopenharmony_ci By default, stepx and stepy are both 1. 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ciIssues 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ci * This spec allows for future extension to 3D decimation. 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci * What is a reasonable minimum maximum decimation step that we should 475bd8deadSopenharmony_ci enforce? Two is probably sufficient. 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ci * Future extensions that redefine the convolution operation at the border 505bd8deadSopenharmony_ci of an image may affect this specification. 515bd8deadSopenharmony_ci 525bd8deadSopenharmony_ci * Decimation doesn't apply to bitmaps because they are not affected 535bd8deadSopenharmony_ci by the PixelTransfer state. This is probably best. 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci * Decimation is related to interlacing, as defined in the 565bd8deadSopenharmony_ci SGIX_interlace extension. In fact, it provides the inverse of 575bd8deadSopenharmony_ci interlacing. It appears useful to be able to enable decimation and 585bd8deadSopenharmony_ci interlacing on the same transfer. Interactions between these 595bd8deadSopenharmony_ci two extensions should be examined further. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ciNew Procedures and Functions 625bd8deadSopenharmony_ci 635bd8deadSopenharmony_ci None 645bd8deadSopenharmony_ci 655bd8deadSopenharmony_ciNew Tokens 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ci Accepted by the <pname> parameter of glPixelTransferf, 685bd8deadSopenharmony_ci glPixelTransferi, GetBooleanv, GetIntegerv, 695bd8deadSopenharmony_ci GetFloatv, and GetDoublev: 705bd8deadSopenharmony_ci 715bd8deadSopenharmony_ci DECIMATION_X_SGIX 0xXXXX 725bd8deadSopenharmony_ci DECIMATION_Y_SGIX 0xXXXX 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ci Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 755bd8deadSopenharmony_ci GetFloatv, and GetDoublev: 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ci MAX_DECIMATION_X_SGIX 0xXXXX 785bd8deadSopenharmony_ci MAX_DECIMATION_Y_SGIX 0xXXXX 795bd8deadSopenharmony_ci 805bd8deadSopenharmony_ciAdditions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 815bd8deadSopenharmony_ci 825bd8deadSopenharmony_ci None 835bd8deadSopenharmony_ci 845bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.0 Specification (Rasterization) 855bd8deadSopenharmony_ci 865bd8deadSopenharmony_ci The specification of the decimation operation is added to the GL 875bd8deadSopenharmony_ci Specification in section 3.6.2, "Pixel Transfer Modes." 885bd8deadSopenharmony_ci 895bd8deadSopenharmony_ci The decimation operation is added to the GL Specification in section 905bd8deadSopenharmony_ci 3.6.3, "Rasterization of Pixel Rectangles, immediately following the 915bd8deadSopenharmony_ci operations described in EXT_convolution, and prior to the 925bd8deadSopenharmony_ci post-convolution color table operation that is described in the 935bd8deadSopenharmony_ci SGI_color_table extension. 945bd8deadSopenharmony_ci 955bd8deadSopenharmony_ci Decimation operates on the image of pixels resulting from the 965bd8deadSopenharmony_ci convolution stage of the pixel transfer path. If stepx and stepy are 975bd8deadSopenharmony_ci the current decimation step parameters, then the decimation 985bd8deadSopenharmony_ci operation passes only those pixels which are at a position (i*stepx, 995bd8deadSopenharmony_ci j*stepy), for integers (i, j), relative to the bottom left corner of 1005bd8deadSopenharmony_ci the image. All other pixels are discarded. If the image size prior 1015bd8deadSopenharmony_ci to decimation is (nx, ny), where nx >= 1 and ny >= 1, then its size 1025bd8deadSopenharmony_ci after decimation will be (floor((nx-1)/stepx) + 1, 1035bd8deadSopenharmony_ci floor((ny-1)/stepy) + 1)). 1045bd8deadSopenharmony_ci 1055bd8deadSopenharmony_ci Decimation is applied to the image that results from convolution, 1065bd8deadSopenharmony_ci which may differ in size from the source image if convolution is 1075bd8deadSopenharmony_ci enabled. 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci In cases where errors can result from the specification of invalid 1105bd8deadSopenharmony_ci image dimensions, it is these resulting dimensions that are tested, 1115bd8deadSopenharmony_ci not the dimensions of the source image. 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci If this extension is implemented, decimation is always active, and is 1145bd8deadSopenharmony_ci applied to any pixel transfer, regardless of the command used to 1155bd8deadSopenharmony_ci generate it. (There is no enable or disable of decimation.) 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci The x and y decimation parameters are specified by calling 1185bd8deadSopenharmony_ci PixelTransfer with <pname> set to DECIMATION_X_SGIX, and 1195bd8deadSopenharmony_ci DECIMATION_Y_SGIX, respectively. Each parameter value must be a 1205bd8deadSopenharmony_ci positive integer less than or equal to MAX_DECIMATION_X_SGIX and 1215bd8deadSopenharmony_ci MAX_DECIMATION_Y_SGIX, respectively. 1225bd8deadSopenharmony_ci 1235bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 1245bd8deadSopenharmony_ciand the Framebuffer) 1255bd8deadSopenharmony_ci 1265bd8deadSopenharmony_ci The operation of decimation during pixel copy and query operations is 1275bd8deadSopenharmony_ci identical to the operation during pixel drawing and texture image 1285bd8deadSopenharmony_ci definition. This operation occurs immediately after the operations 1295bd8deadSopenharmony_ci described by EXT_convolution, and prior to the post-convolution color 1305bd8deadSopenharmony_ci table operation that is described in the SGI_color_table extension, 1315bd8deadSopenharmony_ci which follow section 4.3.2 (Reading Pixels) of the GL Specification. 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.0 Specification (Special Functions) 1345bd8deadSopenharmony_ci 1355bd8deadSopenharmony_ci None 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.0 Specification (State and State Requests) 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci The x decimation step parameter is queried using GetIntegerv with 1405bd8deadSopenharmony_ci <pname> set to DECIMATION_X_SGIX. 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci The y decimation step parameter is queried using GetIntegerv with 1435bd8deadSopenharmony_ci <pname> set to DECIMATION_Y_SGIX. 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci The maximum allowed x decimation step parameter is queried using 1465bd8deadSopenharmony_ci GetIntegerv with <pname> set to MAX_DECIMATION_X_SGIX. 1475bd8deadSopenharmony_ci 1485bd8deadSopenharmony_ci The maximum allowed y decimation step parameter is queried using 1495bd8deadSopenharmony_ci GetIntegerv with <pname> set to MAX_DECIMATION_Y_SGIX. 1505bd8deadSopenharmony_ci 1515bd8deadSopenharmony_ciAdditions to the GLX Specification 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci None 1545bd8deadSopenharmony_ci 1555bd8deadSopenharmony_ciGLX Protocol 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ci None 1585bd8deadSopenharmony_ci 1595bd8deadSopenharmony_ciDependencies on EXT_convolution 1605bd8deadSopenharmony_ci 1615bd8deadSopenharmony_ci The decimation operation follows the convolution operation (and its 1625bd8deadSopenharmony_ci scale and bias). If convolution is not supported, the location of 1635bd8deadSopenharmony_ci the decimation operation with respect to all other pixel operations 1645bd8deadSopenharmony_ci remains the same. 1655bd8deadSopenharmony_ci 1665bd8deadSopenharmony_ciDependencies on SGI_color_table 1675bd8deadSopenharmony_ci 1685bd8deadSopenharmony_ci The decimation operation precedes the post-convolution color table 1695bd8deadSopenharmony_ci operation. If the post-convolution color table operation is not 1705bd8deadSopenharmony_ci supported, the location of the decimation operation with respect to 1715bd8deadSopenharmony_ci all other pixel operations remains the same. 1725bd8deadSopenharmony_ci 1735bd8deadSopenharmony_ciErrors 1745bd8deadSopenharmony_ci 1755bd8deadSopenharmony_ci INVALID_VALUE is generated if PixelTransfer is called with parameter 1765bd8deadSopenharmony_ci <pname> equal to DECIMATION_X_SGIX and parameter <param> less 1775bd8deadSopenharmony_ci than 1 or greater than MAX_DECIMATION_X_SGIX as queried using 1785bd8deadSopenharmony_ci GetIntegerv with <pname> MAX_DECIMATION_X_SGIX. 1795bd8deadSopenharmony_ci 1805bd8deadSopenharmony_ci INVALID_VALUE is generated if PixelTransfer is called with parameter 1815bd8deadSopenharmony_ci <pname> equal to DECIMATION_Y_SGIX and parameter <param> less 1825bd8deadSopenharmony_ci than 1 or greater than MAX_DECIMATION_Y_SGIX as queried using 1835bd8deadSopenharmony_ci GetIntegerv with <pname> MAX_DECIMATION_Y_SGIX. 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ciNew State 1865bd8deadSopenharmony_ci 1875bd8deadSopenharmony_ci Get Value Get Command Type Initial Value Attribute 1885bd8deadSopenharmony_ci --------- ----------- ---- ------------- --------- 1895bd8deadSopenharmony_ci DECIMATION_X_SGIX GetIntegerv Z+ 1 pixel 1905bd8deadSopenharmony_ci DECIMATION_Y_SGIX GetIntegerv Z+ 1 pixel 1915bd8deadSopenharmony_ci 1925bd8deadSopenharmony_ciNew Implementation Dependent State 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ci Get Value Get Command Type Minimum Value 1955bd8deadSopenharmony_ci --------- ----------- ---- ------------- 1965bd8deadSopenharmony_ci MAX_DECIMATION_X_SGIX GetIntegerv Z+ 2 1975bd8deadSopenharmony_ci MAX_DECIMATION_Y_SGIX GetIntegerv Z+ 2 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ci 200