
Name

    HP_convolution_border_modes

Name Strings

    GL_HP_convolution_border_modes

Version

    $Date: 1997/06/12 01:51:36 $ $Revision: 1.3 $

Number

    67

Dependencies

    EXT_convolution is required

Overview

    This extension provides some additional border modes for the
    EXT_convolution extension.

New Procedures and Functions

    None

New Tokens

    Accepted by the <param> parameter of ConvolutionParameteriEXT,
    and ConvolutionParameterfEXT, and by the <params> parameter of
    ConvolutionParameterivEXT and ConvolutionParameterfvEXT, when the
    <pname> parameter is CONVOLUTION_BORDER_MODE_EXT:

	IGNORE_BORDER_HP
	CONSTANT_BORDER_HP
	REPLICATE_BORDER_HP

    Accepted by the <pname> parameter of ConvolutionParameterivEXT,
    ConvolutionParameterfvEXT, GetConvolutionParameterivEXT, and
    GetConvolutionParameterfvEXT:

	CONVOLUTION_BORDER_COLOR_HP

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    The description of the convolution border mode is replaced with
    the following:

    The convolution border mode for a specific convolution filter is
    specified using ConvolutionParameteriEXT with the <target>
    parameter set to the name of the filter, the <pname> parameter
    set to CONVOLUTION_BORDER_MODE_EXT, and <param> set to one of
    REDUCE_EXT, IGNORE_BORDER_HP, CONSTANT_BORDER_HP,
    or REPLICATE_BORDER_HP.

    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.)  

    For the remaining border modes, we define Cw = floor(Wf / 2)
    and Ch = floor(Hf / 2).  The coordinates (Cw, Ch) define the
    center of the convolution filter.

    If the convolution border mode is IGNORE_BORDER_HP, the output
    image has the same dimensions as the source image.  The convolution
    filter is moved around the source image so that its center passes
    over every pixel in the source image.  At each location, the sum of
    products is computed and the result is written in the destination
    image at the location that corresponds to the pixel location where
    the convolution filter is centered.  However, the sum of products
    is not computed for any pixel where the convolution filter extends
    beyond one of the edges of the source image.  Instead, for these
    locations, the pixel value from the source image is copied to
    the destination image.

    If the convolution border mode is CONSTANT_BORDER_HP then
    convolution does not change the size of the source image.  The
    result of the convolution is the same as if the source image were
    surrounded by pixels with the same color as the current convolution
    border color.  Whenever the convolution filter extends beyond one
    of the edges of the source image, the constant-color border pixels
    are used as input to the filter.  The current convolution border
    color is set by calling ConvolutionParameterivEXT or
    ConvolutionParameterfvEXT with <pname> set to
    CONVOLUTION_BORDER_COLOR_HP and <params> containing
    four values that comprise the RGBA color to be used as the image
    border.  Integer color components are interpreted linearly such that
    the most positive integer maps to 1.0, and the most negative integer
    maps to -1.0.  Floating point color components are clamped to the
    range [0,1] when they are specified.

    The convolution border mode REPLICATE_BORDER_HP also produces an
    output image with the same dimensions as the source image.  The
    behavior of this mode is identical to that of the IGNORE_BORDER_HP
    mode except for the treatment of pixel locations where the
    convolution filter extends beyond the edge of the source image.
    For these locations, it is as if the outermost one-pixel border
    of the source image was replicated.  Conceptually, each pixel
    in the leftmost one-pixel column of the source image is replicated
    Cw times to provide additional image data along the left edge,
    each pixel in the rightmost one-pixel column is replicated Cw times
    to provide additional image data along the right edge, and each
    pixel value in the top and bottom one-pixel rows is replicated to
    create Ch rows of image data along the top and bottom edges.
    The pixel value at each corner is also replicated in order to
    provide data for the convolution operation at each corner of
    the source image.
    
Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
and the Frame buffer)

    None

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)

    None

Dependencies on EXT_convolution

    EXT_convolution is required.  This extension adds capability to
    the convolution operations defined in that extension.

Errors

    INVALID_ENUM is generated if ConvolutionParameterivEXT or
    ConvolutionParameterfvEXT parameter <pname> is not
    CONVOLUTION_FILTER_SCALE_EXT, CONVOLUTION_FILTER_BIAS_EXT,
    CONVOLUTION_BORDER_MODE_EXT, or CONVOLUTION_BORDER_COLOR_HP.

    INVALID_ENUM is generated if ConvolutionParameteriEXT,
    ConvolutionParameterfEXT, ConvolutionParameterivEXT, or
    ConvolutionParameterfvEXT parameter <pname> is
    CONVOLUTION_BORDER_MODE_EXT and parameter <params> is
    not one of REDUCE_EXT, IGNORE_BORDER_HP, CONSTANT_BORDER_HP,
    or REPLICATE_BORDER_HP.

    INVALID_ENUM is generated if GetConvolutionParameterivEXT or
    GetConvolutionParameterfvEXT parameter <pname> 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, MAX_CONVOLUTION_HEIGHT_EXT,
    or CONVOLUTION_BORDER_COLOR_HP.

New State
									 Initial
    Get Value				Get Command		Type	  Value 	Attrib
    ---------				-----------		----	 -------	------
    CONVOLUTION_BORDER_COLOR_HP	   GetConvolutionParameterfvHP	 C	(0,0,0,0)	pixel

New Implementation Dependent State

    None
