#define PIXEL_ALPHABLEND_SRCALPHA_INVSRCALPHA(src,dest) \
( \
((((src >> 24) * (src >> 24) + (dest >> 24) * (255 - (src >> 24))) >> 8) & 0xff) << 24 | \
((((src >> 16 & 0xff) * (src >> 24) + (dest >> 16 & 0xff) * (255 - (src >> 24))) >> 8) & 0xff) << 16 | \
((((src >> 8 & 0xff) * (src >> 24) + (dest >> 8 & 0xff) * (255 - (src >> 24))) >> 8) & 0xff) << 8 | \
((((src & 0xff) * (src >> 24) + (dest & 0xff) * (255 - (src >> 24))) >> 8) & 0xff) \
)
#define PIXEL_ALPHABLEND_ALPHA_INVALPHA(src,dest,alpha) \
( \
((((src >> 24) * (alpha) + (dest >> 24) * (255 - alpha)) >> 8) & 0xff) << 24 | \
((((src >> 16 & 0xff) * (alpha) + (dest >> 16 & 0xff) * (255 - alpha)) >> 8) & 0xff) << 16 | \
((((src >> 8 & 0xff) * (alpha) + (dest >> 8 & 0xff) * (255 - alpha)) >> 8) & 0xff) << 8 | \
((((src & 0xff) * (alpha) + (dest & 0xff) * (255 - alpha)) >> 8) & 0xff) \
)
#define PIXEL_ALPHABLEND_SRCAa_INVSRCAa(src,dest,alpha) \
( \
((((src >> 24) * ((src >> 24) * alpha >> 8) + (dest >> 24) * (255 - (((src >> 24) * alpha) >> 8))) >> 8) & 0xff) << 24 | \
((((src >> 16 & 0xff) * ((src >> 24) * alpha >> 8) + (dest >> 16 & 0xff) * (255 - (((src >> 24) * alpha) >> 8))) >> 8) & 0xff) << 16 | \
((((src >> 8 & 0xff) * ((src >> 24) * alpha >> 8) + (dest >> 8 & 0xff) * (255 - (((src >> 24) * alpha) >> 8))) >> 8) & 0xff) << 8 | \
((((src & 0xff) * ((src >> 24) * alpha >> 8) + (dest & 0xff) * (255 - (((src >> 24) * alpha) >> 8))) >> 8) & 0xff) \
)
бленд-функции: какими они бывают?..
Код:
Первый вопросов не вызывает. А вот последние два... Кто знает, что ето я такое написал?
Они фунциклируют так:
Код:
SRC_[A,R,G,B] * (alpha) + DEST_[A,R,G,B] * (ONE - alpha)
SRC_[A,R,G,B] * (SRC_ALPHA * alpha) + DEST_[A,R,G,B] * (ONE - SRC_ALPHA * alpha)
SRC_[A,R,G,B] * (SRC_ALPHA * alpha) + DEST_[A,R,G,B] * (ONE - SRC_ALPHA * alpha)
[SIZE="1"][COLOR="#696969"]Последний ето фактически тоже что и [FONT="Courier New"]PIXEL_ALPHABLEND_SRCALPHA_INVSRCALPHA[/FONT] но альфаканал сурса кагбе блендитца отдельно и только после етого принимает участие в общем расщете. Задумывался он для блендинга пикселов с альфой (с png'шки например) на сурфейс но с возможностью задания глобальной прозрачности всего пикчера.[/COLOR][/SIZE]
Проблема - присудствие в етих макросах дополнительной компоненты [FONT="Courier New"]alpha[/FONT].
Почему проблема:
Допустим я имею в распоряжении канвас к которому можно применять различные атрибуты отрисовки (клипинг, атрибуты вывода текста, атрибуты блендинга...). К етому канвасу применима процедура типа [FONT="Courier New"]blt[/FONT], но продвинутая процедура. Такая что в зависимости от атрибутов канваса соответствующим образом обрабатывает копируемые блоки пикселов. Так, если я напишу [FONT="Courier New"]канвас->установить_бф(PIXEL_ALPHABLEND_SRCALPHA_INVSRCALPHA)[/FONT], то всё гуд. Но если ето будет [FONT="Courier New"]PIXEL_ALPHABLEND_SRCAa_INVSRCAa[/FONT], то откуда процедуре блитинга брать значение дополнительной альфы? делать что-то наподобии [FONT="Courier New"]канвас->установить_дополнительное_значение_фльфаканала(xxx);[/FONT] жутко нехочется.
Может я как-то криво продумал архитектуру?