gf_alpha_t

Структура спецификации альфа-смешивания

Формат:

#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 (применяется к целевому пикселю). Данные множители берутся из:

Дополнительная информация изложена в главах "Альфа-смешивание слоёв" и "Альфа и хрома" раздела "Работа со слоями, поверхностями и контекстами".

Данная структура содержит по крайней мере следующие поля:

mode
Режим альфа-смешивания, определяющий операции смешивания и сравнения. Список поддерживаемых флагов приведён ниже.
map_x_offset, map_y_offset
Начальное вертикальное и горизонтальное смещение альфа-карты, если таковая используется.
map
Поверхность содержащая альфа-карту, предполагается, что она представлена массивом однобайтных значений. Каждый байт представляет собой альфа множитель со значением от 0 до 255. Формат поверхности должен быть GF_FORMAT_BYTE. Если ни M1, ни M2 не берутся из альфа-карты (то есть ни GF_ALPHA_M1_MAP, ни GF_ALPHA_M2_MAP не установлены в mode), то данное поле игнорируется.
m1
Глобальный множитель M1 используемый, если установлен бит GF_ALPHA_M1_GLOBAL режима.

m2
Глобальный множитель M2 используемый, если установлен бит 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

(As,Rs,Gs,Bs)
Компоненты исходного пикселя.
(Ad,Rd,Gd,Bd)
Компоненты целевого пикселя.
Ms
Множитель для исходных компонентов.
Md
Множитель для целевых компонентов.

Классификация:

Графическая подсистема ЗОСРВ «Нейтрино», Graphics Framework

Тематические ссылки:

gf_context_set_alpha(), gf_layer_set_blending()




Предыдущий раздел: GF API