blob: b9ff9432398a63e7b9fd6f6f0de59fbb705e7362 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
diff -pur DirectFB-1.0.1/src/gfx/generic/generic.c DirectFB-1.0.1-hacked/src/gfx/generic/generic.c
--- DirectFB-1.0.1/src/gfx/generic/generic.c 2007-11-24 20:04:19.000000000 +0100
+++ DirectFB-1.0.1-hacked/src/gfx/generic/generic.c 2007-11-24 19:34:13.000000000 +0100
@@ -6988,12 +6990,27 @@ bool gAcquire( CardState *state, DFBAcce
}
break;
case DFXL_BLIT:
+ /* TODO: other blend functions could benefit, too */
+ if (state->blittingflags == (DSBLIT_BLEND_ALPHACHANNEL|DSBLIT_BLEND_COLORALPHA) &&
+ state->src_blend == DSBF_SRCALPHA &&
+ state->dst_blend == DSBF_INVSRCALPHA)
+ {
+ if (!DFB_PIXELFORMAT_HAS_ALPHA(source->format)) {
+ state->blittingflags &= ~DSBLIT_BLEND_ALPHACHANNEL;
+ }
+ if (state->color.r == 0xff && state->color.g == 0xff && state->color.b == 0xff) {
+ state->blittingflags &= ~DSBLIT_COLORIZE;
+ }
+ }
if (state->blittingflags == DSBLIT_BLEND_ALPHACHANNEL &&
state->src_blend == DSBF_SRCALPHA &&
state->dst_blend == DSBF_INVSRCALPHA)
{
- if (gfxs->src_format == DSPF_ARGB &&
- Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[dst_pfi])
+ if (!DFB_PIXELFORMAT_HAS_ALPHA(source->format)) {
+ state->blittingflags = DSBLIT_NOFX;
+ }
+ else if (gfxs->src_format == DSPF_ARGB &&
+ Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[dst_pfi])
{
*funcs++ = Bop_argb_blend_alphachannel_src_invsrc_Aop_PFI[dst_pfi];
break;
|