Name

    NV_blend_square

Name Strings

    GL_NV_blend_square

Contact

    Matt Craighead, NVIDIA Corporation (mcraighead 'at' nvidia.com)
    Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)

Notice

    Copyright NVIDIA Corporation, 1999.

Status

    Shipping (version 1.1)

Version

    Date: 1/14/2000  Version: 1.1
    $Date$ $Revision$

Number

    194

Dependencies

    Written based on the wording of the OpenGL 1.2.1 specification.

Overview

    It is useful to be able to multiply a number by itself in the blending
    stages -- for example, in certain types of specular lighting effects
    where a result from a dot product needs to be taken to a high power.

    This extension provides four additional blending factors to permit
    this and other effects: SRC_COLOR and ONE_MINUS_SRC_COLOR for source
    blending factors, and DST_COLOR and ONE_MINUS_DST_COLOR for destination
    blending factors.

    Direct3D provides capability bits for advertising these additional
    blend modes.

Issues

    None

New Procedures and Functions

    None

New Tokens

    None

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

    None

Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization)

    None

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

    Two lines are added to each of tables 4.1 and 4.2:

        Value                           Blend Factors
        -----                           -------------
        ZERO                            (0, 0, 0, 0)
        ONE                             (1, 1, 1, 1)
        SRC_COLOR                       (Rs, Gs, Bs, As)                                        NEW
        ONE_MINUS_SRC_COLOR             (1, 1, 1, 1) - (Rs, Gs, Bs, As)                         NEW
        DST_COLOR                       (Rd, Gd, Bd, Ad)
        ONE_MINUS_DST_COLOR             (1, 1, 1, 1) - (Rd, Gd, Bd, Ad)
        SRC_ALPHA                       (As, As, As, As) / Ka
        ONE_MINUS_SRC_ALPHA             (1, 1, 1, 1) - (As, As, As, As) / Ka
        DST_ALPHA                       (Ad, Ad, Ad, Ad) / Ka
        ONE_MINUS_DST_ALPHA             (1, 1, 1, 1) - (Ad, Ad, Ad, Ad) / Ka
        CONSTANT_COLOR                  (Rc, Gc, Bc, Ac)
        ONE_MINUS_CONSTANT_COLOR        (1, 1, 1, 1) - (Rc, Gc, Bc, Ac)
        CONSTANT_ALPHA                  (Ac, Ac, Ac, Ac)
        ONE_MINUS_CONSTANT_ALPHA        (1, 1, 1, 1) - (Ac, Ac, Ac, Ac)
        SRC_ALPHA_SATURATE              (f, f, f, 1)

        Table 4.1: Values controlling the source blending function and the
        source blending values they compute.  f = min(As, 1 - Ad).

        Value                           Blend Factors
        -----                           -------------
        ZERO                            (0, 0, 0, 0)
        ONE                             (1, 1, 1, 1)
        SRC_COLOR                       (Rs, Gs, Bs, As)
        ONE_MINUS_SRC_COLOR             (1, 1, 1, 1) - (Rs, Gs, Bs, As)
        DST_COLOR                       (Rd, Gd, Bd, Ad)                                        NEW
        ONE_MINUS_DST_COLOR             (1, 1, 1, 1) - (Rd, Gd, Bd, Ad)                         NEW
        SRC_ALPHA                       (As, As, As, As) / Ka
        ONE_MINUS_SRC_ALPHA             (1, 1, 1, 1) - (As, As, As, As) / Ka
        DST_ALPHA                       (Ad, Ad, Ad, Ad) / Ka
        ONE_MINUS_DST_ALPHA             (1, 1, 1, 1) - (Ad, Ad, Ad, Ad) / Ka
        CONSTANT_COLOR_EXT              (Rc, Gc, Bc, Ac)
        ONE_MINUS_CONSTANT_COLOR_EXT    (1, 1, 1, 1) - (Rc, Gc, Bc, Ac)
        CONSTANT_ALPHA_EXT              (Ac, Ac, Ac, Ac)
        ONE_MINUS_CONSTANT_ALPHA_EXT    (1, 1, 1, 1) - (Ac, Ac, Ac, Ac)

        Table 4.2: Values controlling the destination blending function and
        the destination blending values they compute.

Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions)

    None

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

    None

Additions to the AGL/GLX/WGL Specifications

    None

GLX Protocol

    None

Errors

    None

New State

(table 6.15, page 205)
    Get Value                 Type  Get Command   Initial Value   Sec    Attribute
    ------------------------  ----  ------------  -------------   -----  ---------
    BLEND_SRC                  Z15  GetIntegerv        ONE        4.1.6  color-buffer
    BLEND_DST                  Z14  GetIntegerv        ZERO       4.1.6  color-buffer

NOTE: the only change is that Z13 changes to Z15 and Z12 changes to Z14

New Implementation Dependent State

    None

Revision History

    None
