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 |