move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_blend / op_blend_mask_color_.c
1
2 /* blend mask x color -> dst */
3
4 #ifdef BUILD_C
5 static void
6 _op_blend_mas_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7    DATA32 *e = d + l;
8    l = 256 - (c >> 24);
9    while (d < e) {
10         DATA32 a = *m;
11         switch(a)
12           {
13             case 0:
14                 break;
15             case 255:
16                 *d = c + MUL_256(l, *d);
17                 break;
18             default:
19               {
20                 DATA32 mc = MUL_SYM(a, c);
21                 a = 256 - (mc >> 24);
22                 *d = mc + MUL_256(a, *d);
23               }
24                 break;
25           }
26         m++;  d++;
27      }
28 }
29
30 static void
31 _op_blend_mas_can_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
32    DATA32 *e = d + l;
33    while (d < e) {
34         l = *m;
35         switch(l)
36           {
37             case 0:
38                 break;
39             case 255:
40                 *d = c;
41                 break;
42             default:
43                 l++;
44                 *d = INTERP_256(l, c, *d);
45                 break;
46           }
47         m++;  d++;
48      }
49 }
50
51 #define _op_blend_mas_cn_dp _op_blend_mas_can_dp
52 #define _op_blend_mas_caa_dp _op_blend_mas_c_dp
53
54 #define _op_blend_mas_c_dpan _op_blend_mas_c_dp
55 #define _op_blend_mas_cn_dpan _op_blend_mas_cn_dp
56 #define _op_blend_mas_can_dpan _op_blend_mas_can_dp
57 #define _op_blend_mas_caa_dpan _op_blend_mas_caa_dp
58
59 static void
60 init_blend_mask_color_span_funcs_c(void)
61 {
62    op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_mas_c_dp;
63    op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_mas_cn_dp;
64    op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_mas_can_dp;
65    op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_mas_caa_dp;
66
67    op_blend_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_mas_c_dpan;
68    op_blend_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_mas_cn_dpan;
69    op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_mas_can_dpan;
70    op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_mas_caa_dpan;
71 }
72 #endif
73
74 #ifdef BUILD_C
75 static void
76 _op_blend_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
77         s = MUL_SYM(m, c);
78         m = 256 - (s >> 24);
79         *d = s + MUL_256(m, *d);
80 }
81
82 static void
83 _op_blend_pt_mas_can_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
84         *d = INTERP_256(m + 1, c, *d);
85 }
86
87 #define _op_blend_pt_mas_cn_dp _op_blend_pt_mas_can_dp
88 #define _op_blend_pt_mas_caa_dp _op_blend_pt_mas_c_dp
89
90 #define _op_blend_pt_mas_c_dpan _op_blend_pt_mas_c_dp
91 #define _op_blend_pt_mas_cn_dpan _op_blend_pt_mas_cn_dp
92 #define _op_blend_pt_mas_can_dpan _op_blend_pt_mas_can_dp
93 #define _op_blend_pt_mas_caa_dpan _op_blend_pt_mas_caa_dp
94
95 static void
96 init_blend_mask_color_pt_funcs_c(void)
97 {
98    op_blend_pt_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_pt_mas_c_dp;
99    op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_mas_cn_dp;
100    op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_pt_mas_can_dp;
101    op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_pt_mas_caa_dp;
102
103    op_blend_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_pt_mas_c_dpan;
104    op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_mas_cn_dpan;
105    op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_pt_mas_can_dpan;
106    op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_pt_mas_caa_dpan;
107 }
108 #endif
109
110 /*-----*/
111
112 /* blend_rel mask x color --> dst */
113
114 #ifdef BUILD_C
115 static void
116 _op_blend_rel_mas_c_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
117    DATA32 *e = d + l;
118    while (d < e) {
119         DATA32 mc = MUL_SYM(*m, c);
120         l = 256 - (mc >> 24);
121         *d = MUL_SYM(*d >> 24, mc) + MUL_256(l, *d);
122         d++;
123         m++;
124      }
125 }
126
127 #define _op_blend_rel_mas_cn_dp _op_blend_rel_mas_c_dp
128 #define _op_blend_rel_mas_can_dp _op_blend_rel_mas_c_dp
129 #define _op_blend_rel_mas_caa_dp _op_blend_rel_mas_c_dp
130
131 #define _op_blend_rel_mas_c_dpan _op_blend_mas_c_dpan
132 #define _op_blend_rel_mas_cn_dpan _op_blend_mas_cn_dpan
133 #define _op_blend_rel_mas_can_dpan _op_blend_mas_can_dpan
134 #define _op_blend_rel_mas_caa_dpan _op_blend_mas_caa_dpan
135
136 static void
137 init_blend_rel_mask_color_span_funcs_c(void)
138 {
139    op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_rel_mas_c_dp;
140    op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_mas_can_dp;
141    op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_rel_mas_can_dp;
142    op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_rel_mas_caa_dp;
143
144    op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_rel_mas_c_dpan;
145    op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_mas_cn_dpan;
146    op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_rel_mas_can_dpan;
147    op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_rel_mas_caa_dpan;
148 }
149 #endif
150
151 #ifdef BUILD_C
152 static void
153 _op_blend_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
154         s = MUL_SYM(m, c);
155         c = 256 - (s >> 24);
156         *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
157 }
158
159 #define _op_blend_rel_pt_mas_cn_dp _op_blend_rel_pt_mas_c_dp
160 #define _op_blend_rel_pt_mas_can_dp _op_blend_rel_pt_mas_c_dp
161 #define _op_blend_rel_pt_mas_caa_dp _op_blend_rel_pt_mas_c_dp
162
163 #define _op_blend_rel_pt_mas_c_dpan _op_blend_pt_mas_c_dpan
164 #define _op_blend_rel_pt_mas_cn_dpan _op_blend_pt_mas_cn_dpan
165 #define _op_blend_rel_pt_mas_can_dpan _op_blend_pt_mas_can_dpan
166 #define _op_blend_rel_pt_mas_caa_dpan _op_blend_pt_mas_caa_dpan
167
168 static void
169 init_blend_rel_mask_color_pt_funcs_c(void)
170 {
171    op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_rel_pt_mas_c_dp;
172    op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_mas_cn_dp;
173    op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_rel_pt_mas_can_dp;
174    op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_rel_pt_mas_caa_dp;
175
176    op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_rel_pt_mas_c_dpan;
177    op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_mas_cn_dpan;
178    op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_mas_can_dpan;
179    op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_mas_caa_dpan;
180 }
181 #endif