Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
244 chris 1
// This file is included by SWTri.cpp and should not be built directly by the project.
2
 
3
        #if defined(TEXTURED)
4
        {
5
                #include "SWTri_GetTexel.cpp"
6
 
7
                if (alpha > 0x08)
8
                {
9
                        #include "SWTri_TexelARGB.cpp"
10
 
11
                        #if defined(GLOBAL_ARGB) || defined (TEX_ALPHA) || defined(MOD_ARGB)
12
                        {
13
                                if (alpha < 0xf0)
14
                                {
15
                                        unsigned int p = *pix;
16
                                        unsigned int da = p >> 24;
17
 
18
                                        unsigned int tr,tg,tb;
19
                                        #if !defined(LINEAR_BLEND)
20
                                        {
21
                                                tr = ((tex&0xFF0000)*alpha)&0xFF000000;
22
                                                tg = ((tex&0x00FF00)*alpha)&0x00FF0000;
23
                                                tb = ((tex&0x0000FF)*alpha)&0x0000FF00;
24
                                        }
25
                                        #else
26
                                        {
27
                                                tr = (tex&0xFF0000)<<8;
28
                                                tg = (tex&0x00FF00)<<8;
29
                                                tb = (tex&0x0000FF)<<8;
30
                                        }
31
                                        #endif
32
 
33
                                        unsigned int dr = (((p&0xFF0000)*da)>>8) & 0xFF0000;
34
                                        unsigned int dg = (((p&0x00FF00)*da)>>8) & 0x00FF00;
35
                                        unsigned int db = (((p&0x0000FF)*da)>>8) & 0x0000FF;
36
 
37
                                        int finalAlpha = 256 - (((256 - alpha)*(256 - da))>>8);
38
                                        tr = ((tr + (256-alpha)*dr)/finalAlpha) & 0xFF0000;
39
                                        tg = ((tg + (256-alpha)*dg)/finalAlpha) & 0x00FF00;
40
                                        tb = ((tb + (256-alpha)*db)/finalAlpha) & 0x0000FF;
41
 
42
                                        *pix = ((finalAlpha-1)<<24) | tr | tg | tb;
43
                                }
44
                                else
45
                                {
46
                                        *pix = tex | 0xFF000000;
47
                                }
48
                        }
49
                        #else
50
                        {
51
                                *pix = tex | 0xFF000000;
52
                        }
53
                        #endif
54
                }
55
        }
56
        #elif defined(MOD_ARGB)
57
        {
58
                if (a > 0xf00000)
59
                {
60
                        *pix = 0xFF000000 | ((r)&0xff0000)|((g>>8)&0xff00)|((b>>16)&0xff);
61
                }
62
                else if (a > 0x080000)
63
                {
64
                        unsigned int p = *pix;
65
                        unsigned int da = p >> 24;
66
 
67
                        int alpha = a>>16;
68
 
69
                        unsigned int tr = ((r)*(alpha))&0xFF000000;
70
                        unsigned int tg = ((g>>8)*(alpha))&0x00FF0000;
71
                        unsigned int tb = ((b>>16)*(alpha))&0x0000FF00;
72
 
73
                        unsigned int dr = (((p&0xFF0000)*da)>>8) & 0xFF0000;
74
                        unsigned int dg = (((p&0x00FF00)*da)>>8) & 0x00FF00;
75
                        unsigned int db = (((p&0x0000FF)*da)>>8) & 0x0000FF;
76
 
77
                        int finalAlpha = 256 - (((256 - alpha)*(256 - da))>>8);
78
                        tr = ((tr + (256-alpha)*dr)/finalAlpha) & 0xFF0000;
79
                        tg = ((tg + (256-alpha)*dg)/finalAlpha) & 0x00FF00;
80
                        tb = ((tb + (256-alpha)*db)/finalAlpha) & 0x0000FF;
81
 
82
                        *pix = ((finalAlpha-1)<<24) | tr | tg | tb;
83
                }
84
                else
85
                        _asm nop;
86
        }
87
        #endif