Name EXT_convolution Name Strings GL_EXT_convolution Version Date: June 27, 2002 Version: 1.32 Number 12 Dependencies EXT_abgr affects the definition of this extension EXT_texture is required EXT_copy_texture affects the definition of this extension Overview This extension defines 1 and 2 dimensional convolution operations at a fixed location in the pixel transfer process. Thus pixel drawing, reading, and copying, as well as texture image definition, are all candidates for convolution. The convolution kernels are themselves treated as 1 and 2 dimensional images, which can be loaded from application memory or from the framebuffer. This extension is designed to accommodate 3D convolution, but the API is left for a future extension. New Procedures and Functions void ConvolutionFilter1DEXT(enum target, enum internalformat, sizei width, enum format, enum type, const void* image); void ConvolutionFilter2DEXT(enum target, enum internalformat, sizei width, sizei height, enum format, enum type, const void* image); void CopyConvolutionFilter1DEXT(enum target, enum internalformat, int x, int y, sizei width); void CopyConvolutionFilter2DEXT(enum target, enum internalformat, int x, int y, sizei width, sizei height); void GetConvolutionFilterEXT(enum target, enum format, enum type, void* image); void SeparableFilter2DEXT(enum target, enum internalformat, sizei width, sizei height, enum format, enum type, const void* row, const void* column); void GetSeparableFilterEXT(enum target, enum format, enum type, void* row, void* column, void* span); void ConvolutionParameteriEXT(enum target, enum pname, int param); void ConvolutionParameterivEXT(enum target, enum pname, const int* params); void ConvolutionParameterfEXT(enum target, enum pname, float param); void ConvolutionParameterfvEXT(enum target, enum pname, const float* params); void GetConvolutionParameterivEXT(enum target, enum pname, int* params); void GetConvolutionParameterfvEXT(enum target, enum pname, float* params); New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev, and by the parameter of ConvolutionFilter1DEXT, CopyConvolutionFilter1DEXT, GetConvolutionFilterEXT, ConvolutionParameteriEXT, ConvolutionParameterfEXT, ConvolutionParameterivEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, and GetConvolutionParameterfvEXT: CONVOLUTION_1D_EXT 0x8010 Accepted by the parameter of Enable, Disable, and IsEnabled, by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev, and by the parameter of ConvolutionFilter2DEXT, CopyConvolutionFilter2DEXT, GetConvolutionFilterEXT, ConvolutionParameteriEXT, ConvolutionParameterfEXT, ConvolutionParameterivEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, and GetConvolutionParameterfvEXT: CONVOLUTION_2D_EXT 0x8011 Accepted by the parameter of Enable, Disable, and IsEnabled, by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev, and by the parameter of SeparableFilter2DEXT, SeparableFilter2DEXT, GetSeparableFilterEXT, ConvolutionParameteriEXT, ConvolutionParameterfEXT, ConvolutionParameterivEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, and GetConvolutionParameterfvEXT: SEPARABLE_2D_EXT 0x8012 Accepted by the parameter of ConvolutionParameteriEXT, ConvolutionParameterfEXT, ConvolutionParameterivEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, and GetConvolutionParameterfvEXT: CONVOLUTION_BORDER_MODE_EXT 0x8013 Accepted by the parameter of ConvolutionParameterivEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, and GetConvolutionParameterfvEXT: CONVOLUTION_FILTER_SCALE_EXT 0x8014 CONVOLUTION_FILTER_BIAS_EXT 0x8015 Accepted by the parameter of ConvolutionParameteriEXT, and ConvolutionParameterfEXT, and by the parameter of ConvolutionParameterivEXT and ConvolutionParameterfvEXT, when the parameter is CONVOLUTION_BORDER_MODE_EXT: REDUCE_EXT 0x8016 Accepted by the parameter of GetConvolutionParameterivEXT and GetConvolutionParameterfvEXT: CONVOLUTION_FORMAT_EXT 0x8017 CONVOLUTION_WIDTH_EXT 0x8018 CONVOLUTION_HEIGHT_EXT 0x8019 MAX_CONVOLUTION_WIDTH_EXT 0x801A MAX_CONVOLUTION_HEIGHT_EXT 0x801B Accepted by the parameter of PixelTransferi, PixelTransferf, and by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: POST_CONVOLUTION_RED_SCALE_EXT 0x801C POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F POST_CONVOLUTION_RED_BIAS_EXT 0x8020 POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 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 convolution operators is added to the GL Specification in section 3.6.2, "Pixel Transfer Modes." A 2-dimensional convolution filter image is specified using the ConvolutionFilter2DEXT command. Its parameter must be CONVOLUTION_2D_EXT. Its parameter specifies the format of image that will be retained; it must be one of ALPHA, LUMINANCE, LUMINANCE_ALPHA, INTENSITY_EXT, RGB, or RGBA. Its , , , , and parameters specify an image in memory with exactly the same semantics of the corresponding parameters to DrawPixels. The specified image is extracted from memory and processed just as if DrawPixels were called, stopping after the Final Expansion to RGBA step is completed. The R, G, B, and A components of each pixel are then scaled by the four 2D CONVOLUTION_FILTER_SCALE_EXT parameters, then biased by the four 2D CONVOLUTION_FILTER_BIAS_EXT parameters. These parameters are themselves specified by calling ConvolutionParameterivEXT or ConvolutionParameterfvEXT with CONVOLUTION_2D_EXT, CONVOLUTION_FILTER_SCALE_EXT or CONVOLUTION_FILTER_BIAS_EXT, and pointing to a vector of four values: red, green, blue, and alpha, in that order. The R, G, B, and A values are not clamped to [0,1] at any time during this process. Each pixel is then converted to have the specified internal format. This conversion simply maps the component values of the pixel (R, G, B, and A) to the values included in the internal format (red, green, blue, alpha, luminance, and intensity). The mapping is as follows: Internal Format red green blue alpha luminance intensity --------------- --- ----- ---- ----- --------- --------- ALPHA A LUMINANCE R LUMINANCE_ALPHA A R INTENSITY_EXT R RGB R G B RGBA R G B A Pixel Organization The red, green, blue, alpha, luminance, and/or intensity components of the pixels are stored in floating point, rather than integer format. They form a 2-dimensional image indexed with coordinates i,j such that i increases from left to right, starting at zero, and j increases from bottom to top, also starting at zero. Image location i,j is specified by the Nth pixel, counting from zero, where N is i+j*width. The error INVALID_VALUE is generated if or is greater than the maximum supported value. This value is queried with GetConvolutionParameterivEXT, setting to CONVOLUTION_2D_EXT and to MAX_CONVOLUTION_WIDTH_EXT or MAX_CONVOLUTION_HEIGHT_EXT, respectively. A 1-dimensional convolution filter is defined using ConvolutionFilter1DEXT. Its parameter must be CONVOLUTION_1D_EXT. Its , , and parameters have identical semantics and accept the same values as do their 2D counterparts. must point to a 1-dimensional image, however. The 1-dimensional image is taken from memory and processed as if ConvolutionFilter2DEXT were called with a height of 1, except that it is scaled and biased by the two 1D vectors, rather than the 2D vectors. (The 1D scale and bias vectors are specified using ConvolutionParameterivEXT with CONVOLUTION_1D_EXT and CONVOLUTION_FILTER_SCALE_EXT or CONVOLUTION_FILTER_BIAS_EXT.) The 1-dimensional image is formed with coordinates i such that i increases from left to right, starting at zero. Image location i is specified by the ith pixel, counting from zero. The error INVALID_VALUE is generated if is greater than the maximum supported value, which is queried using GetConvolutionParameterivEXT, setting to CONVOLUTION_1D_EXT and to MAX_CONVOLUTION_WIDTH_EXT. If EXT_copy_texture is supported, one and 2-dimensional filters can also be defined using image data in the framebuffer. Rather than accepting image data from memory, they copy image data from the color buffer specified by the current ReadBuffer mode. CopyConvolutionFilter2DEXT accepts image data from a pixel wide by pixel high color buffer region whose lower-left pixel has window coordinates ,. If any pixels within this region are outside the window that is associated with the GL context, the values obtained for those pixels are undefined. These pixel values are obtained from the framebuffer exactly as if ReadPixels had been called with set to RGBA, with processing continuing through Conversion of RGBA values. At this point all pixel component values are treated exactly as if ConvolutionFilter2DEXT had been called, beginning with the scaling of the color components by CONVOLUTION_FILTER_SCALE_SGI. Pixel ordering is such that lower X screen coordinates correspond to lower i filter image coordinates, and lower Y screen coordinates correspond to lower j filter image coordinates. The semantics and accepted values of the and parameters are exactly equivalent to their ConvolutionFilter2DEXT counterparts. CopyConvolutionFilter1DEXT accepts image data from a pixel wide by 1 pixel high color buffer region whose left-most pixel has window coordinates ,. If any pixels within this region are outside the window that is associated with the GL context, the values obtained for those pixels are undefined. The pixels are processed just as those of CopyConvolutionFilter2DEXT are, and they define a filter image such that lower X window coordinates correspond to lower i filter image coordinates. The semantics and accepted values of the and parameters are exactly equivalent to their ConvolutionFilter1DEXT counterparts. Special facilities are provided for the definition of 2-dimensional separable filters -- filters whose image can be represented as the product of two 1-dimensional images, rather than as full 2-dimensional images. A 2-dimensional convolution filter is specified using SeparableFilter2DEXT. Its parameter must be SEPARABLE_2D_EXT. Its parameter specifies the formats of two 1-dimensional images that will be retained; it must be one of ALPHA, LUMINANCE, LUMINANCE_ALPHA, INTENSITY_EXT, RGB, or RGBA. and point to two 1-dimensional images in memory. The image is pixels wide, and is defined by and . The image is pixels wide, and is also defined by and . The two images are extracted from memory and processed just as if ConvolutionFilter1DEXT were called separately for each, with the resulting retained images replacing the current 2D separable filter images, except that each image is scaled and biased using the 2D separable scale and bias vectors. (These vectors are specified using ConvolutionParameterivEXT with SEPARABLE_2D_EXT and CONVOLUTION_FILTER_SCALE_EXT or CONVOLUTION_FILTER_BIAS_EXT.) The operations of the convolution filters are added to the GL Specification in section 3.6.3, "Rasterization of Pixel Rectangles, immediately following the subsection "Index Lookup", and immediately prior to the operations described by EXT_histogram. Filters are enabled and disabled by calling Enable and Disable with filter name passed as the parameter. Convolution is performed only for RGBA groups, though these groups may have been specified as color indexes and converted to RGBA by index table lookup. If CONVOLUTION_1D_EXT is enabled, the 1-dimensional convolution filter is applied only to the image passed to TexImage1D, and to 1-dimensional textures queried by GetTexImage. If CONVOLUTION_2D_EXT is enabled, the 2-dimensional convolution filter is applied only to the 2D images passed to DrawPixels, CopyPixels, ReadPixels, TexImage2D, TexSubImage2DEXT, CopyTexImage2DEXT, CopyTexSubImage2DEXT, and GetTexImage, and to 2-dimensional images queried by GetTexImage. If SEPARABLE_2D_EXT is enabled, and CONVOLUTION_2D_EXT is disabled, the separable 2-dimensional convolution filter is applied only to these same images. The convolution operation is a sum of products of source image pixels and convolution filter pixels. Source image pixels always have four components: red, green, blue, and alpha, denoted in the equations below as Rs, Gs, Bs, and As. Filter pixels may be stored in one of five formats, with 1, 2, 3, or 4 components. These components are denoted as Rf, Gf, Bf, Af, Lf, and If in the equations below. The result of the convolution operation is the 4-tuple R,G,B,A. Depending on the internal format of the filter, individual color components of each source image pixel are convolved with one filter component, or are passed unmodified. The rules for this are: Filter format ------------- ALPHA R = Rs G = Gs B = Bs A = convolve(As,Af) LUMINANCE R = convolve(Rs,Lf) G = convolve(Gs,Lf) B = convolve(Bs,Lf) A = As LUMINANCE_ALPHA R = convolve(Rs,Lf) G = convolve(Gs,Lf) B = convolve(Bs,Lf) A = convolve(As,Af) INTENSITY R = convolve(Rs,If) G = convolve(Gs,If) B = convolve(Bs,If) A = convolve(As,If) RGB R = convolve(Rs,Rf) G = convolve(Gs,Gf) B = convolve(Bs,Bf) A = As RGBA R = convolve(Rs,Rf) G = convolve(Gs,Gf) B = convolve(Bs,Bf) A = convolve(As,Af) The convolution operation is defined differently for each of the three convolution filters. In the following equations the SUM{}{}equation notation indicate the sum of the equation evaluated for all combinations of conditions indicated within the sets of curly brackets. The variables Wf and Hf refer to the dimensions of the convolution filter. The variables Ws and Hs refer to the dimensions of the source pixel image. The pixel indexing nomenclature is decribed in the Pixel Organization section, above. The convolution equations are: 1-dimensional filter: C[i] = SUM{n = 0 through Wf-1} Cs[i+n] * Cf[n] 2-dimensional filter: C[i,j] = SUM{n = 0 through Wf-1} {m = 0 through Hf-1} Cs[i+n,j+m] * Cf[n,m] 2-dimensional separable filter: C[i,j] = SUM{n = 0 through Wf-1} {m = 0 through Hf-1} Cs[i+n,j+m] * Crow[n] * Ccolumn[m] If Wf of a 1-dimensional filter is zero, then C[i] is always set to zero. Likewise, if either Wf or Hf of a 2-dimensional filter is zero, then C[i,j] is always set to zero. The convolution border mode for a specific convolution filter is specified using ConvolutionParameteriEXT with the parameter set to the name of the filter, the parameter set to CONVOLUTION_BORDER_MODE_EXT, and set to REDUCE_EXT. (This extension defines only a single border mode.) The width and height of source images convolved with border mode REDUCE_EXT are reduced by Wf-1 and Hf-1, respectively. If this reduction would generate a resulting image with zero or negative width and/or height, the output is simply null, with no error generated. The coordinates of the image that results from a convolution with border mode REDUCE_EXT are zero through Ws-Wf in width, and zero through Hs-Hf in height. 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. (A specific example is TexImage1D and TexImage2D, which specify constraints for image dimensions. Even if TexImage1D or TexImage2D is called with a null pixel pointer, the dimensions of the resulting texture image are those that would result from the convolution of the specified image.) If a convolution operation is performed, the resulting image is scaled and biased by parameters specified using the PixelTransfer command. These operations are: red = red * POST_CONVOLUTION_RED_SCALE_EXT + POST_CONVOLUTION_RED_BIAS_EXT green = green * POST_CONVOLUTION_GREEN_SCALE_EXT + POST_CONVOLUTION_GREEN_BIAS_EXT blue = blue * POST_CONVOLUTION_BLUE_SCALE_EXT + POST_CONVOLUTION_BLUE_BIAS_EXT alpha = alpha * POST_CONVOLUTION_ALPHA_SCALE_EXT + POST_CONVOLUTION_ALPHA_BIAS_EXT If no convolution operation is performed, the scale and bias are not performed either. Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and the Framebuffer) The operation of convolution during pixel copy and query operations is identical to the operation during pixel drawing and texture image definition. Additions to Chapter 5 of the 1.0 Specification (Special Functions) Commands GetConvolutionFilterEXT, GetSeparableFilterEXT, GetConvolutionParameterivEXT, and GetConvolutionParameterfvEXT are not included in display lists. They are always executed immediately. Additions to Chapter 6 of the 1.0 Specification (State and State Requests) Integer and floating point query functions GetConvolutionParameterivEXT and GetConvolutionParameterfvEXT are provided. must be CONVOLUTION_1D_EXT, CONVOLUTION_2D_EXT, or SEPARABLE_2D_EXT. is one of CONVOLUTION_FORMAT_EXT, CONVOLUTION_WIDTH_EXT, CONVOLUTION_HEIGHT_EXT, MAX_CONVOLUTION_WIDTH_EXT, or MAX_CONVOLUTION_HEIGHT_EXT. The value of the specified parameter is returned in . The current contents of a convolution filter image are queried using GetConvolutionFilterEXT. must be CONVOLUTION_1D_EXT or CONVOLUTION_2D_EXT. must be one of RED, GREEN, BLUE, ALPHA, RGB, RGBA, ABGR_EXT, LUMINANCE, or LUMINANCE_ALPHA. must be UNSIGNED_BYTE, BYTE, UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT, or FLOAT. The 1-dimensional or 2-dimensional image is returned to . No pixel transfer operations are performed on this image, but pixel storage modes that are applicable to ReadPixels are performed. Color components are converted from the internal floating point representation to according to table 2.4. Prior to the conversion, if is one of UNSIGNED_BYTE, UNSIGNED_SHORT, or UNSIGNED_INT, the color components are clamped to 0..1, if is one of BYTE, SHORT, or INT, the components are clamped to -1..1. No clamping is performed if is FLOAT. Color components that are requested in the specified , but which are not included in the internal format of the filter image, are returned as zero. The assignments of internal color components to the components requested by are internal component resulting component ------------------ ------------------- red red green green blue blue alpha alpha luminance red intensity red The current contents of a separable filter image are queried using GetSeparableFilterEXT. must be SEPARABLE_2D_EXT. and accept the same values as do the corresponding parameters of GetConvolutionFilterEXT. The row and column images are returned to and respectively. No change is made to any location related to . Pixel processing and component mapping are identical to those of GetConvolutionFilterEXT. Additions to the GLX Specification None GLX Protocol Thirteen new GL commands are added. The following six rendering commands are sent to the server as part of a glXRender request: CopyConvolutionFilter1DEXT 2 24 rendering command length 2 4107 rendering command opcode 4 ENUM target 4 ENUM internalformat 4 INT32 x 4 INT32 y 4 INT32 width CopyConvolutionFilter2DEXT 2 28 rendering command length 2 4108 rendering command opcode 4 ENUM target 4 ENUM internalformat 4 INT32 x 4 INT32 y 4 INT32 width 4 INT32 height ConvolutionParameteriEXT 2 16 rendering command length 2 4105 rendering command opcode 4 ENUM target 4 ENUM pname 0x8013 CONVOLUTION_BORDER_MODE_EXT 4 INT32 param ConvolutionParameterivEXT 2 12+4*n rendering command length 2 4106 rendering command opcode 4 ENUM target 4 ENUM pname 0x8013 n=1 CONVOLUTION_BORDER_MODE_EXT 0x8014 n=4 CONVOLUTION_FILTER_SCALE_EXT 0x8015 n=4 CONVOLUTION_FILTER_BIAS_EXT 0x8017 n=1 CONVOLUTION_FORMAT_EXT 0x8018 n=1 CONVOLUTION_WIDTH_EXT 0x8019 n=1 CONVOLUTION_HEIGHT_EXT 0x801A n=1 MAX_CONVOLUTION_WIDTH_EXT 0x801B n=1 MAX_CONVOLUTION_HEIGHT_EXT 4*n LISTofINT32 params ConvolutionParameterfEXT 2 16 rendering command length 2 4103 rendering command opcode 4 ENUM target 4 ENUM pname 0x8013 CONVOLUTION_BORDER_MODE_EXT 4 FLOAT32 param ConvolutionParameterfvEXT 2 12+4*n rendering command length 2 4104 rendering command opcode 4 ENUM target 4 ENUM pname 0x8013 n=1 CONVOLUTION_BORDER_MODE_EXT 0x8014 n=4 CONVOLUTION_FILTER_SCALE_EXT 0x8015 n=4 CONVOLUTION_FILTER_BIAS_EXT 0x8017 n=1 CONVOLUTION_FORMAT_EXT 0x8018 n=1 CONVOLUTION_WIDTH_EXT 0x8019 n=1 CONVOLUTION_HEIGHT_EXT 0x801A n=1 MAX_CONVOLUTION_WIDTH_EXT 0x801B n=1 MAX_CONVOLUTION_HEIGHT_EXT 4*n LISTofFLOAT32 params The following three rendering commands contain pixel data and are thus sent to the server as part of a glXRender request or as part of a glXRenderLarge request: ConvolutionFilter1DEXT 2 48+n+p rendering command length 2 4101 rendering command opcode 1 BOOL swap_bytes 1 BOOL lsb_first 2 unused 4 CARD32 row_length 4 CARD32 skip_rows 4 CARD32 skip_pixels 4 CARD32 alignment 4 ENUM target 4 ENUM internalformat 4 INT32 width 4 INT32 height 4 ENUM format 4 ENUM type n LISTofBYTE pixels p unused, p=pad(n) If the command is encoded in a glXRenderLarge request, the command opcode and command length fields above are expanded to 4 bytes each: 4 52+n+p rendering command length 4 4101 rendering command opcode If < 0, is invalid or is invalid, then the command is erroneous and n=0. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , , , , , , , and as given in the request, and a height of 1. ConvolutionFilter2DEXT 2 48+n+p rendering command length 2 4102 rendering command opcode 1 BOOL swap_bytes 1 BOOL lsb_first 2 unused 4 CARD32 row_length 4 CARD32 skip_rows 4 CARD32 skip_pixels 4 CARD32 alignment 4 ENUM target 4 ENUM internalformat 4 INT32 width 4 INT32 height 4 ENUM format 4 ENUM type n LISTofBYTE pixels p unused, p=pad(n) If the command is encoded in a glXRenderLarge request, the command opcode and command length fields above are expanded to 4 bytes each: 4 52+n+p rendering command length 4 4102 rendering command opcode If < 0, < 0, is invalid or is invalid, then the command is erroneous and n=0. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , , , , , , , , and as given in the request. SeparableFilter2DEXT 2 48+n1+p1+n2+p2 rendering command length 2 4109 rendering command opcode 1 BOOL swap_bytes 1 BOOL lsb_first 2 unused 4 CARD32 row_length 4 CARD32 skip_rows 4 CARD32 skip_pixels 4 CARD32 alignment 4 ENUM target 4 ENUM internalformat 4 INT32 width 4 INT32 height 4 ENUM format 4 ENUM type n1 LISTofBYTE row p1 unused, p=pad(n) n2 LISTofBYTE column p2 unused, p=pad(n) If the command is encoded in a glXRenderLarge request, the command opcode and command length fields above are expanded to 4 bytes each: 4 52+n+p rendering command length 4 4109 rendering command opcode If < 0, < 0, is invalid or is invalid, then the command is erroneous and n=0. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , , , , , , , and as given in the request, and and a height of 1. The structure of is the same (it is also a one-dimensional image) except that it is pixels wide, instead of pixels wide. The remaining commands are non-rendering commands. These commands are sent separately (i.e., not as part of a glXRender or glXRenderLarge request), using the glXVendorPrivateWithReply request: GetConvolutionParameterivEXT 1 CARD8 opcode (X assigned) 1 17 GLX opcode (glXVendorPrivateWithReply) 2 5 request length 4 3 vendor specific opcode 4 GLX_CONTEXT_TAG context tag 4 ENUM target 4 ENUM pname => 1 1 reply 1 unused 2 CARD16 sequence number 4 m reply length, m = (n==1 ? 0 : n) 4 unused 4 CARD32 n if (n=1) this follows: 4 INT32 params 12 unused otherwise this follows: 16 unused n*4 LISTofINT32 params Note that n may be zero, indicating that a GL error occurred. GetConvolutionParameterfvEXT 1 CARD8 opcode (X assigned) 1 17 GLX opcode (glXVendorPrivateWithReply) 2 5 request length 4 2 vendor specific opcode 4 GLX_CONTEXT_TAG context tag 4 ENUM target 4 ENUM pname => 1 1 reply 1 unused 2 CARD16 sequence number 4 m reply length, m = (n==1 ? 0 : n) 4 unused 4 CARD32 n if (n=1) this follows: 4 FLOAT32 params 12 unused otherwise this follows: 16 unused n*4 LISTofFLOAT32 params Note that n may be zero, indicating that a GL error occurred. GetConvolutionFilterEXT 1 CARD8 opcode (X assigned) 1 17 GLX opcode (glXVendorPrivateWithReply) 2 7 request length 4 1 vendor specific opcode 4 GLX_CONTEXT_TAG context tag 4 ENUM target 4 ENUM format 4 ENUM type 1 BOOL swap_bytes 3 unused => 1 1 reply 1 unused 2 CARD16 sequence number 4 n reply length 8 unused 4 INT32 width 4 INT32 height 8 unused 4*n LISTofBYTE pixels Note that n may be zero, indicating that a GL error occurred. If or is invalid then the command is erroneous and n=0. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , and . No extra padding is needed after because the image format already pads to 32 bits. GetSeparableFilterEXT 1 CARD8 opcode (X assigned) 1 17 GLX opcode (glXVendorPrivateWithReply) 2 7 request length 4 4 vendor specific opcode 4 GLX_CONTEXT_TAG context tag 4 ENUM target 4 ENUM format 4 ENUM type 1 BOOL swap_bytes 3 unused => 1 1 reply 1 unused 2 CARD16 sequence number 4 n reply length 8 unused 4 INT32 width 4 INT32 height 8 unused 4*n LISTofBYTE row followed by column Note that n may be zero, indicating that a GL error occurred. If or is invalid then the command is erroneous and n=0. The structure of is described in Appendix A of the GLX Protocol Specification, "Pixel Data", using the parameters , , and . No extra padding is needed after because the image format already pads to 32 bits. Dependencies on EXT_abgr If EXT_abgr is supported, the parameters of ConvolutionFilter1DEXT, ConvolutionFilter2DEXT, GetConvolutionFilterEXT, SeparableFilter2DEXT, and GetSeparableFilterEXT accept ABGR_EXT. Otherwise they do not. Dependencies on EXT_texture EXT_texture is required. This extension builds on the notion of internal image format, which is defined by EXT_texture. Dependencies on EXT_copy_texture If EXT_copy_texture is not supported, commands CopyConvolutionFilter1DEXT and CopyConvolutionFilter2DEXT are not supported. Errors INVALID_ENUM is generated if ConvolutionFilter1DEXT parameter is not CONVOLUTION_1D_EXT. INVALID_ENUM is generated if ConvolutionFilter2DEXT parameter is not CONVOLUTION_2D_EXT. INVALID_ENUM is generated if CopyConvolutionFilter1DEXT parameter is not CONVOLUTION_1D_EXT. INVALID_ENUM is generated if CopyConvolutionFilter2DEXT parameter is not CONVOLUTION_2D_EXT. INVALID_ENUM is generated if SeparableFilter2DEXT parameter is not SEPARABLE_2D_EXT. INVALID_ENUM is generated if GetConvolutionFilterEXT parameter is not CONVOLUTION_1D_EXT or CONVOLUTION_2D_EXT. INVALID_ENUM is generated if GetSeparableFilterEXT parameter is not SEPARABLE_2D_EXT. INVALID_ENUM is generated if ConvolutionParameteriEXT, ConvolutionParameterfEXT, ConvolutionParameterivEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, or GetConvolutionParameterfvEXT parameter is not CONVOLUTION_1D_EXT, CONVOLUTION_2D_EXT, or SEPARABLE_2D_EXT. INVALID_ENUM is generated if ConvolutionFilter1DEXT, ConvolutionFilter2DEXT, CopyConvolutionFilter1DEXT, CopyConvolutionFilter2DEXT, or SeparableFilter2DEXT parameter is not ALPHA, LUMINANCE, LUMINANCE_ALPHA, INTENSITY, RGB, or RGBA. INVALID_VALUE is generated if ConvolutionFilter1DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_WIDTH_EXT as queried using GetConvolutionParameterivEXT with CONVOLUTION_1D_EXT. INVALID_VALUE is generated if ConvolutionFilter2DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_WIDTH_EXT as queried using GetConvolutionParameterivEXT with CONVOLUTION_2D_EXT. INVALID_VALUE is generated if CopyConvolutionFilter1DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_WIDTH_EXT as queried using GetConvolutionParameterivEXT with CONVOLUTION_1D_EXT. INVALID_VALUE is generated if CopyConvolutionFilter2DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_WIDTH_EXT as queried using GetConvolutionParameterivEXT with CONVOLUTION_2D_EXT. INVALID_VALUE is generated if SeparableFilter2DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_WIDTH_EXT as queried using GetConvolutionParameterivEXT with SEPARABLE_2D_EXT. INVALID_VALUE is generated if ConvolutionFilter2DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_HEIGHT_EXT as queried using GetConvolutionParameterivEXT with CONVOLUTION_2D_EXT. INVALID_VALUE is generated if CopyConvolutionFilter2DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_HEIGHT_EXT as queried using GetConvolutionParameterivEXT with CONVOLUTION_2D_EXT. INVALID_VALUE is generated if SeparableFilter2DEXT parameter is less than zero, or greater than MAX_CONVOLUTION_HEIGHT_EXT as queried using GetConvolutionParameterivEXT with SEPARABLE_2D_EXT. INVALID_ENUM is generated if ConvolutionFilter1DEXT, ConvolutionFilter2DEXT, GetConvolutionFilterEXT, SeparableFilter2DEXT, or GetSeparableFilterEXT parameter is not RED, GREEN, BLUE, ALPHA, RGB, RGBA, ABGR_EXT, LUMINANCE, or LUMINANCE_ALPHA. INVALID_ENUM is generated if ConvolutionFilter1DEXT, ConvolutionFilter2DEXT, GetConvolutionFilterEXT, SeparableFilter2DEXT, or GetSeparableFilterEXT parameter is not UNSIGNED_BYTE, BYTE, UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT, or FLOAT. INVALID_ENUM is generated if ConvolutionParameterivEXT or ConvolutionParameterfvEXT parameter is not CONVOLUTION_FILTER_SCALE_EXT, CONVOLUTION_FILTER_BIAS_EXT, or CONVOLUTION_BORDER_MODE_EXT. INVALID_ENUM is generated if ConvolutionParameteriEXT or ConvolutionParameterfEXT parameter is not CONVOLUTION_BORDER_MODE_EXT. INVALID_ENUM is generated if ConvolutionParameteriEXT, ConvolutionParameterfEXT, ConvolutionParameterivEXT, or ConvolutionParameterfvEXT parameter is CONVOLUTION_BORDER_MODE_EXT and parameter is not REDUCE_EXT. INVALID_ENUM is generated if GetConvolutionParameterivEXT or GetConvolutionParameterfvEXT parameter is not CONVOLUTION_FILTER_SCALE_EXT, CONVOLUTION_FILTER_BIAS_EXT, CONVOLUTION_BORDER_MODE_EXT, CONVOLUTION_FORMAT_EXT, CONVOLUTION_WIDTH_EXT, CONVOLUTION_HEIGHT_EXT, MAX_CONVOLUTION_WIDTH_EXT or MAX_CONVOLUTION_HEIGHT_EXT. INVALID_ENUM is generated if GetConvolutionParameterivEXT or GetConvolutionParameterfvEXT parameter is CONVOLUTION_1D_EXT and is CONVOLUTION_HEIGHT_EXT or MAX_CONVOLUTION_HEIGHT_EXT. INVALID_OPERATION is generated if ConvolutionFilter1DEXT, ConvolutionFilter2DEXT, CopyConvolutionFilter1DEXT, CopyConvolutionFilter2DEXT, GetConvolutionFilterEXT, SeparableFilter2DEXT, GetSeparableFilterEXT, ConvolutionParameteriEXT, ConvolutionParameterivEXT, ConvolutionParameterfEXT, ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, or GetConvolutionParameterfvEXT is executed between execution of Begin and the corresponding execution of End. New State Get Value Get Command Type Initial Value Attribute --------- ----------- ---- ------------- --------- CONVOLUTION_1D_EXT IsEnabled B False pixel/enable CONVOLUTION_2D_EXT IsEnabled B False pixel/enable SEPARABLE_2D_EXT IsEnabled B False pixel/enable CONVOLUTION_FILTER_SCALE_EXT GetConvolutionParameterivEXT 3 x R4 (1,1,1,1) pixel CONVOLUTION_FILTER_BIAS_EXT GetConvolutionParameterivEXT 3 x R4 (0,0,0,0) pixel CONVOLUTION_BORDER_MODE_EXT GetConvolutionParameterivEXT 3 x Z1 REDUCE_EXT pixel CONVOLUTION_xD (x is 1 or 2) GetConvolutionFilterEXT 2 x I empty - SEPARABLE_2D GetSeparableFilterEXT 1 x I empty - CONVOLUTION_FORMAT_EXT GetConvolutionParameterivEXT 3 x Z8 RGBA - CONVOLUTION_WIDTH_EXT GetConvolutionParameterivEXT 3 x Z+ 0 - CONVOLUTION_HEIGHT_EXT GetConvolutionParameterivEXT 2 x Z+ 0 - POST_CONVOLUTION_RED_SCALE_EXT GetFloatv R 1 pixel POST_CONVOLUTION_GREEN_SCALE_EXT GetFloatv R 1 pixel POST_CONVOLUTION_BLUE_SCALE_EXT GetFloatv R 1 pixel POST_CONVOLUTION_ALPHA_SCALE_EXT GetFloatv R 1 pixel POST_CONVOLUTION_RED_BIAS_EXT GetFloatv R 0 pixel POST_CONVOLUTION_GREEN_BIAS_EXT GetFloatv R 0 pixel POST_CONVOLUTION_BLUE_BIAS_EXT GetFloatv R 0 pixel POST_CONVOLUTION_ALPHA_BIAS_EXT GetFloatv R 0 pixel New Implementation Dependent State Get Value Get Command Type Minimum Value --------- ----------- ---- ------------- MAX_CONVOLUTION_WIDTH_EXT GetConvolutionParameterivEXT 3 x Z+ 3 MAX_CONVOLUTION_HEIGHT_EXT GetConvolutionParameterivEXT 2 x Z+ 3 Revision History Version 1.32, 2002/06/27 - fixed targets for GetConvolutionFilter and GetSeparableFilter.