Name

    EXT_blend_subtract

Name Strings

    GL_EXT_blend_subtract

Version

    $Date: 1995/03/31 04:40:39 $ $Revision: 1.4 $

Number

    38

Dependencies

    EXT_blend_minmax affects the definition of this extension

Overview

    Two additional blending equations are specified using the interface
    defined by EXT_blend_minmax.  These equations are similar to the
    default blending equation, but produce the difference of its left
    and right hand sides, rather than the sum.  Image differences are
    useful in many image processing applications.
    
New Procedures and Functions

    None

New Tokens

    Accepted by the <mode> parameter of BlendEquationEXT:

        FUNC_SUBTRACT_EXT                0x800A
        FUNC_REVERSE_SUBTRACT_EXT        0x800B

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

    None

Additions to Chapter 3 of the GL Specification (Rasterization)

    None

Additions to Chapter 4 of the GL Specification (Per-Fragment Operations
and the Framebuffer)

    Two additional blending equations are defined.  If BlendEquationEXT is
    called with <mode> set to FUNC_SUBTRACT_EXT, the blending equation
    becomes

        C' = (Cs * S) - (Cd * D)

             /  0.0     C' < 0.0
        C = (
             \   C'     C' >= 0.0

    where Cs and Cd are the source and destination colors, and S and D are
    as specified by BlendFunc.

    If BlendEquationEXT is called with <mode> set to
    FUNC_REVERSE_SUBTRACT_EXT, the blending equation becomes

        C' = (Cd * D) - (Cs * S)

             /  0.0     C' < 0.0
        C = (
             \   C'     C' >= 0.0

    In all cases the blending equation is evaluated separately for each
    color component.

Additions to Chapter 5 of the GL Specification (Special Functions)

    None

Additions to Chapter 6 of the GL Specification (State and State Requests)

    None

Additions to the GLX Specification

    None

GLX Protocol

    None

Dependencies on EXT_blend_minmax

    If this extension is supported, but EXT_blend_minmax is not, then
    this extension effectively defines the procedure BlendEquationEXT, its
    parameter FUNC_ADD_EXT, and the query target BLEND_EQUATION_EXT, as
    described in EXT_blend_minmax.  It is therefore as though
    EXT_blend_minmax were also supported, except that equations MIN_EXT
    and MAX_EXT are not supported.

Errors

    INVALID_ENUM is generated by BlendEquationEXT if its single parameter
    is not FUNC_ADD_EXT, MIN_EXT, MAX_EXT, FUNC_SUBTRACT_EXT, or
    FUNC_REVERSE_SUBTRACT_EXT.

    INVALID_OPERATION is generated if BlendEquationEXT is executed between
    the execution of Begin and the corresponding execution to End.

New State

    Get Value           Get Command     Type    Initial Value   Attribute
    ---------           -----------     ----    -------------   ---------
    BLEND_EQUATION_EXT  GetIntegerv     Z5      FUNC_ADD_EXT    color-buffer

New Implementation Dependent State

    None
