Name

    EXT_blend_logic_op

Name Strings

    GL_EXT_blend_logic_op

Version

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

Number

    39

Dependencies

    EXT_blend_minmax affects the definition of this extension

Overview

    A single additional blending equation is specified using the interface
    defined by EXT_blend_minmax.  This equation is a simple logical
    combination of the source and destination colors, where the specific
    logical operation is as specified by LogicOp.  While only the XOR
    operation may find wide application, the generality of full logical
    operations is allowed.
    
New Procedures and Functions

    None

New Tokens

    None

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)

    A single additional blending equation is defined.  If BlendEquationEXT
    is called with <mode> set to LOGIC_OP, the blending equation becomes

        C = Cs OP Cd

    where Cs and Cd are the source and destination colors, and OP is the
    logic operation as specified by LogicOp.

    The value of boolean parameter LOGIC_OP (specified by Enable and
    Disable, and queried with IsEnabled) has no affect on blending, even
    when the blend equation is specified as LOGIC_OP.

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 adds 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,
    FUNC_REVERSE_SUBTRACT_EXT, or LOGIC_OP.

    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     Z6      FUNC_ADD_EXT    color-buffer

New Implementation Dependent State

    None
