|
8 | 8 | blending of RGBA32 pixels does not preserve enough precision
|
9 | 9 | */
|
10 | 10 |
|
11 |
| -template<class ColorT, class Order> |
12 |
| -struct fixed_blender_rgba_pre : agg::conv_rgba_pre<ColorT, Order> |
13 |
| -{ |
14 |
| - typedef ColorT color_type; |
15 |
| - typedef Order order_type; |
16 |
| - typedef typename color_type::value_type value_type; |
17 |
| - typedef typename color_type::calc_type calc_type; |
18 |
| - typedef typename color_type::long_type long_type; |
19 |
| - enum base_scale_e |
20 |
| - { |
21 |
| - base_shift = color_type::base_shift, |
22 |
| - base_mask = color_type::base_mask |
23 |
| - }; |
24 |
| - |
25 |
| - //-------------------------------------------------------------------- |
26 |
| - static AGG_INLINE void blend_pix(value_type* p, |
27 |
| - value_type cr, value_type cg, value_type cb, |
28 |
| - value_type alpha, agg::cover_type cover) |
29 |
| - { |
30 |
| - blend_pix(p, |
31 |
| - color_type::mult_cover(cr, cover), |
32 |
| - color_type::mult_cover(cg, cover), |
33 |
| - color_type::mult_cover(cb, cover), |
34 |
| - color_type::mult_cover(alpha, cover)); |
35 |
| - } |
36 |
| - |
37 |
| - //-------------------------------------------------------------------- |
38 |
| - static AGG_INLINE void blend_pix(value_type* p, |
39 |
| - value_type cr, value_type cg, value_type cb, |
40 |
| - value_type alpha) |
41 |
| - { |
42 |
| - alpha = base_mask - alpha; |
43 |
| - p[Order::R] = (value_type)(((p[Order::R] * alpha) >> base_shift) + cr); |
44 |
| - p[Order::G] = (value_type)(((p[Order::G] * alpha) >> base_shift) + cg); |
45 |
| - p[Order::B] = (value_type)(((p[Order::B] * alpha) >> base_shift) + cb); |
46 |
| - p[Order::A] = (value_type)(base_mask - ((alpha * (base_mask - p[Order::A])) >> base_shift)); |
47 |
| - } |
48 |
| -}; |
49 |
| - |
50 |
| - |
51 | 11 | template<class ColorT, class Order>
|
52 | 12 | struct fixed_blender_rgba_plain : agg::conv_rgba_plain<ColorT, Order>
|
53 | 13 | {
|
|
0 commit comments