DragonFly On-Line Manual Pages
al_set_blender(3) al_set_blender(3)
NAME
al_set_blender - Allegro 5 API
SYNOPSIS
#include <allegro5/allegro.h>
void al_set_blender(int op, int src, int dst)
DESCRIPTION
Sets the function to use for blending for the current thread.
Blending means, the source and destination colors are combined in
drawing operations.
Assume the source color (e.g. color of a rectangle to draw, or pixel
of a bitmap to draw) is given as its red/green/blue/alpha components
(if the bitmap has no alpha it always is assumed to be fully opaque, so
255 for 8-bit or 1.0 for floating point): sr, sg, sb, sa. And this
color is drawn to a destination, which already has a color: dr, dg, db,
da.
The conceptional formula used by Allegro to draw any pixel then depends
on the op parameter:
o ALLEGRO_ADD
r = dr * dst + sr * src
g = dg * dst + sg * src
b = db * dst + sb * src
a = da * dst + sa * src
o ALLEGRO_DEST_MINUS_SRC
r = dr * dst - sr * src
g = dg * dst - sg * src
b = db * dst - sb * src
a = da * dst - sa * src
o ALLEGRO_SRC_MINUS_DEST
r = sr * src - dr * dst
g = sg * src - dg * dst
b = sb * src - db * dst
a = sa * src - da * dst
Valid values for src and dst passed to this function are
o ALLEGRO_ZERO
src = 0
dst = 0
o ALLEGRO_ONE
src = 1
dst = 1
o ALLEGRO_ALPHA
src = sa
dst = sa
o ALLEGRO_INVERSE_ALPHA
src = 1 - sa
dst = 1 - sa
Blending examples:
So for example, to restore the default of using premultiplied alpha
blending, you would use (pseudo code)
al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA)
If you are using non-pre-multiplied alpha, you could use
al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA)
Additive blending would be achieved with
al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE)
Copying the source to the destination (including alpha) unmodified
al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO)
SEE ALSO
al_set_separate_blender(3), al_get_blender(3)
Allegro reference manual al_set_blender(3)