AG_ALPHAFN(3)

NAME
AG_AlphaFn - agar pixel arithmetic function

SYNOPSIS

    #include <agar/core.h>
    #include <agar/gui.h>

DESCRIPTION
The AG_AlphaFn type specifies an arithmetic operation to use when blending two pixels. The incoming pixel is referred to as the "source" pixel. The target pixel already in the frame buffer is referred to as the "destination" pixel. AG_AlphaFn is defined as:

    typedef enum ag_blend_func {
    	AG_ALPHA_OVERLAY,		/* MIN(sA+dA, 1) */
    	AG_ALPHA_ZERO,			/* 0 */
    	AG_ALPHA_ONE,			/* 1 */
    	AG_ALPHA_SRC,			/* sA */
    	AG_ALPHA_DST,			/* dA */
    	AG_ALPHA_ONE_MINUS_DST,		/* 1-dA */
    	AG_ALPHA_ONE_MINUS_SRC		/* 1-sA */
    } AG_AlphaFn;

The blending functions differ in how the weight of the destination pixel (versus the weight of the source pixel) is selected.

AG_PIXEL_SRC uses the alpha component of the source pixel (sA).

AG_PIXEL_DST uses the alpha component of the destination pixel (dA),

AG_PIXEL_OVERLAY uses the sum of the source and alpha components, clamped to 255. Note that this function may be slower than the others depending on the graphics driver in use.

AG_PIXEL_ONE_MINUS_SRC and AG_PIXEL_ONE_MINUS_DST use the value 1 minus the source and destination alpha component.

EXAMPLES
A typical setting for RGBA<->RGBA surface blit would be AG_PIXEL_SRC for the source and AG_PIXEL_ONE_MINUS_SRC for the destination.

(TODO: Add images to show results of blending under different modes)

SEE ALSO
AG_Intro(3), AG_Widget(3), AG_Window(3), glBlendFunc(3)

HISTORY
The AG_AlphaFn type first appeared in Agar 1.3 under the name AG_BlendFn. It was renamed AG_AlphaFn and AG_ALPHA_{ZERO,ONE} were added in Agar 1.6.0.