Структура спецификации альфа-смешивания
#include <gf/gf.h>typedef struct {uint32_t mode;uint32_t map_x_offset;uint32_t map_y_offset;gf_surface_t map;uint8_t m1;uint8_t m2;uint16_t padding;intptr_t reserved[4];} gf_alpha_t;
Структура gf_alpha_t
описывает операцию альфа-смешивания. Данная структура передаётся в качестве аргумента в функциях gf_context_set_alpha() и gf_layer_set_blending().
В операциях альфа-смешивания обычно используется два множителя: M1 (применяется к исходному пикселю) и M2 (применяется к целевому пикселю). Данные множители берутся из:
Дополнительная информация изложена в главах "Альфа-смешивание слоёв"
и "Альфа и хрома"
раздела "Работа со слоями, поверхностями и контекстами".
Данная структура содержит по крайней мере следующие поля:
0
до 255
. Формат поверхности должен быть GF_FORMAT_BYTE
. Если ни M1, ни M2 не берутся из альфа-карты (то есть ни GF_ALPHA_M1_MAP
, ни GF_ALPHA_M2_MAP
не установлены в mode), то данное поле игнорируется. GF_ALPHA_M1_GLOBAL
режима.
GF_ALPHA_M2_GLOBAL
режима. Данные флаги настраивают операцию альфа-смешивания:
Источник множителя для альфа-смешивания:
Флаг : | Описание |
---|---|
GF_ALPHA_M1_SRC_PIXEL_ALPHA | "M1" берётся из альфа-канала источника. |
GF_ALPHA_M1_GLOBAL | "M1" берётся из глобального M1 |
GF_ALPHA_M1_MAP | "M1" берётся из альфа-карты |
GF_ALPHA_M2_DST_PIXEL_ALPHA | "M2" берётся из альфа-канала целевой поверхности. |
GF_ALPHA_M2_GLOBAL | "M2" берётся из глобального M2 |
GF_ALPHA_M2_MAP | "M2" берётся из альфа-карты |
Возможны некоторые комбинации источников множителей. Если используется комбинация, то множитель будет произведением двух источников. Например, GF_ALPHA_M1_SRC_PIXEL_ALPHA
| GF_ALPHA_M1_GLOBAL
означает, что "M1" будет взят из альфа-канала источника и умножен на глобальный M1. Поддерживаются следующие комбинации:
Множитель альфа-смешивания источника (Ms):
Флаг | Описание | Аналог в OpenGL-ES |
---|---|---|
GF_BLEND_SRC_0 | (0,0,0,0) | GL_ZERO |
GF_BLEND_SRC_M1 | (M1,M1,M1,M1) | GL_SRC_ALPHA |
GF_BLEND_SRC_1mM1 | (1-M1,1-M1,1-M1,1-M1) | GL_ONE_MINUS_SRC_ALPHA |
GF_BLEND_SRC_1mD | (1-M2,1-Rd,1-Gd,1-Bd) | GL_ONE_MINUS_DST_COLOR |
GF_BLEND_SRC_M2 | (M2,M2,M2,M2) | GL_DST_ALPHA |
GF_BLEND_SRC_D | (M2,Rd,Gd,Bd) | GL_DST_COLOR |
GF_BLEND_SRC_1 | (1,1,1,1) | GL_ONE |
GF_BLEND_SRC_1mM2 | (1-M2,1-M2,1-M2,1-M2) | GL_ONE_MINUS_DST_ALPHA |
Множитель альфа-смешивания целевой поверхности (Md):
Флаг | Описание | Аналог в OpenGL-ES |
---|---|---|
GF_BLEND_DST_0 | (0,0,0,0) | GL_ZERO |
GF_BLEND_DST_M1 | (M1,M1,M1,M1) | GL_SRC_ALPHA |
GF_BLEND_DST_1mM1 | (1-M1,1-M1,1-M1,1-M1) | GL_ONE_MINUS_SRC_ALPHA |
GF_BLEND_DST_1mS | (1-M1,1-Rs,1-Gs,1-Bs) | GL_ONE_MINUS_SRC_COLOR |
GF_BLEND_DST_M2 | (M2,M2,M2,M2) | GL_DST_ALPHA |
GF_BLEND_DST_S | (M1,Rs,Gs,Bs) | GL_SRC_COLOR |
GF_BLEND_DST_1 | (1,1,1,1) | GL_ONE |
GF_BLEND_DST_1mM2 | (1-M2,1-M2,1-M2,1-M2) | GL_ONE_MINUS_DST_ALPHA |
Формула альфа-смешивания выглядит следующим образом:
результирующий пиксель = (As,Rs,Gs,Bs) * Ms + (Ad,Rd,Gd,Bd) * Md
Графическая подсистема ЗОСРВ «Нейтрино», Graphics Framework
gf_context_set_alpha(), gf_layer_set_blending()
Предыдущий раздел: GF API