diff options
author | David Walter Seikel | 2012-01-04 18:41:13 +1000 |
---|---|---|
committer | David Walter Seikel | 2012-01-04 18:41:13 +1000 |
commit | dd7595a3475407a7fa96a97393bae8c5220e8762 (patch) | |
tree | e341e911d7eb911a51684a7412ef7f7c7605d28e /libraries/evas/src/lib/engines/common_16 | |
parent | Add the skeleton. (diff) | |
download | SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.zip SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.gz SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.bz2 SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.xz |
Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje.
Note that embryo wont be used, but I'm not sure yet if you can build edje without it.
Diffstat (limited to 'libraries/evas/src/lib/engines/common_16')
13 files changed, 4054 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common_16/Makefile.am b/libraries/evas/src/lib/engines/common_16/Makefile.am new file mode 100644 index 0000000..ef2ab30 --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/Makefile.am | |||
@@ -0,0 +1,32 @@ | |||
1 | |||
2 | MAINTAINERCLEANFILES = Makefile.in | ||
3 | |||
4 | AM_CPPFLAGS = \ | ||
5 | -I. \ | ||
6 | -I$(top_srcdir)/src/lib \ | ||
7 | -I$(top_srcdir)/src/lib/include \ | ||
8 | @FREETYPE_CFLAGS@ \ | ||
9 | @PIXMAN_CFLAGS@ \ | ||
10 | @VALGRIND_CFLAGS@ \ | ||
11 | @EINA_CFLAGS@ \ | ||
12 | @EET_CFLAGS@ \ | ||
13 | @pthread_cflags@ | ||
14 | |||
15 | noinst_LTLIBRARIES = libevas_engine_common_16.la | ||
16 | |||
17 | libevas_engine_common_16_la_SOURCES = \ | ||
18 | evas_soft16_dither_mask.c \ | ||
19 | evas_soft16_font.c \ | ||
20 | evas_soft16_image_scaled_sampled.c \ | ||
21 | evas_soft16_image_unscaled.c \ | ||
22 | evas_soft16_main.c \ | ||
23 | evas_soft16_rectangle.c \ | ||
24 | evas_soft16_line.c \ | ||
25 | evas_soft16_polygon.c | ||
26 | |||
27 | libevas_engine_common_16_la_DEPENDENCIES = $(top_builddir)/config.h | ||
28 | |||
29 | EXTRA_DIST = \ | ||
30 | evas_soft16_point_blend.c \ | ||
31 | evas_soft16_scanline_blend.c \ | ||
32 | evas_soft16_scanline_fill.c | ||
diff --git a/libraries/evas/src/lib/engines/common_16/Makefile.in b/libraries/evas/src/lib/engines/common_16/Makefile.in new file mode 100644 index 0000000..9097a8d --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/Makefile.in | |||
@@ -0,0 +1,698 @@ | |||
1 | # Makefile.in generated by automake 1.11.1 from Makefile.am. | ||
2 | # @configure_input@ | ||
3 | |||
4 | # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, | ||
5 | # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, | ||
6 | # Inc. | ||
7 | # This Makefile.in is free software; the Free Software Foundation | ||
8 | # gives unlimited permission to copy and/or distribute it, | ||
9 | # with or without modifications, as long as this notice is preserved. | ||
10 | |||
11 | # This program is distributed in the hope that it will be useful, | ||
12 | # but WITHOUT ANY WARRANTY, to the extent permitted by law; without | ||
13 | # even the implied warranty of MERCHANTABILITY or FITNESS FOR A | ||
14 | # PARTICULAR PURPOSE. | ||
15 | |||
16 | @SET_MAKE@ | ||
17 | |||
18 | VPATH = @srcdir@ | ||
19 | pkgdatadir = $(datadir)/@PACKAGE@ | ||
20 | pkgincludedir = $(includedir)/@PACKAGE@ | ||
21 | pkglibdir = $(libdir)/@PACKAGE@ | ||
22 | pkglibexecdir = $(libexecdir)/@PACKAGE@ | ||
23 | am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | ||
24 | install_sh_DATA = $(install_sh) -c -m 644 | ||
25 | install_sh_PROGRAM = $(install_sh) -c | ||
26 | install_sh_SCRIPT = $(install_sh) -c | ||
27 | INSTALL_HEADER = $(INSTALL_DATA) | ||
28 | transform = $(program_transform_name) | ||
29 | NORMAL_INSTALL = : | ||
30 | PRE_INSTALL = : | ||
31 | POST_INSTALL = : | ||
32 | NORMAL_UNINSTALL = : | ||
33 | PRE_UNINSTALL = : | ||
34 | POST_UNINSTALL = : | ||
35 | build_triplet = @build@ | ||
36 | host_triplet = @host@ | ||
37 | subdir = src/lib/engines/common_16 | ||
38 | DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | ||
39 | ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | ||
40 | am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ | ||
41 | $(top_srcdir)/m4/efl_coverage.m4 \ | ||
42 | $(top_srcdir)/m4/efl_doxygen.m4 \ | ||
43 | $(top_srcdir)/m4/efl_fnmatch.m4 \ | ||
44 | $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ | ||
45 | $(top_srcdir)/m4/evas_check_engine.m4 \ | ||
46 | $(top_srcdir)/m4/evas_check_loader.m4 \ | ||
47 | $(top_srcdir)/m4/evas_converter.m4 \ | ||
48 | $(top_srcdir)/m4/evas_dither.m4 \ | ||
49 | $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \ | ||
50 | $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | ||
51 | $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | ||
52 | $(top_srcdir)/configure.ac | ||
53 | am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | ||
54 | $(ACLOCAL_M4) | ||
55 | mkinstalldirs = $(install_sh) -d | ||
56 | CONFIG_HEADER = $(top_builddir)/config.h | ||
57 | CONFIG_CLEAN_FILES = | ||
58 | CONFIG_CLEAN_VPATH_FILES = | ||
59 | LTLIBRARIES = $(noinst_LTLIBRARIES) | ||
60 | libevas_engine_common_16_la_LIBADD = | ||
61 | am_libevas_engine_common_16_la_OBJECTS = evas_soft16_dither_mask.lo \ | ||
62 | evas_soft16_font.lo evas_soft16_image_scaled_sampled.lo \ | ||
63 | evas_soft16_image_unscaled.lo evas_soft16_main.lo \ | ||
64 | evas_soft16_rectangle.lo evas_soft16_line.lo \ | ||
65 | evas_soft16_polygon.lo | ||
66 | libevas_engine_common_16_la_OBJECTS = \ | ||
67 | $(am_libevas_engine_common_16_la_OBJECTS) | ||
68 | AM_V_lt = $(am__v_lt_$(V)) | ||
69 | am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) | ||
70 | am__v_lt_0 = --silent | ||
71 | DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) | ||
72 | depcomp = $(SHELL) $(top_srcdir)/depcomp | ||
73 | am__depfiles_maybe = depfiles | ||
74 | am__mv = mv -f | ||
75 | COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ | ||
76 | $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | ||
77 | LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||
78 | $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ | ||
79 | $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ | ||
80 | $(AM_CFLAGS) $(CFLAGS) | ||
81 | AM_V_CC = $(am__v_CC_$(V)) | ||
82 | am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) | ||
83 | am__v_CC_0 = @echo " CC " $@; | ||
84 | AM_V_at = $(am__v_at_$(V)) | ||
85 | am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) | ||
86 | am__v_at_0 = @ | ||
87 | CCLD = $(CC) | ||
88 | LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ | ||
89 | $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ | ||
90 | $(AM_LDFLAGS) $(LDFLAGS) -o $@ | ||
91 | AM_V_CCLD = $(am__v_CCLD_$(V)) | ||
92 | am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) | ||
93 | am__v_CCLD_0 = @echo " CCLD " $@; | ||
94 | AM_V_GEN = $(am__v_GEN_$(V)) | ||
95 | am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) | ||
96 | am__v_GEN_0 = @echo " GEN " $@; | ||
97 | SOURCES = $(libevas_engine_common_16_la_SOURCES) | ||
98 | DIST_SOURCES = $(libevas_engine_common_16_la_SOURCES) | ||
99 | ETAGS = etags | ||
100 | CTAGS = ctags | ||
101 | DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | ||
102 | ACLOCAL = @ACLOCAL@ | ||
103 | ALLOCA = @ALLOCA@ | ||
104 | AMTAR = @AMTAR@ | ||
105 | AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ | ||
106 | AR = @AR@ | ||
107 | AS = @AS@ | ||
108 | AUTOCONF = @AUTOCONF@ | ||
109 | AUTOHEADER = @AUTOHEADER@ | ||
110 | AUTOMAKE = @AUTOMAKE@ | ||
111 | AWK = @AWK@ | ||
112 | CC = @CC@ | ||
113 | CCDEPMODE = @CCDEPMODE@ | ||
114 | CFLAGS = @CFLAGS@ | ||
115 | CHECK_CFLAGS = @CHECK_CFLAGS@ | ||
116 | CHECK_LIBS = @CHECK_LIBS@ | ||
117 | CPP = @CPP@ | ||
118 | CPPFLAGS = @CPPFLAGS@ | ||
119 | CXX = @CXX@ | ||
120 | CXXCPP = @CXXCPP@ | ||
121 | CXXDEPMODE = @CXXDEPMODE@ | ||
122 | CXXFLAGS = @CXXFLAGS@ | ||
123 | CYGPATH_W = @CYGPATH_W@ | ||
124 | DEFS = @DEFS@ | ||
125 | DEPDIR = @DEPDIR@ | ||
126 | DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ | ||
127 | DIRECTFB_LIBS = @DIRECTFB_LIBS@ | ||
128 | DLLTOOL = @DLLTOOL@ | ||
129 | DSYMUTIL = @DSYMUTIL@ | ||
130 | DUMPBIN = @DUMPBIN@ | ||
131 | ECHO_C = @ECHO_C@ | ||
132 | ECHO_N = @ECHO_N@ | ||
133 | ECHO_T = @ECHO_T@ | ||
134 | ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ | ||
135 | ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ | ||
136 | EDB_CFLAGS = @EDB_CFLAGS@ | ||
137 | EDB_LIBS = @EDB_LIBS@ | ||
138 | EDJE_CFLAGS = @EDJE_CFLAGS@ | ||
139 | EDJE_LIBS = @EDJE_LIBS@ | ||
140 | EET_CFLAGS = @EET_CFLAGS@ | ||
141 | EET_LIBS = @EET_LIBS@ | ||
142 | EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ | ||
143 | EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ | ||
144 | EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ | ||
145 | EGREP = @EGREP@ | ||
146 | EINA_CFLAGS = @EINA_CFLAGS@ | ||
147 | EINA_LIBS = @EINA_LIBS@ | ||
148 | EVAS_CFLAGS = @EVAS_CFLAGS@ | ||
149 | EVAS_LIBS = @EVAS_LIBS@ | ||
150 | EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@ | ||
151 | EVIL_CFLAGS = @EVIL_CFLAGS@ | ||
152 | EVIL_LIBS = @EVIL_LIBS@ | ||
153 | EXEEXT = @EXEEXT@ | ||
154 | FGREP = @FGREP@ | ||
155 | FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ | ||
156 | FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ | ||
157 | FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ | ||
158 | FREETYPE_LIBS = @FREETYPE_LIBS@ | ||
159 | FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@ | ||
160 | FRIBIDI_LIBS = @FRIBIDI_LIBS@ | ||
161 | GL_EET_CFLAGS = @GL_EET_CFLAGS@ | ||
162 | GL_EET_LIBS = @GL_EET_LIBS@ | ||
163 | GREP = @GREP@ | ||
164 | HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ | ||
165 | HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ | ||
166 | INSTALL = @INSTALL@ | ||
167 | INSTALL_DATA = @INSTALL_DATA@ | ||
168 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ | ||
169 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ | ||
170 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | ||
171 | LD = @LD@ | ||
172 | LDFLAGS = @LDFLAGS@ | ||
173 | LIBOBJS = @LIBOBJS@ | ||
174 | LIBS = @LIBS@ | ||
175 | LIBTOOL = @LIBTOOL@ | ||
176 | LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@ | ||
177 | LINEBREAK_LIBS = @LINEBREAK_LIBS@ | ||
178 | LIPO = @LIPO@ | ||
179 | LN_S = @LN_S@ | ||
180 | LTLIBOBJS = @LTLIBOBJS@ | ||
181 | MAKEINFO = @MAKEINFO@ | ||
182 | MKDIR_P = @MKDIR_P@ | ||
183 | MODULE_ARCH = @MODULE_ARCH@ | ||
184 | NM = @NM@ | ||
185 | NMEDIT = @NMEDIT@ | ||
186 | OBJC = @OBJC@ | ||
187 | OBJCDEPMODE = @OBJCDEPMODE@ | ||
188 | OBJCFLAGS = @OBJCFLAGS@ | ||
189 | OBJDUMP = @OBJDUMP@ | ||
190 | OBJEXT = @OBJEXT@ | ||
191 | OTOOL = @OTOOL@ | ||
192 | OTOOL64 = @OTOOL64@ | ||
193 | PACKAGE = @PACKAGE@ | ||
194 | PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ | ||
195 | PACKAGE_NAME = @PACKAGE_NAME@ | ||
196 | PACKAGE_STRING = @PACKAGE_STRING@ | ||
197 | PACKAGE_TARNAME = @PACKAGE_TARNAME@ | ||
198 | PACKAGE_URL = @PACKAGE_URL@ | ||
199 | PACKAGE_VERSION = @PACKAGE_VERSION@ | ||
200 | PATH_SEPARATOR = @PATH_SEPARATOR@ | ||
201 | PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ | ||
202 | PIXMAN_LIBS = @PIXMAN_LIBS@ | ||
203 | PKG_CONFIG = @PKG_CONFIG@ | ||
204 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ | ||
205 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ | ||
206 | PNG_CFLAGS = @PNG_CFLAGS@ | ||
207 | PNG_LIBS = @PNG_LIBS@ | ||
208 | RANLIB = @RANLIB@ | ||
209 | SDL_CFLAGS = @SDL_CFLAGS@ | ||
210 | SDL_LIBS = @SDL_LIBS@ | ||
211 | SED = @SED@ | ||
212 | SET_MAKE = @SET_MAKE@ | ||
213 | SHELL = @SHELL@ | ||
214 | SHM_OPEN_LINK = @SHM_OPEN_LINK@ | ||
215 | STRIP = @STRIP@ | ||
216 | SVG_CFLAGS = @SVG_CFLAGS@ | ||
217 | SVG_LIBS = @SVG_LIBS@ | ||
218 | VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ | ||
219 | VALGRIND_LIBS = @VALGRIND_LIBS@ | ||
220 | VERSION = @VERSION@ | ||
221 | VMAJ = @VMAJ@ | ||
222 | WIN32_CFLAGS = @WIN32_CFLAGS@ | ||
223 | WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ | ||
224 | XCB_CFLAGS = @XCB_CFLAGS@ | ||
225 | XCB_GL_CFLAGS = @XCB_GL_CFLAGS@ | ||
226 | XCB_GL_LIBS = @XCB_GL_LIBS@ | ||
227 | XCB_LIBS = @XCB_LIBS@ | ||
228 | XEXT_CFLAGS = @XEXT_CFLAGS@ | ||
229 | XEXT_LIBS = @XEXT_LIBS@ | ||
230 | XMKMF = @XMKMF@ | ||
231 | X_CFLAGS = @X_CFLAGS@ | ||
232 | X_EXTRA_LIBS = @X_EXTRA_LIBS@ | ||
233 | X_LIBS = @X_LIBS@ | ||
234 | X_PRE_LIBS = @X_PRE_LIBS@ | ||
235 | abs_builddir = @abs_builddir@ | ||
236 | abs_srcdir = @abs_srcdir@ | ||
237 | abs_top_builddir = @abs_top_builddir@ | ||
238 | abs_top_srcdir = @abs_top_srcdir@ | ||
239 | ac_ct_CC = @ac_ct_CC@ | ||
240 | ac_ct_CXX = @ac_ct_CXX@ | ||
241 | ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ | ||
242 | ac_ct_OBJC = @ac_ct_OBJC@ | ||
243 | altivec_cflags = @altivec_cflags@ | ||
244 | am__include = @am__include@ | ||
245 | am__leading_dot = @am__leading_dot@ | ||
246 | am__quote = @am__quote@ | ||
247 | am__tar = @am__tar@ | ||
248 | am__untar = @am__untar@ | ||
249 | bindir = @bindir@ | ||
250 | build = @build@ | ||
251 | build_alias = @build_alias@ | ||
252 | build_cpu = @build_cpu@ | ||
253 | build_os = @build_os@ | ||
254 | build_vendor = @build_vendor@ | ||
255 | builddir = @builddir@ | ||
256 | datadir = @datadir@ | ||
257 | datarootdir = @datarootdir@ | ||
258 | dlopen_libs = @dlopen_libs@ | ||
259 | docdir = @docdir@ | ||
260 | dvidir = @dvidir@ | ||
261 | edje_cc = @edje_cc@ | ||
262 | efl_doxygen = @efl_doxygen@ | ||
263 | efl_have_doxygen = @efl_have_doxygen@ | ||
264 | evas_engine_buffer_cflags = @evas_engine_buffer_cflags@ | ||
265 | evas_engine_buffer_libs = @evas_engine_buffer_libs@ | ||
266 | evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@ | ||
267 | evas_engine_direct3d_libs = @evas_engine_direct3d_libs@ | ||
268 | evas_engine_directfb_cflags = @evas_engine_directfb_cflags@ | ||
269 | evas_engine_directfb_libs = @evas_engine_directfb_libs@ | ||
270 | evas_engine_fb_cflags = @evas_engine_fb_cflags@ | ||
271 | evas_engine_fb_libs = @evas_engine_fb_libs@ | ||
272 | evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@ | ||
273 | evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@ | ||
274 | evas_engine_gl_common_libs = @evas_engine_gl_common_libs@ | ||
275 | evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@ | ||
276 | evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@ | ||
277 | evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@ | ||
278 | evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@ | ||
279 | evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@ | ||
280 | evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@ | ||
281 | evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@ | ||
282 | evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@ | ||
283 | evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@ | ||
284 | evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@ | ||
285 | evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@ | ||
286 | evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@ | ||
287 | evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@ | ||
288 | evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@ | ||
289 | evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@ | ||
290 | evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@ | ||
291 | evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@ | ||
292 | evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@ | ||
293 | evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@ | ||
294 | evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@ | ||
295 | evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@ | ||
296 | evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@ | ||
297 | evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@ | ||
298 | evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@ | ||
299 | evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ | ||
300 | evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ | ||
301 | evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ | ||
302 | evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ | ||
303 | evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ | ||
304 | evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ | ||
305 | evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ | ||
306 | evas_image_loader_edb_libs = @evas_image_loader_edb_libs@ | ||
307 | evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@ | ||
308 | evas_image_loader_eet_libs = @evas_image_loader_eet_libs@ | ||
309 | evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@ | ||
310 | evas_image_loader_generic_libs = @evas_image_loader_generic_libs@ | ||
311 | evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@ | ||
312 | evas_image_loader_gif_libs = @evas_image_loader_gif_libs@ | ||
313 | evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@ | ||
314 | evas_image_loader_ico_libs = @evas_image_loader_ico_libs@ | ||
315 | evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@ | ||
316 | evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@ | ||
317 | evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@ | ||
318 | evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@ | ||
319 | evas_image_loader_png_cflags = @evas_image_loader_png_cflags@ | ||
320 | evas_image_loader_png_libs = @evas_image_loader_png_libs@ | ||
321 | evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@ | ||
322 | evas_image_loader_psd_libs = @evas_image_loader_psd_libs@ | ||
323 | evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@ | ||
324 | evas_image_loader_svg_libs = @evas_image_loader_svg_libs@ | ||
325 | evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@ | ||
326 | evas_image_loader_tga_libs = @evas_image_loader_tga_libs@ | ||
327 | evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@ | ||
328 | evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@ | ||
329 | evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@ | ||
330 | evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@ | ||
331 | evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@ | ||
332 | evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@ | ||
333 | exec_prefix = @exec_prefix@ | ||
334 | have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@ | ||
335 | have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@ | ||
336 | have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@ | ||
337 | have_evas_engine_software_x11 = @have_evas_engine_software_x11@ | ||
338 | have_evas_engine_software_xcb = @have_evas_engine_software_xcb@ | ||
339 | have_evas_engine_software_xlib = @have_evas_engine_software_xlib@ | ||
340 | have_lcov = @have_lcov@ | ||
341 | host = @host@ | ||
342 | host_alias = @host_alias@ | ||
343 | host_cpu = @host_cpu@ | ||
344 | host_os = @host_os@ | ||
345 | host_vendor = @host_vendor@ | ||
346 | htmldir = @htmldir@ | ||
347 | includedir = @includedir@ | ||
348 | infodir = @infodir@ | ||
349 | install_sh = @install_sh@ | ||
350 | libdir = @libdir@ | ||
351 | libexecdir = @libexecdir@ | ||
352 | localedir = @localedir@ | ||
353 | localstatedir = @localstatedir@ | ||
354 | lt_ECHO = @lt_ECHO@ | ||
355 | lt_enable_auto_import = @lt_enable_auto_import@ | ||
356 | mandir = @mandir@ | ||
357 | mkdir_p = @mkdir_p@ | ||
358 | oldincludedir = @oldincludedir@ | ||
359 | pdfdir = @pdfdir@ | ||
360 | pkgconfig_requires_private = @pkgconfig_requires_private@ | ||
361 | prefix = @prefix@ | ||
362 | program_transform_name = @program_transform_name@ | ||
363 | psdir = @psdir@ | ||
364 | pthread_cflags = @pthread_cflags@ | ||
365 | pthread_libs = @pthread_libs@ | ||
366 | release_info = @release_info@ | ||
367 | requirement_evas = @requirement_evas@ | ||
368 | sbindir = @sbindir@ | ||
369 | sharedstatedir = @sharedstatedir@ | ||
370 | srcdir = @srcdir@ | ||
371 | sysconfdir = @sysconfdir@ | ||
372 | target_alias = @target_alias@ | ||
373 | top_build_prefix = @top_build_prefix@ | ||
374 | top_builddir = @top_builddir@ | ||
375 | top_srcdir = @top_srcdir@ | ||
376 | version_info = @version_info@ | ||
377 | MAINTAINERCLEANFILES = Makefile.in | ||
378 | AM_CPPFLAGS = \ | ||
379 | -I. \ | ||
380 | -I$(top_srcdir)/src/lib \ | ||
381 | -I$(top_srcdir)/src/lib/include \ | ||
382 | @FREETYPE_CFLAGS@ \ | ||
383 | @PIXMAN_CFLAGS@ \ | ||
384 | @VALGRIND_CFLAGS@ \ | ||
385 | @EINA_CFLAGS@ \ | ||
386 | @EET_CFLAGS@ \ | ||
387 | @pthread_cflags@ | ||
388 | |||
389 | noinst_LTLIBRARIES = libevas_engine_common_16.la | ||
390 | libevas_engine_common_16_la_SOURCES = \ | ||
391 | evas_soft16_dither_mask.c \ | ||
392 | evas_soft16_font.c \ | ||
393 | evas_soft16_image_scaled_sampled.c \ | ||
394 | evas_soft16_image_unscaled.c \ | ||
395 | evas_soft16_main.c \ | ||
396 | evas_soft16_rectangle.c \ | ||
397 | evas_soft16_line.c \ | ||
398 | evas_soft16_polygon.c | ||
399 | |||
400 | libevas_engine_common_16_la_DEPENDENCIES = $(top_builddir)/config.h | ||
401 | EXTRA_DIST = \ | ||
402 | evas_soft16_point_blend.c \ | ||
403 | evas_soft16_scanline_blend.c \ | ||
404 | evas_soft16_scanline_fill.c | ||
405 | |||
406 | all: all-am | ||
407 | |||
408 | .SUFFIXES: | ||
409 | .SUFFIXES: .c .lo .o .obj | ||
410 | $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | ||
411 | @for dep in $?; do \ | ||
412 | case '$(am__configure_deps)' in \ | ||
413 | *$$dep*) \ | ||
414 | ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ | ||
415 | && { if test -f $@; then exit 0; else break; fi; }; \ | ||
416 | exit 1;; \ | ||
417 | esac; \ | ||
418 | done; \ | ||
419 | echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/engines/common_16/Makefile'; \ | ||
420 | $(am__cd) $(top_srcdir) && \ | ||
421 | $(AUTOMAKE) --gnu src/lib/engines/common_16/Makefile | ||
422 | .PRECIOUS: Makefile | ||
423 | Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | ||
424 | @case '$?' in \ | ||
425 | *config.status*) \ | ||
426 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ | ||
427 | *) \ | ||
428 | echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ | ||
429 | cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ | ||
430 | esac; | ||
431 | |||
432 | $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | ||
433 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||
434 | |||
435 | $(top_srcdir)/configure: $(am__configure_deps) | ||
436 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||
437 | $(ACLOCAL_M4): $(am__aclocal_m4_deps) | ||
438 | cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | ||
439 | $(am__aclocal_m4_deps): | ||
440 | |||
441 | clean-noinstLTLIBRARIES: | ||
442 | -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) | ||
443 | @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ | ||
444 | dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ | ||
445 | test "$$dir" != "$$p" || dir=.; \ | ||
446 | echo "rm -f \"$${dir}/so_locations\""; \ | ||
447 | rm -f "$${dir}/so_locations"; \ | ||
448 | done | ||
449 | libevas_engine_common_16.la: $(libevas_engine_common_16_la_OBJECTS) $(libevas_engine_common_16_la_DEPENDENCIES) | ||
450 | $(AM_V_CCLD)$(LINK) $(libevas_engine_common_16_la_OBJECTS) $(libevas_engine_common_16_la_LIBADD) $(LIBS) | ||
451 | |||
452 | mostlyclean-compile: | ||
453 | -rm -f *.$(OBJEXT) | ||
454 | |||
455 | distclean-compile: | ||
456 | -rm -f *.tab.c | ||
457 | |||
458 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_dither_mask.Plo@am__quote@ | ||
459 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_font.Plo@am__quote@ | ||
460 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_image_scaled_sampled.Plo@am__quote@ | ||
461 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_image_unscaled.Plo@am__quote@ | ||
462 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_line.Plo@am__quote@ | ||
463 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_main.Plo@am__quote@ | ||
464 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_polygon.Plo@am__quote@ | ||
465 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_soft16_rectangle.Plo@am__quote@ | ||
466 | |||
467 | .c.o: | ||
468 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | ||
469 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | ||
470 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | ||
471 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | ||
472 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||
473 | @am__fastdepCC_FALSE@ $(COMPILE) -c $< | ||
474 | |||
475 | .c.obj: | ||
476 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` | ||
477 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po | ||
478 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | ||
479 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | ||
480 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||
481 | @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` | ||
482 | |||
483 | .c.lo: | ||
484 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< | ||
485 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo | ||
486 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | ||
487 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ | ||
488 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | ||
489 | @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< | ||
490 | |||
491 | mostlyclean-libtool: | ||
492 | -rm -f *.lo | ||
493 | |||
494 | clean-libtool: | ||
495 | -rm -rf .libs _libs | ||
496 | |||
497 | ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | ||
498 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||
499 | unique=`for i in $$list; do \ | ||
500 | if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||
501 | done | \ | ||
502 | $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||
503 | END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||
504 | mkid -fID $$unique | ||
505 | tags: TAGS | ||
506 | |||
507 | TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ | ||
508 | $(TAGS_FILES) $(LISP) | ||
509 | set x; \ | ||
510 | here=`pwd`; \ | ||
511 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||
512 | unique=`for i in $$list; do \ | ||
513 | if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||
514 | done | \ | ||
515 | $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||
516 | END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||
517 | shift; \ | ||
518 | if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ | ||
519 | test -n "$$unique" || unique=$$empty_fix; \ | ||
520 | if test $$# -gt 0; then \ | ||
521 | $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | ||
522 | "$$@" $$unique; \ | ||
523 | else \ | ||
524 | $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | ||
525 | $$unique; \ | ||
526 | fi; \ | ||
527 | fi | ||
528 | ctags: CTAGS | ||
529 | CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ | ||
530 | $(TAGS_FILES) $(LISP) | ||
531 | list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | ||
532 | unique=`for i in $$list; do \ | ||
533 | if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | ||
534 | done | \ | ||
535 | $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ | ||
536 | END { if (nonempty) { for (i in files) print i; }; }'`; \ | ||
537 | test -z "$(CTAGS_ARGS)$$unique" \ | ||
538 | || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | ||
539 | $$unique | ||
540 | |||
541 | GTAGS: | ||
542 | here=`$(am__cd) $(top_builddir) && pwd` \ | ||
543 | && $(am__cd) $(top_srcdir) \ | ||
544 | && gtags -i $(GTAGS_ARGS) "$$here" | ||
545 | |||
546 | distclean-tags: | ||
547 | -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | ||
548 | |||
549 | distdir: $(DISTFILES) | ||
550 | @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | ||
551 | topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ | ||
552 | list='$(DISTFILES)'; \ | ||
553 | dist_files=`for file in $$list; do echo $$file; done | \ | ||
554 | sed -e "s|^$$srcdirstrip/||;t" \ | ||
555 | -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ | ||
556 | case $$dist_files in \ | ||
557 | */*) $(MKDIR_P) `echo "$$dist_files" | \ | ||
558 | sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ | ||
559 | sort -u` ;; \ | ||
560 | esac; \ | ||
561 | for file in $$dist_files; do \ | ||
562 | if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | ||
563 | if test -d $$d/$$file; then \ | ||
564 | dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ | ||
565 | if test -d "$(distdir)/$$file"; then \ | ||
566 | find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | ||
567 | fi; \ | ||
568 | if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | ||
569 | cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ | ||
570 | find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ | ||
571 | fi; \ | ||
572 | cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ | ||
573 | else \ | ||
574 | test -f "$(distdir)/$$file" \ | ||
575 | || cp -p $$d/$$file "$(distdir)/$$file" \ | ||
576 | || exit 1; \ | ||
577 | fi; \ | ||
578 | done | ||
579 | check-am: all-am | ||
580 | check: check-am | ||
581 | all-am: Makefile $(LTLIBRARIES) | ||
582 | installdirs: | ||
583 | install: install-am | ||
584 | install-exec: install-exec-am | ||
585 | install-data: install-data-am | ||
586 | uninstall: uninstall-am | ||
587 | |||
588 | install-am: all-am | ||
589 | @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am | ||
590 | |||
591 | installcheck: installcheck-am | ||
592 | install-strip: | ||
593 | $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | ||
594 | install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | ||
595 | `test -z '$(STRIP)' || \ | ||
596 | echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install | ||
597 | mostlyclean-generic: | ||
598 | |||
599 | clean-generic: | ||
600 | |||
601 | distclean-generic: | ||
602 | -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) | ||
603 | -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) | ||
604 | |||
605 | maintainer-clean-generic: | ||
606 | @echo "This command is intended for maintainers to use" | ||
607 | @echo "it deletes files that may require special tools to rebuild." | ||
608 | -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) | ||
609 | clean: clean-am | ||
610 | |||
611 | clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ | ||
612 | mostlyclean-am | ||
613 | |||
614 | distclean: distclean-am | ||
615 | -rm -rf ./$(DEPDIR) | ||
616 | -rm -f Makefile | ||
617 | distclean-am: clean-am distclean-compile distclean-generic \ | ||
618 | distclean-tags | ||
619 | |||
620 | dvi: dvi-am | ||
621 | |||
622 | dvi-am: | ||
623 | |||
624 | html: html-am | ||
625 | |||
626 | html-am: | ||
627 | |||
628 | info: info-am | ||
629 | |||
630 | info-am: | ||
631 | |||
632 | install-data-am: | ||
633 | |||
634 | install-dvi: install-dvi-am | ||
635 | |||
636 | install-dvi-am: | ||
637 | |||
638 | install-exec-am: | ||
639 | |||
640 | install-html: install-html-am | ||
641 | |||
642 | install-html-am: | ||
643 | |||
644 | install-info: install-info-am | ||
645 | |||
646 | install-info-am: | ||
647 | |||
648 | install-man: | ||
649 | |||
650 | install-pdf: install-pdf-am | ||
651 | |||
652 | install-pdf-am: | ||
653 | |||
654 | install-ps: install-ps-am | ||
655 | |||
656 | install-ps-am: | ||
657 | |||
658 | installcheck-am: | ||
659 | |||
660 | maintainer-clean: maintainer-clean-am | ||
661 | -rm -rf ./$(DEPDIR) | ||
662 | -rm -f Makefile | ||
663 | maintainer-clean-am: distclean-am maintainer-clean-generic | ||
664 | |||
665 | mostlyclean: mostlyclean-am | ||
666 | |||
667 | mostlyclean-am: mostlyclean-compile mostlyclean-generic \ | ||
668 | mostlyclean-libtool | ||
669 | |||
670 | pdf: pdf-am | ||
671 | |||
672 | pdf-am: | ||
673 | |||
674 | ps: ps-am | ||
675 | |||
676 | ps-am: | ||
677 | |||
678 | uninstall-am: | ||
679 | |||
680 | .MAKE: install-am install-strip | ||
681 | |||
682 | .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ | ||
683 | clean-libtool clean-noinstLTLIBRARIES ctags distclean \ | ||
684 | distclean-compile distclean-generic distclean-libtool \ | ||
685 | distclean-tags distdir dvi dvi-am html html-am info info-am \ | ||
686 | install install-am install-data install-data-am install-dvi \ | ||
687 | install-dvi-am install-exec install-exec-am install-html \ | ||
688 | install-html-am install-info install-info-am install-man \ | ||
689 | install-pdf install-pdf-am install-ps install-ps-am \ | ||
690 | install-strip installcheck installcheck-am installdirs \ | ||
691 | maintainer-clean maintainer-clean-generic mostlyclean \ | ||
692 | mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ | ||
693 | pdf pdf-am ps ps-am tags uninstall uninstall-am | ||
694 | |||
695 | |||
696 | # Tell versions [3.59,3.63) of GNU make to not export all variables. | ||
697 | # Otherwise a system limit (for SysV at least) may be exceeded. | ||
698 | .NOEXPORT: | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_dither_mask.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_dither_mask.c new file mode 100644 index 0000000..566efac --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_dither_mask.c | |||
@@ -0,0 +1,293 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | |||
3 | #define S16_DM_SIZE 128 | ||
4 | #define S16_DM_BITS 6 | ||
5 | #define S16_DM_DIV 64 | ||
6 | #define S16_DM_MSK (S16_DM_SIZE - 1) | ||
7 | #define S16_DM_SHF(_b) (S16_DM_BITS - (8 - _b)) | ||
8 | |||
9 | static const DATA8 dither_table[S16_DM_SIZE][S16_DM_SIZE] = | ||
10 | { | ||
11 | { 0, 41, 23, 5, 17, 39, 7, 15, 62, 23, 40, 51, 31, 47, 9, 32, 52, 27, 57, 25, 6, 61, 27, 52, 37, 7, 40, 63, 18, 36, 10, 42, 25, 62, 45, 34, 20, 42, 37, 14, 35, 29, 50, 10, 61, 2, 40, 8, 37, 12, 58, 22, 5, 41, 10, 39, 0, 60, 11, 46, 2, 55, 38, 17, 36, 59, 13, 54, 37, 56, 8, 29, 16, 13, 63, 22, 41, 55, 7, 20, 49, 14, 23, 55, 37, 23, 19, 36, 15, 49, 23, 63, 30, 14, 38, 27, 53, 13, 22, 41, 19, 31, 7, 19, 50, 30, 49, 16, 3, 32, 56, 40, 29, 34, 8, 48, 19, 45, 4, 51, 12, 46, 35, 49, 16, 42, 12, 62 }, | ||
12 | { 30, 57, 36, 54, 47, 34, 52, 27, 43, 4, 28, 7, 17, 36, 62, 13, 44, 7, 18, 48, 33, 21, 44, 14, 30, 47, 12, 33, 5, 55, 31, 58, 13, 30, 4, 17, 52, 10, 60, 26, 46, 0, 39, 27, 42, 22, 47, 25, 60, 32, 9, 38, 48, 17, 59, 30, 49, 18, 34, 25, 51, 19, 5, 48, 21, 8, 28, 46, 1, 32, 41, 19, 54, 47, 37, 18, 28, 11, 44, 30, 39, 56, 2, 33, 8, 42, 61, 28, 58, 8, 46, 9, 41, 4, 58, 7, 21, 48, 59, 10, 52, 14, 42, 57, 12, 25, 7, 53, 42, 24, 11, 50, 17, 59, 42, 2, 36, 60, 32, 17, 63, 29, 21, 7, 59, 32, 24, 39 }, | ||
13 | { 22, 8, 16, 32, 3, 25, 13, 57, 18, 45, 58, 39, 55, 20, 5, 42, 23, 34, 63, 1, 51, 10, 58, 4, 60, 23, 53, 27, 44, 21, 3, 48, 8, 50, 43, 54, 27, 32, 5, 55, 21, 58, 12, 53, 6, 36, 14, 50, 17, 29, 53, 15, 24, 52, 7, 36, 13, 42, 4, 53, 9, 35, 61, 26, 56, 32, 49, 15, 62, 23, 6, 60, 2, 31, 4, 48, 58, 38, 15, 61, 5, 25, 47, 28, 50, 15, 7, 40, 3, 32, 33, 52, 25, 50, 35, 42, 61, 3, 28, 36, 23, 63, 4, 33, 46, 62, 36, 23, 60, 6, 54, 28, 4, 37, 23, 55, 25, 8, 42, 54, 14, 6, 56, 38, 19, 52, 4, 46 }, | ||
14 | { 48, 53, 43, 12, 45, 63, 30, 37, 9, 34, 21, 1, 25, 47, 29, 58, 3, 54, 15, 39, 29, 17, 38, 35, 20, 43, 1, 49, 15, 59, 29, 39, 22, 35, 16, 23, 1, 47, 39, 18, 8, 44, 25, 31, 57, 19, 63, 4, 45, 3, 42, 61, 1, 31, 45, 20, 57, 29, 62, 21, 32, 41, 14, 44, 3, 39, 5, 34, 10, 43, 51, 35, 23, 52, 40, 10, 21, 1, 53, 18, 51, 43, 12, 62, 18, 54, 26, 51, 20, 57, 14, 1, 62, 16, 11, 18, 32, 39, 17, 44, 1, 48, 26, 37, 18, 2, 51, 14, 28, 45, 35, 18, 57, 13, 47, 11, 51, 20, 2, 39, 31, 47, 25, 1, 50, 11, 60, 7 }, | ||
15 | { 18, 28, 1, 56, 21, 10, 51, 2, 46, 54, 14, 61, 11, 50, 13, 38, 19, 31, 45, 9, 55, 24, 47, 5, 54, 9, 62, 11, 35, 8, 51, 14, 57, 6, 63, 40, 58, 14, 51, 28, 62, 34, 15, 48, 1, 41, 30, 35, 55, 21, 34, 11, 49, 37, 8, 52, 4, 23, 15, 43, 1, 58, 11, 23, 53, 16, 55, 26, 58, 18, 27, 12, 45, 14, 25, 63, 42, 33, 27, 35, 9, 31, 21, 38, 1, 44, 34, 12, 48, 38, 21, 44, 29, 47, 26, 53, 1, 46, 54, 8, 59, 29, 11, 55, 22, 41, 33, 20, 39, 1, 48, 9, 44, 32, 5, 62, 29, 44, 57, 23, 10, 58, 34, 43, 15, 37, 26, 33 }, | ||
16 | { 51, 38, 59, 24, 35, 42, 19, 60, 5, 32, 41, 26, 43, 33, 7, 53, 48, 11, 59, 23, 42, 2, 61, 30, 16, 40, 32, 24, 56, 41, 19, 33, 37, 26, 47, 9, 31, 22, 2, 45, 9, 54, 4, 37, 21, 52, 11, 23, 7, 57, 16, 25, 55, 18, 63, 27, 46, 39, 56, 10, 50, 37, 29, 47, 19, 63, 24, 9, 46, 2, 39, 60, 9, 57, 30, 7, 49, 11, 59, 3, 45, 57, 5, 60, 29, 22, 5, 60, 30, 9, 59, 18, 40, 6, 57, 36, 30, 12, 24, 34, 15, 40, 52, 6, 49, 9, 58, 4, 63, 12, 26, 61, 22, 53, 38, 16, 35, 14, 28, 50, 42, 17, 5, 28, 62, 20, 54, 12 }, | ||
17 | { 26, 6, 31, 15, 49, 6, 38, 27, 22, 49, 16, 56, 2, 62, 30, 21, 0, 36, 28, 6, 49, 32, 13, 52, 26, 50, 19, 46, 3, 26, 62, 0, 53, 12, 29, 3, 53, 41, 60, 24, 38, 13, 58, 16, 43, 9, 59, 39, 46, 28, 44, 40, 2, 33, 13, 41, 16, 6, 47, 31, 26, 17, 57, 6, 38, 0, 42, 36, 29, 52, 20, 31, 48, 0, 34, 56, 20, 36, 23, 54, 14, 41, 24, 37, 10, 55, 46, 25, 16, 45, 36, 4, 55, 23, 15, 8, 50, 62, 5, 56, 44, 20, 13, 28, 59, 31, 24, 47, 31, 52, 37, 17, 40, 0, 26, 49, 3, 60, 7, 33, 0, 61, 53, 40, 8, 45, 2, 41 }, | ||
18 | { 16, 63, 43, 4, 61, 24, 56, 13, 53, 8, 36, 12, 24, 41, 16, 46, 60, 26, 52, 39, 14, 57, 21, 37, 0, 45, 7, 59, 38, 17, 43, 10, 45, 20, 61, 43, 19, 11, 33, 17, 50, 32, 23, 61, 28, 49, 26, 0, 18, 51, 5, 60, 22, 58, 29, 0, 59, 34, 19, 62, 3, 52, 7, 44, 30, 59, 13, 50, 15, 62, 7, 17, 38, 22, 44, 15, 40, 4, 47, 28, 33, 17, 49, 16, 51, 40, 10, 56, 0, 53, 13, 49, 28, 38, 60, 21, 43, 19, 37, 27, 3, 51, 34, 39, 0, 45, 15, 43, 10, 21, 3, 55, 8, 33, 59, 10, 41, 18, 52, 24, 46, 20, 30, 13, 58, 22, 36, 57 }, | ||
19 | { 50, 34, 11, 47, 29, 17, 44, 0, 33, 63, 28, 46, 52, 5, 57, 10, 42, 18, 4, 63, 20, 8, 44, 10, 56, 34, 14, 29, 5, 54, 23, 59, 32, 49, 7, 34, 49, 27, 56, 0, 42, 7, 46, 3, 40, 6, 54, 32, 62, 13, 36, 10, 47, 8, 35, 49, 24, 51, 12, 40, 22, 35, 60, 12, 22, 51, 33, 4, 40, 25, 43, 55, 5, 54, 12, 61, 26, 51, 8, 62, 0, 53, 7, 63, 2, 32, 19, 34, 42, 24, 31, 63, 2, 10, 45, 33, 0, 48, 9, 61, 22, 47, 8, 62, 18, 56, 7, 54, 27, 57, 46, 30, 50, 19, 45, 30, 56, 36, 22, 47, 11, 38, 3, 51, 32, 48, 18, 9 }, | ||
20 | { 0, 21, 40, 19, 52, 9, 37, 48, 20, 40, 3, 18, 27, 38, 35, 22, 31, 56, 13, 35, 46, 28, 60, 40, 27, 18, 61, 50, 41, 30, 7, 36, 2, 25, 16, 57, 5, 15, 47, 29, 55, 19, 30, 52, 15, 34, 20, 12, 43, 30, 20, 54, 25, 44, 53, 12, 38, 5, 55, 27, 48, 15, 33, 27, 45, 8, 19, 28, 56, 11, 33, 49, 18, 36, 29, 2, 45, 16, 39, 19, 31, 43, 27, 35, 20, 52, 26, 6, 61, 11, 41, 17, 29, 51, 20, 56, 25, 32, 41, 17, 53, 31, 25, 14, 42, 23, 35, 16, 38, 6, 34, 12, 15, 62, 6, 21, 13, 1, 63, 9, 55, 27, 43, 25, 14, 4, 31, 55 }, | ||
21 | { 44, 29, 61, 2, 35, 58, 26, 15, 60, 10, 51, 59, 14, 55, 8, 50, 2, 44, 25, 51, 1, 33, 16, 4, 48, 36, 2, 21, 12, 57, 48, 13, 51, 55, 40, 28, 37, 62, 8, 39, 12, 63, 36, 10, 59, 24, 56, 47, 9, 50, 41, 1, 32, 17, 6, 21, 61, 30, 9, 43, 1, 54, 41, 2, 54, 37, 48, 61, 1, 46, 21, 3, 58, 24, 50, 32, 60, 10, 57, 25, 46, 12, 59, 4, 45, 13, 57, 47, 27, 39, 5, 58, 47, 14, 35, 4, 52, 13, 60, 6, 36, 10, 45, 55, 4, 50, 29, 2, 61, 50, 25, 58, 44, 24, 36, 42, 54, 28, 40, 32, 16, 56, 6, 62, 46, 39, 60, 23 }, | ||
22 | { 7, 48, 14, 54, 23, 40, 4, 45, 30, 22, 42, 32, 1, 44, 20, 29, 58, 8, 37, 19, 41, 54, 24, 58, 9, 53, 25, 46, 34, 16, 23, 38, 27, 11, 18, 1, 52, 21, 35, 22, 48, 5, 25, 45, 18, 38, 2, 27, 35, 4, 57, 15, 62, 39, 57, 28, 42, 16, 36, 60, 24, 18, 10, 63, 20, 5, 16, 23, 37, 14, 59, 27, 41, 8, 13, 42, 21, 35, 6, 50, 3, 38, 15, 48, 30, 39, 17, 3, 49, 14, 53, 33, 24, 7, 61, 44, 11, 39, 23, 49, 19, 58, 1, 32, 36, 12, 60, 41, 20, 13, 41, 4, 39, 1, 48, 8, 18, 51, 14, 44, 5, 37, 21, 34, 1, 26, 10, 37 }, | ||
23 | { 53, 36, 27, 9, 50, 12, 32, 55, 2, 57, 7, 17, 48, 34, 63, 15, 40, 26, 62, 11, 49, 6, 31, 39, 22, 42, 6, 63, 1, 39, 60, 4, 42, 61, 32, 45, 24, 44, 2, 60, 16, 41, 53, 1, 33, 61, 49, 17, 63, 23, 45, 26, 33, 3, 23, 46, 2, 50, 20, 4, 45, 34, 49, 30, 39, 58, 44, 31, 53, 34, 6, 52, 30, 47, 63, 1, 53, 22, 42, 31, 58, 23, 54, 22, 61, 8, 36, 59, 22, 35, 21, 1, 55, 40, 27, 16, 30, 54, 2, 29, 43, 16, 39, 63, 21, 46, 26, 10, 48, 32, 19, 53, 30, 56, 26, 60, 33, 4, 61, 23, 49, 59, 15, 53, 19, 58, 42, 16 }, | ||
24 | { 20, 5, 59, 46, 25, 62, 7, 19, 43, 25, 37, 61, 11, 24, 4, 54, 12, 52, 3, 32, 17, 61, 12, 47, 15, 55, 18, 31, 53, 28, 9, 50, 21, 6, 55, 9, 58, 14, 54, 26, 33, 7, 31, 58, 13, 21, 8, 42, 29, 6, 37, 11, 48, 52, 14, 60, 11, 39, 56, 32, 14, 58, 7, 26, 17, 4, 42, 8, 11, 47, 19, 38, 10, 17, 26, 37, 9, 55, 28, 13, 18, 40, 6, 33, 1, 43, 25, 11, 51, 7, 62, 43, 18, 37, 3, 57, 45, 9, 38, 58, 5, 52, 27, 7, 17, 53, 5, 57, 37, 2, 63, 9, 22, 15, 11, 38, 25, 45, 35, 0, 28, 10, 41, 30, 50, 8, 31, 57 }, | ||
25 | { 49, 33, 16, 38, 1, 42, 51, 34, 53, 14, 28, 49, 30, 56, 36, 23, 43, 20, 38, 56, 22, 45, 28, 0, 62, 35, 26, 44, 11, 19, 52, 35, 44, 15, 30, 38, 10, 31, 40, 4, 46, 50, 20, 40, 27, 44, 51, 14, 56, 53, 19, 59, 7, 29, 41, 19, 35, 25, 8, 52, 22, 44, 13, 53, 50, 32, 61, 24, 56, 25, 63, 0, 45, 57, 33, 59, 16, 46, 4, 62, 50, 11, 60, 37, 52, 19, 55, 29, 37, 46, 13, 26, 48, 10, 50, 34, 21, 63, 26, 13, 42, 33, 22, 55, 35, 28, 43, 15, 24, 51, 27, 34, 46, 49, 58, 3, 52, 9, 57, 19, 48, 55, 3, 35, 12, 45, 24, 3 }, | ||
26 | { 41, 11, 56, 28, 18, 31, 22, 10, 37, 6, 47, 13, 3, 41, 9, 46, 0, 48, 29, 6, 34, 10, 55, 37, 20, 8, 49, 3, 41, 59, 14, 25, 0, 63, 19, 47, 27, 51, 17, 57, 23, 10, 61, 6, 54, 3, 38, 31, 0, 22, 34, 43, 20, 55, 31, 0, 49, 63, 29, 38, 3, 62, 28, 40, 0, 22, 14, 35, 2, 48, 15, 43, 23, 14, 3, 29, 49, 20, 39, 34, 0, 44, 29, 9, 15, 47, 5, 42, 0, 31, 58, 5, 31, 61, 23, 15, 0, 47, 19, 50, 24, 3, 59, 11, 44, 0, 31, 59, 6, 42, 17, 60, 0, 39, 20, 31, 43, 17, 29, 40, 12, 25, 60, 22, 52, 15, 63, 29 }, | ||
27 | { 20, 52, 8, 44, 62, 4, 59, 49, 17, 63, 21, 39, 60, 18, 52, 27, 33, 59, 14, 51, 59, 43, 24, 5, 51, 30, 57, 17, 32, 5, 37, 56, 48, 34, 42, 3, 60, 5, 36, 13, 43, 37, 18, 34, 25, 12, 59, 24, 47, 36, 11, 50, 3, 38, 9, 58, 16, 5, 43, 18, 47, 10, 37, 18, 59, 46, 29, 52, 40, 12, 34, 28, 56, 36, 53, 7, 43, 8, 24, 52, 26, 17, 56, 43, 24, 32, 63, 20, 57, 16, 22, 52, 36, 8, 41, 56, 29, 32, 54, 7, 35, 57, 14, 48, 20, 62, 13, 39, 53, 29, 8, 45, 13, 29, 7, 61, 14, 54, 6, 63, 38, 32, 18, 43, 2, 39, 6, 47 }, | ||
28 | { 0, 58, 23, 35, 13, 46, 12, 39, 0, 31, 55, 24, 5, 35, 15, 61, 17, 5, 39, 25, 18, 2, 50, 33, 41, 13, 39, 23, 62, 46, 29, 12, 22, 8, 56, 25, 20, 49, 32, 62, 0, 56, 11, 46, 63, 42, 9, 16, 55, 5, 60, 15, 62, 26, 45, 21, 36, 51, 13, 57, 31, 24, 55, 6, 35, 9, 57, 5, 20, 60, 7, 51, 5, 19, 40, 25, 61, 32, 56, 12, 36, 48, 21, 2, 58, 12, 39, 28, 9, 50, 40, 12, 44, 18, 25, 49, 6, 38, 11, 62, 18, 46, 30, 9, 40, 25, 49, 19, 10, 36, 55, 22, 33, 52, 41, 18, 37, 27, 49, 21, 2, 46, 7, 53, 33, 61, 27, 35 }, | ||
29 | { 41, 31, 5, 39, 51, 26, 33, 57, 27, 41, 9, 44, 54, 29, 48, 7, 44, 36, 57, 10, 31, 63, 16, 45, 11, 60, 1, 47, 7, 20, 43, 3, 58, 36, 13, 52, 39, 7, 15, 28, 22, 48, 30, 21, 1, 29, 49, 44, 27, 17, 40, 30, 24, 42, 12, 53, 33, 7, 47, 20, 1, 42, 11, 49, 25, 43, 17, 32, 45, 27, 41, 21, 31, 62, 11, 49, 2, 15, 42, 5, 63, 7, 41, 27, 49, 6, 54, 23, 46, 34, 2, 28, 54, 3, 59, 12, 46, 17, 42, 28, 40, 1, 37, 51, 5, 55, 2, 34, 47, 16, 3, 62, 47, 5, 23, 56, 1, 44, 12, 34, 51, 16, 57, 11, 25, 17, 54, 13 }, | ||
30 | { 60, 26, 55, 18, 3, 60, 20, 6, 52, 15, 50, 19, 32, 11, 23, 53, 26, 21, 1, 47, 42, 27, 8, 58, 21, 27, 53, 36, 26, 54, 31, 50, 17, 30, 45, 1, 29, 59, 44, 53, 41, 4, 35, 58, 51, 19, 32, 4, 52, 34, 48, 8, 51, 5, 56, 2, 25, 61, 27, 38, 54, 27, 62, 21, 51, 1, 39, 62, 10, 50, 1, 58, 13, 47, 38, 18, 35, 54, 22, 51, 30, 19, 59, 34, 14, 32, 44, 4, 60, 15, 52, 62, 20, 43, 30, 35, 21, 60, 4, 52, 12, 24, 61, 18, 30, 42, 23, 61, 25, 50, 27, 38, 11, 59, 12, 35, 50, 30, 59, 24, 8, 42, 28, 37, 48, 9, 44, 21 }, | ||
31 | { 10, 47, 15, 50, 30, 43, 8, 45, 29, 2, 36, 59, 1, 58, 41, 3, 63, 31, 54, 20, 13, 55, 35, 38, 4, 44, 15, 9, 61, 2, 14, 38, 61, 10, 23, 54, 18, 12, 24, 2, 14, 55, 16, 8, 38, 14, 41, 60, 10, 23, 1, 58, 32, 17, 28, 37, 41, 15, 3, 60, 15, 33, 4, 36, 16, 59, 28, 14, 23, 55, 37, 18, 44, 28, 2, 57, 30, 10, 27, 46, 14, 38, 3, 53, 21, 61, 17, 35, 10, 41, 26, 7, 33, 9, 57, 1, 53, 37, 26, 20, 56, 48, 9, 33, 58, 16, 37, 7, 45, 1, 57, 15, 32, 26, 42, 23, 7, 20, 4, 54, 31, 62, 22, 1, 59, 30, 4, 51 }, | ||
32 | { 36, 2, 38, 11, 24, 36, 54, 22, 62, 47, 25, 8, 28, 45, 16, 38, 12, 43, 9, 37, 49, 3, 23, 52, 18, 30, 50, 33, 19, 42, 49, 26, 6, 40, 47, 35, 63, 38, 50, 33, 60, 26, 36, 47, 24, 57, 6, 26, 39, 63, 19, 44, 14, 46, 61, 9, 50, 30, 45, 23, 10, 50, 44, 8, 31, 54, 6, 46, 36, 4, 30, 54, 8, 52, 22, 41, 4, 60, 40, 0, 58, 24, 45, 10, 37, 1, 48, 30, 56, 17, 38, 48, 24, 47, 19, 39, 14, 8, 45, 32, 2, 34, 27, 44, 4, 52, 11, 56, 31, 21, 40, 19, 44, 51, 2, 63, 46, 58, 36, 43, 14, 5, 50, 38, 14, 56, 40, 23 }, | ||
33 | { 61, 46, 32, 63, 54, 1, 14, 34, 12, 40, 18, 49, 37, 10, 61, 30, 51, 24, 60, 7, 29, 40, 62, 11, 46, 58, 6, 56, 24, 10, 34, 52, 21, 59, 16, 3, 27, 5, 20, 46, 9, 40, 7, 62, 2, 30, 53, 15, 48, 10, 28, 35, 54, 6, 21, 34, 18, 55, 7, 40, 57, 19, 26, 60, 41, 13, 24, 51, 19, 61, 9, 25, 34, 15, 63, 11, 45, 17, 20, 47, 33, 8, 31, 62, 43, 26, 53, 7, 24, 59, 0, 13, 55, 4, 62, 27, 51, 31, 63, 15, 58, 7, 54, 14, 46, 22, 28, 43, 12, 63, 8, 54, 5, 17, 39, 33, 15, 10, 27, 17, 47, 34, 19, 45, 27, 12, 33, 17 }, | ||
34 | { 5, 28, 21, 7, 17, 48, 42, 58, 23, 4, 63, 14, 55, 21, 34, 5, 19, 0, 45, 17, 52, 15, 25, 32, 0, 22, 40, 13, 45, 62, 18, 0, 43, 11, 33, 55, 30, 42, 57, 19, 51, 31, 22, 43, 18, 45, 34, 0, 43, 31, 56, 3, 23, 40, 59, 0, 44, 13, 48, 35, 2, 32, 46, 0, 21, 48, 35, 3, 40, 32, 43, 59, 0, 48, 33, 26, 53, 36, 55, 12, 51, 16, 55, 5, 18, 29, 11, 39, 51, 19, 45, 31, 42, 21, 35, 6, 22, 47, 10, 38, 23, 50, 20, 36, 0, 60, 38, 4, 50, 35, 48, 34, 24, 57, 9, 53, 28, 48, 61, 0, 56, 24, 53, 3, 63, 6, 42, 57 }, | ||
35 | { 13, 53, 45, 40, 58, 27, 6, 16, 38, 51, 33, 30, 43, 2, 47, 56, 40, 50, 33, 57, 27, 5, 47, 42, 60, 36, 16, 54, 28, 4, 37, 57, 28, 51, 22, 8, 45, 14, 6, 39, 0, 54, 11, 59, 28, 12, 50, 21, 61, 13, 19, 38, 49, 11, 25, 37, 58, 29, 22, 63, 14, 56, 12, 53, 30, 63, 9, 57, 26, 12, 47, 16, 23, 39, 50, 6, 31, 2, 25, 6, 28, 41, 36, 22, 50, 57, 42, 3, 34, 8, 28, 61, 11, 50, 16, 54, 41, 0, 55, 43, 5, 29, 41, 63, 25, 16, 53, 18, 26, 10, 21, 0, 61, 30, 41, 22, 3, 38, 20, 39, 29, 8, 41, 16, 36, 52, 22, 19 }, | ||
36 | { 55, 34, 0, 25, 10, 32, 56, 44, 28, 0, 57, 7, 26, 53, 23, 8, 13, 35, 22, 12, 36, 60, 20, 8, 14, 29, 48, 2, 41, 49, 23, 13, 39, 7, 48, 58, 25, 53, 34, 62, 28, 16, 48, 4, 37, 56, 27, 5, 36, 52, 46, 7, 62, 33, 52, 11, 17, 53, 5, 28, 41, 24, 38, 17, 5, 39, 20, 45, 15, 56, 5, 38, 60, 8, 14, 57, 21, 48, 62, 39, 59, 13, 1, 60, 9, 32, 16, 63, 44, 25, 52, 15, 36, 2, 60, 29, 12, 33, 25, 17, 59, 45, 13, 8, 49, 32, 6, 40, 59, 29, 45, 37, 13, 47, 6, 55, 30, 45, 9, 52, 13, 59, 25, 47, 32, 1, 49, 30 }, | ||
37 | { 9, 39, 14, 61, 49, 37, 3, 20, 50, 13, 41, 19, 46, 17, 38, 59, 28, 62, 4, 44, 54, 1, 34, 51, 55, 7, 63, 32, 21, 8, 56, 31, 62, 19, 36, 1, 41, 17, 24, 12, 42, 35, 25, 52, 20, 8, 44, 59, 25, 2, 22, 42, 16, 29, 4, 46, 20, 36, 43, 9, 51, 8, 49, 26, 58, 33, 54, 1, 37, 29, 52, 20, 27, 45, 19, 35, 42, 16, 10, 32, 20, 49, 46, 27, 40, 4, 47, 22, 13, 55, 4, 47, 26, 44, 23, 40, 58, 19, 48, 13, 31, 2, 57, 34, 42, 19, 61, 32, 14, 55, 5, 51, 26, 19, 58, 16, 49, 14, 62, 5, 33, 44, 21, 7, 60, 26, 11, 41 }, | ||
38 | { 62, 24, 47, 29, 8, 19, 53, 11, 60, 24, 32, 61, 4, 55, 31, 2, 49, 16, 39, 9, 31, 24, 43, 17, 26, 38, 11, 25, 58, 43, 12, 35, 3, 46, 15, 32, 63, 4, 49, 56, 2, 60, 10, 32, 63, 17, 39, 12, 55, 30, 57, 9, 48, 55, 39, 24, 60, 2, 58, 31, 19, 61, 34, 3, 42, 11, 22, 46, 7, 61, 10, 42, 3, 55, 32, 1, 58, 28, 44, 54, 4, 34, 23, 15, 56, 20, 37, 58, 6, 30, 38, 18, 63, 9, 32, 5, 51, 3, 62, 37, 52, 18, 39, 23, 3, 51, 9, 47, 1, 23, 43, 15, 60, 35, 11, 40, 1, 36, 31, 26, 57, 2, 37, 54, 18, 44, 58, 16 }, | ||
39 | { 5, 51, 3, 33, 43, 62, 21, 42, 35, 9, 48, 15, 36, 10, 22, 42, 20, 46, 26, 56, 50, 12, 59, 3, 48, 19, 45, 53, 1, 27, 47, 17, 52, 24, 56, 11, 51, 21, 37, 30, 20, 46, 14, 41, 1, 47, 33, 7, 41, 17, 35, 27, 20, 1, 14, 54, 26, 33, 18, 47, 1, 44, 14, 59, 16, 52, 28, 18, 49, 31, 25, 34, 63, 13, 51, 24, 9, 50, 3, 23, 38, 63, 7, 52, 29, 46, 11, 33, 50, 22, 57, 36, 1, 57, 49, 17, 39, 28, 9, 35, 6, 27, 53, 15, 55, 30, 24, 58, 36, 41, 11, 52, 32, 3, 44, 25, 62, 23, 51, 15, 42, 22, 50, 10, 39, 4, 31, 35 }, | ||
40 | { 46, 22, 57, 17, 12, 39, 26, 5, 31, 59, 1, 45, 27, 62, 52, 7, 58, 33, 6, 18, 39, 22, 33, 41, 57, 5, 35, 18, 40, 16, 60, 5, 29, 42, 7, 39, 27, 44, 9, 47, 8, 26, 54, 22, 51, 29, 24, 49, 15, 61, 4, 51, 31, 63, 43, 6, 50, 8, 39, 12, 53, 37, 23, 30, 40, 6, 62, 43, 14, 53, 2, 49, 7, 36, 17, 41, 61, 37, 18, 56, 11, 18, 44, 35, 2, 19, 61, 0, 41, 14, 8, 30, 43, 12, 24, 46, 14, 54, 42, 21, 44, 61, 10, 46, 37, 11, 44, 7, 18, 63, 20, 29, 7, 49, 28, 54, 8, 43, 4, 48, 18, 63, 12, 29, 48, 24, 59, 20 }, | ||
41 | { 13, 36, 28, 54, 35, 2, 56, 46, 16, 49, 22, 40, 11, 34, 14, 43, 29, 12, 63, 48, 2, 61, 7, 15, 28, 30, 50, 9, 61, 33, 38, 23, 54, 13, 61, 33, 3, 59, 16, 35, 58, 40, 5, 38, 13, 57, 3, 58, 37, 21, 45, 12, 39, 7, 35, 30, 13, 56, 22, 62, 27, 6, 55, 10, 48, 21, 33, 2, 38, 23, 40, 20, 44, 29, 59, 4, 26, 12, 33, 47, 28, 53, 31, 13, 59, 41, 27, 49, 26, 54, 45, 16, 53, 21, 35, 7, 59, 26, 11, 56, 1, 24, 33, 4, 28, 62, 21, 49, 31, 2, 56, 39, 24, 58, 13, 17, 37, 21, 56, 10, 38, 0, 34, 55, 15, 43, 1, 52 }, | ||
42 | { 42, 9, 50, 6, 25, 60, 14, 38, 10, 29, 53, 18, 57, 3, 25, 51, 0, 53, 25, 17, 29, 37, 52, 46, 0, 62, 14, 37, 4, 50, 10, 44, 0, 46, 20, 25, 50, 19, 55, 0, 23, 31, 62, 34, 11, 45, 19, 32, 0, 53, 10, 59, 23, 47, 18, 60, 42, 28, 37, 3, 50, 15, 35, 44, 0, 51, 27, 60, 9, 57, 16, 58, 11, 22, 46, 15, 53, 48, 7, 42, 0, 60, 5, 49, 24, 54, 9, 17, 39, 5, 34, 62, 3, 40, 60, 31, 0, 47, 29, 16, 49, 39, 59, 17, 50, 0, 40, 13, 53, 38, 16, 46, 0, 42, 34, 60, 2, 53, 29, 31, 58, 46, 27, 6, 61, 8, 37, 28 }, | ||
43 | { 0, 63, 21, 40, 45, 18, 51, 23, 63, 34, 6, 43, 28, 38, 55, 19, 40, 35, 8, 41, 54, 10, 21, 32, 39, 23, 53, 26, 55, 28, 22, 63, 30, 34, 9, 48, 6, 38, 29, 43, 49, 6, 18, 52, 27, 61, 9, 43, 28, 42, 33, 26, 56, 3, 51, 23, 0, 48, 16, 45, 32, 25, 63, 20, 57, 17, 42, 12, 35, 47, 5, 31, 39, 56, 6, 30, 34, 21, 61, 25, 14, 40, 22, 38, 15, 6, 36, 56, 20, 60, 25, 12, 51, 27, 10, 56, 42, 20, 36, 63, 32, 6, 21, 41, 12, 34, 60, 26, 5, 48, 27, 10, 62, 19, 6, 47, 39, 14, 45, 7, 24, 17, 41, 32, 23, 51, 19, 56 }, | ||
44 | { 45, 31, 15, 59, 4, 33, 7, 47, 0, 41, 13, 61, 4, 47, 9, 23, 60, 14, 57, 31, 4, 45, 59, 6, 58, 10, 44, 20, 8, 42, 15, 6, 55, 17, 58, 31, 53, 12, 61, 10, 15, 57, 43, 2, 23, 35, 48, 14, 54, 6, 18, 49, 15, 38, 11, 34, 62, 9, 21, 58, 11, 41, 4, 31, 38, 8, 29, 55, 19, 36, 27, 52, 0, 25, 50, 43, 1, 39, 8, 55, 35, 51, 10, 30, 45, 62, 29, 2, 46, 10, 32, 48, 18, 38, 5, 22, 33, 8, 51, 3, 14, 44, 54, 25, 57, 30, 18, 52, 33, 22, 59, 28, 36, 52, 32, 21, 26, 50, 5, 55, 35, 60, 14, 54, 4, 40, 16, 33 }, | ||
45 | { 27, 3, 49, 10, 30, 40, 55, 27, 57, 24, 52, 21, 32, 17, 60, 30, 5, 44, 27, 49, 19, 34, 13, 24, 43, 36, 3, 49, 31, 59, 37, 48, 26, 41, 2, 41, 14, 36, 21, 32, 40, 26, 13, 49, 55, 5, 16, 40, 25, 60, 36, 1, 63, 29, 17, 44, 25, 40, 52, 5, 29, 47, 54, 13, 46, 24, 60, 4, 51, 22, 63, 14, 45, 18, 12, 62, 17, 57, 19, 42, 3, 26, 58, 48, 1, 21, 40, 52, 23, 37, 44, 1, 29, 58, 43, 50, 15, 61, 19, 45, 58, 28, 7, 48, 2, 46, 8, 42, 3, 55, 8, 50, 12, 4, 55, 10, 63, 33, 20, 40, 11, 3, 46, 20, 48, 26, 61, 11 }, | ||
46 | { 44, 56, 24, 36, 53, 19, 12, 37, 16, 44, 7, 36, 49, 54, 11, 37, 48, 21, 15, 1, 62, 25, 47, 56, 16, 18, 51, 12, 40, 1, 24, 11, 52, 16, 23, 59, 28, 1, 45, 53, 4, 60, 37, 21, 39, 30, 63, 20, 52, 10, 30, 45, 8, 41, 54, 4, 57, 7, 34, 55, 36, 18, 23, 59, 2, 48, 11, 32, 44, 1, 41, 8, 33, 54, 38, 23, 30, 46, 6, 29, 62, 18, 32, 16, 55, 34, 14, 11, 61, 7, 55, 16, 53, 13, 23, 2, 55, 37, 26, 10, 33, 23, 36, 16, 38, 22, 56, 15, 24, 43, 35, 17, 44, 40, 25, 46, 16, 1, 57, 25, 49, 36, 28, 62, 9, 35, 7, 53 }, | ||
47 | { 17, 38, 8, 61, 1, 50, 26, 62, 3, 31, 56, 15, 1, 26, 40, 2, 34, 51, 56, 36, 42, 9, 38, 2, 29, 60, 32, 57, 19, 62, 34, 47, 4, 57, 39, 7, 44, 63, 24, 18, 46, 28, 8, 54, 1, 34, 7, 46, 3, 37, 50, 23, 57, 21, 13, 46, 31, 20, 43, 15, 1, 61, 8, 33, 37, 17, 56, 26, 15, 49, 24, 59, 28, 3, 56, 9, 52, 32, 13, 49, 10, 43, 5, 45, 8, 25, 59, 42, 28, 33, 19, 40, 8, 63, 35, 47, 25, 4, 40, 52, 1, 60, 12, 53, 63, 9, 29, 60, 37, 19, 1, 62, 31, 20, 58, 12, 41, 30, 43, 9, 18, 52, 22, 1, 39, 30, 58, 21 }, | ||
48 | { 13, 47, 29, 18, 43, 34, 5, 48, 20, 42, 10, 45, 30, 58, 20, 63, 24, 11, 6, 28, 54, 14, 22, 52, 41, 7, 26, 5, 45, 15, 53, 13, 35, 27, 18, 50, 12, 33, 5, 56, 10, 17, 45, 24, 59, 15, 50, 26, 56, 13, 19, 5, 32, 52, 27, 36, 2, 61, 12, 26, 49, 40, 27, 52, 13, 50, 6, 39, 61, 34, 10, 37, 48, 20, 41, 27, 2, 36, 59, 24, 54, 33, 63, 20, 38, 50, 3, 17, 52, 4, 58, 27, 45, 21, 32, 11, 48, 17, 57, 20, 46, 38, 25, 43, 4, 34, 51, 6, 13, 45, 57, 26, 6, 48, 2, 35, 53, 23, 61, 34, 59, 6, 42, 56, 13, 51, 2, 41 }, | ||
49 | { 32, 5, 55, 23, 58, 14, 22, 52, 29, 15, 61, 25, 51, 8, 43, 13, 53, 41, 46, 20, 3, 33, 63, 11, 48, 21, 54, 38, 28, 3, 30, 43, 21, 62, 9, 31, 55, 22, 51, 29, 37, 62, 32, 12, 42, 29, 41, 9, 33, 44, 62, 28, 43, 1, 59, 19, 48, 30, 51, 39, 24, 4, 58, 19, 42, 29, 22, 43, 3, 18, 53, 5, 13, 50, 16, 60, 45, 21, 7, 40, 15, 0, 26, 53, 13, 31, 43, 24, 47, 31, 15, 49, 2, 41, 6, 59, 29, 42, 9, 30, 14, 7, 49, 18, 31, 47, 20, 39, 49, 32, 11, 41, 54, 15, 61, 18, 7, 38, 4, 13, 44, 28, 15, 32, 45, 19, 27, 49 }, | ||
50 | { 63, 34, 11, 39, 2, 45, 37, 8, 59, 39, 33, 4, 36, 17, 48, 5, 29, 18, 32, 61, 39, 50, 5, 27, 35, 0, 46, 12, 22, 49, 60, 6, 54, 0, 38, 49, 2, 42, 15, 40, 0, 47, 20, 51, 3, 57, 18, 61, 22, 0, 39, 16, 55, 12, 35, 8, 41, 22, 6, 59, 16, 45, 10, 36, 0, 62, 9, 54, 30, 58, 21, 43, 63, 31, 7, 35, 12, 48, 58, 28, 47, 37, 41, 9, 57, 20, 61, 0, 36, 11, 57, 35, 23, 52, 37, 18, 0, 62, 22, 55, 35, 62, 27, 54, 0, 15, 61, 28, 2, 59, 22, 9, 37, 27, 33, 51, 29, 48, 19, 50, 25, 37, 10, 57, 5, 37, 60, 8 }, | ||
51 | { 20, 25, 46, 52, 31, 60, 12, 55, 0, 19, 11, 46, 62, 35, 23, 38, 57, 0, 55, 10, 16, 30, 58, 44, 17, 59, 29, 63, 42, 8, 36, 20, 33, 46, 16, 61, 25, 35, 8, 54, 26, 7, 58, 22, 34, 6, 47, 14, 53, 31, 48, 9, 37, 25, 49, 63, 16, 55, 45, 14, 34, 63, 21, 53, 25, 33, 46, 16, 35, 7, 46, 29, 0, 39, 25, 55, 22, 34, 18, 4, 56, 11, 23, 51, 28, 6, 39, 14, 62, 44, 19, 8, 60, 12, 56, 28, 50, 34, 39, 5, 51, 3, 41, 12, 57, 35, 10, 53, 25, 17, 52, 30, 47, 0, 43, 14, 5, 57, 31, 55, 0, 63, 47, 23, 54, 24, 14, 43 }, | ||
52 | { 0, 57, 16, 6, 26, 19, 35, 28, 49, 42, 54, 26, 21, 1, 59, 27, 9, 47, 26, 44, 50, 22, 13, 40, 8, 37, 10, 34, 17, 56, 25, 58, 13, 27, 44, 9, 20, 58, 31, 17, 60, 36, 10, 41, 53, 25, 36, 39, 4, 24, 58, 17, 60, 4, 22, 38, 10, 32, 0, 50, 31, 7, 28, 47, 12, 57, 5, 26, 52, 23, 14, 40, 57, 17, 47, 5, 53, 1, 44, 31, 19, 60, 46, 2, 35, 48, 30, 54, 22, 5, 51, 39, 25, 31, 4, 43, 14, 9, 45, 16, 24, 44, 19, 29, 40, 23, 44, 7, 38, 42, 4, 63, 12, 54, 23, 59, 22, 42, 8, 15, 40, 21, 8, 34, 3, 41, 30, 50 }, | ||
53 | { 39, 10, 48, 33, 41, 54, 5, 47, 23, 13, 32, 7, 52, 44, 14, 39, 58, 18, 35, 6, 37, 2, 60, 24, 55, 19, 53, 2, 51, 32, 1, 41, 51, 4, 40, 29, 47, 3, 52, 44, 13, 49, 28, 16, 1, 62, 11, 27, 52, 35, 5, 42, 29, 47, 14, 56, 28, 53, 26, 38, 9, 56, 40, 3, 38, 15, 41, 60, 1, 37, 50, 25, 11, 28, 61, 19, 42, 62, 10, 52, 39, 6, 32, 14, 58, 17, 7, 26, 42, 34, 27, 10, 54, 40, 20, 63, 26, 53, 21, 61, 32, 7, 59, 48, 3, 56, 18, 31, 58, 14, 49, 21, 36, 16, 45, 9, 36, 24, 62, 45, 27, 31, 53, 17, 49, 12, 62, 18 }, | ||
54 | { 28, 59, 21, 58, 2, 16, 38, 9, 62, 3, 56, 41, 10, 31, 50, 4, 32, 52, 12, 63, 23, 46, 33, 31, 4, 48, 25, 43, 14, 23, 47, 11, 22, 55, 14, 60, 23, 37, 11, 39, 23, 2, 45, 56, 31, 43, 19, 55, 16, 46, 21, 51, 11, 33, 44, 2, 41, 18, 5, 52, 23, 44, 17, 60, 27, 49, 11, 32, 44, 10, 54, 2, 56, 33, 8, 38, 13, 29, 36, 16, 24, 63, 27, 51, 21, 43, 56, 12, 49, 3, 59, 48, 1, 15, 46, 7, 36, 2, 47, 11, 50, 27, 37, 13, 33, 8, 51, 46, 1, 34, 28, 40, 3, 33, 60, 29, 47, 1, 35, 11, 59, 42, 2, 60, 26, 46, 6, 35 }, | ||
55 | { 4, 43, 9, 29, 36, 63, 24, 44, 20, 50, 30, 17, 60, 22, 16, 43, 25, 3, 42, 19, 51, 15, 8, 54, 42, 15, 61, 5, 39, 57, 18, 61, 31, 48, 34, 2, 50, 19, 57, 5, 63, 33, 19, 38, 13, 27, 48, 7, 32, 61, 2, 26, 58, 6, 24, 50, 13, 61, 42, 20, 62, 2, 35, 20, 51, 4, 62, 18, 23, 58, 20, 31, 43, 15, 51, 45, 26, 50, 4, 55, 45, 3, 35, 9, 38, 1, 32, 61, 20, 45, 17, 33, 24, 57, 29, 51, 22, 58, 38, 30, 15, 1, 54, 21, 63, 43, 26, 12, 24, 56, 8, 60, 50, 19, 5, 52, 13, 54, 17, 50, 4, 16, 36, 12, 32, 56, 22, 54 }, | ||
56 | { 51, 25, 40, 53, 12, 49, 15, 57, 34, 7, 38, 47, 2, 36, 55, 8, 61, 30, 56, 7, 28, 59, 48, 11, 27, 35, 21, 45, 28, 36, 9, 38, 6, 16, 24, 63, 10, 32, 28, 43, 21, 53, 5, 60, 8, 57, 3, 45, 11, 37, 15, 54, 40, 20, 62, 36, 27, 34, 11, 48, 30, 15, 54, 8, 30, 42, 22, 34, 48, 13, 35, 63, 4, 37, 22, 2, 59, 9, 41, 23, 13, 41, 49, 18, 59, 24, 40, 5, 37, 30, 9, 61, 44, 6, 37, 11, 33, 17, 5, 55, 41, 60, 23, 39, 17, 5, 30, 62, 41, 16, 46, 25, 11, 56, 39, 26, 20, 38, 29, 39, 22, 52, 44, 20, 48, 1, 38, 14 }, | ||
57 | { 15, 33, 2, 18, 44, 6, 27, 0, 32, 61, 25, 12, 58, 28, 40, 20, 47, 13, 34, 43, 38, 1, 23, 62, 40, 0, 51, 10, 63, 3, 52, 26, 44, 30, 45, 6, 41, 54, 0, 51, 12, 30, 46, 24, 49, 22, 40, 33, 63, 23, 43, 30, 9, 47, 0, 17, 54, 7, 57, 3, 37, 47, 24, 46, 13, 55, 7, 52, 2, 42, 6, 26, 49, 18, 60, 34, 16, 57, 33, 20, 61, 30, 8, 54, 14, 46, 12, 53, 16, 55, 38, 13, 22, 53, 18, 59, 46, 27, 43, 19, 32, 10, 45, 6, 49, 36, 52, 2, 20, 55, 6, 39, 32, 15, 44, 3, 58, 10, 63, 6, 56, 30, 7, 58, 9, 40, 19, 63 }, | ||
58 | { 10, 47, 61, 23, 55, 31, 52, 42, 17, 45, 4, 51, 27, 6, 15, 53, 0, 49, 26, 10, 56, 18, 36, 6, 20, 58, 32, 30, 13, 49, 19, 56, 0, 59, 12, 53, 27, 17, 38, 25, 48, 9, 15, 36, 14, 30, 59, 17, 0, 50, 8, 58, 18, 56, 31, 45, 21, 41, 29, 19, 60, 6, 32, 59, 0, 36, 29, 39, 19, 59, 46, 12, 55, 30, 10, 47, 24, 3, 28, 48, 0, 55, 44, 27, 33, 4, 63, 29, 49, 0, 26, 50, 34, 2, 42, 14, 0, 62, 9, 56, 3, 52, 28, 34, 58, 9, 20, 48, 37, 32, 22, 53, 0, 62, 27, 49, 34, 46, 21, 33, 41, 14, 25, 37, 53, 29, 31, 45 }, | ||
59 | { 56, 28, 7, 37, 11, 36, 20, 9, 54, 14, 39, 19, 34, 63, 45, 37, 24, 17, 60, 31, 21, 45, 53, 29, 47, 15, 7, 55, 40, 23, 34, 14, 42, 20, 37, 35, 15, 59, 7, 62, 34, 40, 59, 1, 51, 42, 10, 28, 54, 21, 35, 5, 38, 13, 36, 4, 59, 12, 39, 53, 15, 43, 9, 21, 39, 62, 16, 56, 25, 9, 32, 38, 0, 41, 14, 51, 40, 53, 43, 11, 37, 17, 5, 22, 57, 39, 19, 7, 42, 21, 60, 10, 31, 63, 25, 52, 30, 49, 36, 25, 48, 17, 61, 14, 22, 42, 29, 13, 60, 11, 47, 18, 35, 41, 7, 23, 4, 16, 51, 11, 0, 48, 61, 3, 17, 50, 5, 24 }, | ||
60 | { 0, 42, 21, 49, 60, 3, 57, 40, 29, 48, 23, 56, 42, 11, 22, 5, 59, 39, 4, 50, 3, 41, 12, 57, 25, 50, 44, 18, 4, 46, 7, 62, 33, 50, 4, 56, 21, 32, 43, 18, 3, 23, 55, 34, 20, 4, 53, 38, 12, 46, 29, 52, 25, 61, 23, 51, 26, 46, 1, 34, 25, 57, 28, 51, 26, 11, 50, 3, 44, 28, 53, 21, 57, 27, 62, 6, 31, 19, 8, 63, 26, 59, 36, 47, 15, 29, 50, 25, 35, 47, 18, 41, 4, 48, 8, 40, 12, 23, 6, 44, 13, 40, 1, 31, 55, 0, 61, 43, 4, 50, 26, 58, 9, 53, 24, 61, 42, 55, 31, 43, 57, 20, 34, 27, 43, 8, 59, 39 }, | ||
61 | { 18, 51, 30, 13, 26, 16, 46, 22, 2, 59, 8, 30, 1, 48, 33, 51, 29, 9, 46, 16, 62, 14, 33, 2, 38, 9, 27, 60, 37, 26, 53, 17, 28, 10, 24, 46, 2, 49, 8, 57, 29, 45, 6, 26, 62, 44, 18, 25, 61, 3, 42, 14, 49, 10, 43, 6, 17, 32, 63, 10, 49, 4, 40, 14, 45, 33, 22, 37, 12, 61, 5, 17, 43, 7, 23, 37, 15, 58, 49, 13, 39, 21, 10, 52, 1, 62, 9, 56, 12, 2, 58, 28, 36, 16, 56, 28, 56, 35, 20, 63, 24, 37, 51, 8, 45, 25, 16, 33, 27, 38, 2, 44, 13, 30, 17, 36, 12, 26, 5, 18, 28, 47, 13, 60, 23, 45, 13, 33 }, | ||
62 | { 55, 4, 62, 34, 52, 38, 7, 63, 32, 37, 13, 53, 25, 62, 18, 12, 55, 41, 27, 35, 24, 49, 31, 52, 17, 63, 34, 1, 56, 12, 41, 2, 48, 58, 39, 16, 61, 27, 41, 52, 13, 19, 50, 39, 11, 31, 57, 6, 32, 40, 20, 55, 1, 28, 33, 57, 48, 8, 37, 22, 44, 18, 53, 1, 61, 5, 54, 16, 47, 36, 50, 24, 55, 34, 48, 45, 1, 30, 33, 46, 2, 50, 32, 42, 25, 34, 43, 21, 38, 52, 23, 45, 14, 54, 21, 4, 44, 16, 53, 29, 10, 47, 19, 57, 12, 54, 39, 10, 51, 15, 63, 21, 57, 40, 51, 1, 48, 57, 37, 62, 2, 38, 9, 52, 1, 35, 58, 22 }, | ||
63 | { 36, 46, 10, 42, 1, 27, 43, 15, 50, 21, 45, 16, 41, 3, 35, 44, 20, 1, 57, 11, 55, 7, 43, 8, 22, 42, 13, 46, 21, 39, 31, 60, 22, 5, 29, 44, 11, 35, 20, 4, 36, 58, 32, 15, 47, 2, 36, 48, 16, 60, 8, 35, 44, 63, 16, 2, 40, 26, 55, 14, 58, 35, 24, 31, 19, 42, 31, 58, 1, 29, 10, 40, 2, 19, 12, 54, 22, 61, 7, 24, 56, 5, 28, 16, 54, 3, 15, 58, 6, 30, 8, 62, 1, 43, 31, 47, 7, 59, 1, 38, 58, 4, 34, 27, 38, 5, 31, 59, 7, 46, 30, 3, 34, 6, 28, 59, 20, 8, 32, 15, 53, 24, 55, 31, 19, 49, 11, 26 }, | ||
64 | { 2, 24, 16, 58, 19, 55, 5, 35, 10, 61, 4, 28, 57, 24, 58, 7, 31, 47, 22, 38, 19, 28, 61, 36, 54, 5, 59, 29, 6, 52, 15, 11, 43, 36, 8, 54, 52, 1, 62, 25, 47, 9, 1, 60, 28, 53, 24, 14, 46, 27, 51, 22, 12, 24, 38, 53, 20, 11, 51, 3, 29, 7, 48, 63, 8, 49, 9, 21, 52, 14, 63, 32, 46, 60, 35, 4, 41, 16, 52, 35, 18, 42, 59, 7, 36, 61, 45, 27, 33, 51, 19, 39, 34, 11, 61, 18, 33, 41, 28, 15, 54, 22, 42, 3, 49, 21, 47, 18, 36, 23, 55, 19, 48, 24, 45, 10, 33, 44, 50, 40, 7, 35, 15, 41, 63, 6, 40, 54 }, | ||
65 | { 62, 41, 32, 8, 47, 28, 60, 24, 44, 30, 38, 49, 9, 33, 14, 40, 50, 14, 60, 2, 54, 40, 0, 20, 25, 39, 16, 49, 24, 35, 57, 47, 19, 61, 33, 18, 23, 37, 13, 55, 31, 43, 22, 41, 17, 8, 42, 58, 0, 37, 5, 56, 31, 54, 7, 30, 60, 33, 42, 17, 59, 39, 12, 27, 38, 17, 35, 41, 27, 45, 20, 7, 25, 15, 29, 58, 27, 47, 11, 40, 14, 54, 23, 46, 19, 31, 11, 40, 13, 49, 5, 58, 24, 51, 26, 6, 50, 20, 49, 9, 32, 46, 17, 60, 14, 63, 24, 1, 57, 41, 9, 43, 14, 62, 16, 52, 3, 27, 14, 22, 61, 45, 4, 28, 9, 47, 29, 17 }, | ||
66 | { 5, 50, 12, 53, 38, 18, 11, 51, 0, 55, 17, 6, 47, 54, 19, 63, 5, 26, 34, 45, 13, 30, 47, 58, 10, 48, 32, 3, 62, 9, 26, 0, 25, 14, 50, 3, 47, 30, 42, 16, 6, 63, 12, 49, 33, 55, 21, 10, 34, 63, 18, 41, 3, 47, 19, 43, 0, 49, 8, 28, 46, 20, 52, 0, 56, 24, 60, 3, 59, 5, 39, 57, 48, 52, 9, 38, 3, 21, 26, 60, 0, 32, 12, 38, 4, 48, 53, 0, 60, 15, 29, 44, 18, 10, 38, 57, 13, 60, 2, 26, 62, 7, 50, 29, 35, 8, 40, 53, 28, 12, 60, 33, 38, 5, 37, 29, 60, 39, 56, 0, 30, 18, 50, 34, 59, 25, 14, 44 }, | ||
67 | { 20, 31, 60, 22, 3, 49, 33, 25, 40, 13, 34, 59, 22, 36, 0, 28, 37, 56, 8, 18, 51, 16, 4, 45, 27, 12, 53, 42, 18, 44, 51, 31, 55, 40, 28, 58, 7, 60, 10, 51, 27, 37, 24, 56, 5, 26, 44, 29, 50, 23, 45, 11, 34, 15, 59, 27, 13, 23, 62, 37, 4, 57, 15, 32, 42, 6, 47, 11, 30, 43, 23, 13, 0, 36, 18, 44, 63, 51, 37, 29, 49, 20, 57, 27, 62, 9, 24, 35, 23, 53, 37, 3, 42, 55, 0, 36, 23, 39, 31, 43, 17, 37, 24, 11, 52, 43, 19, 32, 5, 50, 26, 0, 56, 21, 54, 11, 19, 6, 47, 25, 59, 42, 12, 54, 21, 3, 38, 57 }, | ||
68 | { 48, 0, 35, 27, 44, 14, 59, 7, 57, 46, 26, 2, 42, 12, 52, 43, 10, 27, 53, 42, 32, 62, 37, 21, 34, 61, 7, 23, 36, 4, 38, 12, 41, 5, 17, 45, 22, 27, 39, 21, 59, 0, 45, 18, 39, 62, 3, 38, 14, 7, 54, 26, 61, 39, 9, 52, 45, 36, 18, 50, 10, 34, 44, 22, 50, 14, 36, 55, 17, 34, 53, 62, 33, 26, 56, 6, 31, 12, 6, 53, 9, 44, 2, 50, 20, 40, 55, 17, 47, 7, 26, 63, 22, 32, 48, 16, 46, 8, 52, 12, 57, 41, 0, 56, 25, 3, 61, 14, 45, 35, 18, 44, 12, 46, 23, 42, 32, 51, 35, 10, 17, 36, 23, 1, 45, 52, 32, 10 }, | ||
69 | { 37, 15, 43, 8, 63, 39, 21, 31, 16, 37, 19, 62, 30, 46, 17, 60, 21, 48, 1, 23, 6, 25, 11, 56, 1, 40, 30, 58, 15, 54, 21, 59, 9, 63, 35, 56, 11, 51, 2, 46, 34, 14, 53, 7, 30, 11, 51, 19, 60, 40, 30, 1, 24, 50, 20, 32, 3, 56, 5, 25, 31, 13, 61, 2, 29, 60, 25, 20, 51, 2, 27, 8, 18, 42, 10, 45, 21, 34, 43, 17, 62, 29, 41, 14, 34, 6, 30, 43, 2, 57, 33, 13, 45, 12, 27, 62, 4, 55, 21, 35, 5, 27, 45, 33, 16, 47, 30, 54, 22, 10, 51, 27, 63, 7, 49, 1, 58, 22, 15, 43, 53, 7, 57, 39, 27, 12, 61, 24 }, | ||
70 | { 56, 51, 26, 56, 19, 2, 41, 54, 5, 52, 9, 48, 6, 23, 39, 4, 32, 15, 63, 35, 59, 49, 43, 15, 52, 19, 50, 9, 46, 33, 1, 29, 48, 20, 32, 1, 38, 33, 19, 54, 9, 32, 24, 48, 58, 35, 16, 48, 4, 52, 13, 57, 33, 5, 45, 59, 15, 29, 41, 55, 47, 39, 23, 53, 9, 40, 4, 57, 10, 44, 48, 40, 50, 14, 61, 24, 55, 1, 59, 22, 33, 8, 51, 25, 58, 46, 11, 59, 20, 41, 17, 51, 6, 56, 35, 25, 42, 30, 15, 58, 48, 18, 61, 9, 58, 39, 13, 2, 37, 59, 40, 2, 31, 16, 34, 41, 8, 30, 62, 3, 29, 48, 33, 5, 63, 16, 41, 7 }, | ||
71 | { 22, 4, 46, 11, 33, 51, 29, 10, 62, 24, 43, 27, 15, 58, 50, 25, 54, 44, 9, 38, 18, 3, 29, 57, 32, 5, 26, 43, 17, 61, 24, 52, 8, 42, 23, 53, 15, 61, 7, 28, 57, 43, 4, 40, 20, 2, 43, 25, 32, 35, 21, 43, 17, 48, 10, 22, 38, 54, 11, 21, 1, 58, 16, 30, 48, 18, 46, 32, 38, 13, 22, 4, 59, 35, 2, 51, 30, 39, 15, 47, 4, 56, 13, 37, 1, 28, 16, 52, 32, 9, 61, 29, 38, 19, 3, 52, 10, 48, 1, 32, 11, 40, 20, 36, 6, 22, 49, 29, 55, 6, 20, 56, 36, 52, 19, 60, 26, 46, 18, 54, 40, 13, 20, 46, 35, 19, 49, 29 }, | ||
72 | { 61, 17, 34, 53, 23, 6, 48, 35, 20, 40, 1, 56, 36, 29, 11, 34, 7, 41, 14, 30, 55, 20, 46, 8, 24, 38, 63, 2, 37, 10, 45, 14, 34, 49, 6, 13, 44, 25, 49, 41, 21, 12, 61, 15, 54, 29, 63, 12, 56, 8, 49, 2, 62, 36, 28, 61, 0, 25, 41, 63, 35, 8, 44, 6, 37, 62, 7, 21, 63, 28, 55, 31, 16, 24, 41, 19, 9, 57, 27, 36, 18, 42, 31, 62, 22, 55, 38, 4, 27, 47, 1, 40, 14, 54, 43, 20, 60, 23, 38, 63, 25, 51, 2, 53, 26, 63, 10, 42, 17, 34, 47, 25, 13, 5, 44, 11, 55, 2, 38, 27, 6, 60, 52, 25, 9, 55, 1, 40 }, | ||
73 | { 8, 30, 58, 3, 42, 61, 17, 38, 13, 59, 32, 10, 54, 3, 51, 20, 61, 26, 57, 2, 46, 33, 12, 60, 41, 13, 48, 29, 55, 20, 39, 27, 57, 18, 62, 29, 55, 2, 31, 16, 37, 50, 26, 36, 6, 46, 9, 41, 27, 57, 23, 39, 26, 6, 51, 12, 31, 46, 7, 16, 27, 52, 19, 56, 26, 12, 33, 53, 1, 41, 8, 57, 46, 7, 54, 32, 47, 5, 49, 11, 60, 23, 5, 48, 10, 43, 19, 63, 35, 24, 49, 21, 59, 5, 31, 37, 14, 44, 7, 42, 6, 30, 46, 13, 44, 32, 19, 50, 4, 58, 8, 30, 62, 38, 28, 53, 21, 36, 13, 50, 21, 33, 15, 2, 44, 31, 14, 47 }, | ||
74 | { 37, 13, 39, 16, 28, 9, 57, 0, 25, 49, 21, 45, 18, 47, 12, 42, 0, 49, 22, 39, 16, 53, 25, 36, 0, 52, 22, 16, 6, 60, 4, 51, 0, 26, 37, 47, 10, 36, 63, 5, 57, 0, 18, 59, 23, 33, 51, 19, 0, 44, 15, 11, 54, 17, 42, 35, 53, 18, 58, 33, 49, 4, 34, 42, 0, 50, 43, 25, 16, 49, 34, 20, 37, 28, 12, 63, 16, 38, 25, 44, 0, 40, 52, 17, 35, 3, 50, 14, 8, 53, 11, 36, 25, 45, 9, 62, 0, 54, 28, 17, 50, 55, 15, 24, 57, 0, 53, 34, 23, 41, 15, 45, 0, 49, 16, 4, 48, 9, 63, 45, 0, 42, 58, 37, 61, 22, 54, 26 }, | ||
75 | { 0, 50, 21, 47, 54, 36, 27, 45, 52, 4, 34, 15, 63, 29, 37, 59, 17, 31, 6, 61, 28, 5, 48, 18, 59, 27, 34, 56, 44, 31, 35, 12, 41, 59, 16, 3, 40, 20, 50, 22, 30, 40, 52, 10, 45, 3, 59, 22, 37, 61, 29, 46, 31, 58, 2, 22, 9, 43, 3, 39, 14, 61, 24, 54, 15, 29, 11, 60, 39, 17, 5, 61, 0, 44, 50, 3, 31, 14, 58, 21, 54, 28, 15, 45, 60, 26, 33, 58, 44, 22, 60, 2, 57, 34, 49, 27, 18, 34, 21, 59, 29, 4, 36, 41, 8, 39, 28, 11, 62, 26, 53, 20, 35, 24, 59, 32, 29, 39, 24, 31, 57, 23, 11, 28, 5, 36, 11, 59 }, | ||
76 | { 44, 32, 63, 5, 20, 12, 41, 7, 30, 61, 42, 8, 39, 5, 33, 8, 24, 53, 45, 11, 37, 58, 7, 44, 10, 50, 3, 40, 8, 22, 53, 19, 46, 9, 33, 52, 24, 58, 8, 44, 13, 47, 8, 34, 38, 30, 14, 47, 7, 34, 4, 55, 9, 19, 40, 49, 56, 26, 60, 21, 30, 45, 10, 19, 40, 58, 23, 36, 3, 52, 45, 23, 54, 13, 22, 42, 53, 45, 7, 33, 10, 36, 57, 6, 29, 12, 41, 0, 30, 15, 41, 30, 17, 7, 16, 53, 40, 56, 2, 39, 12, 61, 10, 52, 31, 60, 16, 45, 1, 37, 7, 61, 40, 10, 43, 17, 58, 7, 54, 14, 4, 51, 39, 49, 18, 56, 42, 20 }, | ||
77 | { 14, 6, 24, 36, 56, 49, 22, 60, 18, 14, 23, 51, 26, 57, 21, 52, 41, 14, 35, 50, 19, 31, 40, 23, 33, 14, 63, 17, 32, 47, 7, 62, 23, 30, 56, 11, 42, 27, 14, 60, 35, 19, 28, 61, 17, 55, 25, 39, 53, 17, 42, 21, 38, 63, 25, 5, 14, 36, 12, 50, 1, 37, 59, 32, 2, 51, 6, 56, 27, 32, 11, 30, 38, 26, 60, 8, 26, 19, 62, 39, 50, 2, 21, 39, 53, 23, 56, 19, 49, 39, 5, 46, 55, 23, 42, 4, 31, 11, 47, 26, 45, 22, 48, 18, 21, 5, 48, 25, 57, 14, 47, 30, 3, 56, 12, 50, 1, 42, 19, 47, 35, 17, 8, 30, 45, 25, 4, 51 }, | ||
78 | { 28, 58, 43, 1, 31, 8, 33, 2, 44, 55, 32, 1, 60, 12, 46, 27, 4, 62, 23, 1, 56, 13, 62, 2, 54, 36, 25, 51, 1, 57, 26, 42, 3, 49, 17, 38, 1, 48, 31, 4, 54, 3, 50, 24, 1, 49, 5, 63, 13, 27, 52, 1, 48, 13, 45, 33, 52, 30, 46, 20, 55, 28, 6, 48, 24, 38, 20, 47, 14, 62, 48, 9, 58, 4, 36, 30, 56, 1, 34, 12, 18, 63, 25, 48, 4, 16, 37, 7, 62, 10, 52, 28, 13, 50, 36, 63, 24, 51, 15, 58, 8, 33, 1, 38, 56, 35, 42, 9, 33, 51, 22, 18, 48, 32, 27, 37, 23, 61, 33, 11, 59, 29, 62, 1, 53, 10, 60, 33 }, | ||
79 | { 12, 39, 17, 52, 26, 46, 53, 38, 25, 11, 48, 36, 16, 43, 2, 35, 55, 17, 39, 29, 43, 9, 28, 45, 20, 5, 46, 12, 42, 28, 13, 52, 36, 6, 60, 22, 54, 17, 62, 39, 25, 42, 15, 55, 44, 20, 31, 10, 35, 57, 24, 32, 29, 6, 59, 18, 7, 62, 3, 41, 10, 44, 16, 54, 13, 62, 31, 9, 41, 1, 21, 43, 18, 47, 15, 40, 11, 49, 28, 55, 46, 30, 8, 43, 32, 61, 28, 47, 25, 34, 21, 61, 32, 1, 20, 9, 46, 6, 35, 19, 41, 54, 27, 63, 14, 3, 51, 20, 62, 2, 38, 55, 8, 21, 63, 6, 46, 9, 26, 51, 3, 24, 43, 34, 16, 41, 18, 48 }, | ||
80 | { 62, 23, 55, 9, 15, 62, 19, 13, 58, 40, 6, 30, 54, 19, 50, 31, 10, 44, 6, 59, 21, 47, 51, 15, 60, 39, 30, 54, 21, 61, 19, 33, 14, 29, 43, 11, 34, 45, 7, 21, 10, 56, 36, 6, 38, 11, 58, 42, 2, 47, 11, 60, 50, 16, 41, 28, 38, 23, 47, 17, 35, 63, 22, 33, 42, 5, 45, 17, 53, 35, 25, 56, 33, 6, 51, 19, 60, 23, 43, 15, 5, 40, 58, 13, 51, 1, 45, 11, 54, 3, 43, 8, 37, 48, 59, 29, 39, 21, 61, 43, 3, 31, 10, 44, 24, 29, 60, 12, 28, 40, 11, 25, 43, 52, 14, 41, 16, 57, 44, 20, 40, 55, 12, 21, 57, 27, 35, 2 }, | ||
81 | { 37, 6, 31, 42, 40, 4, 29, 50, 0, 20, 63, 28, 9, 58, 14, 24, 63, 26, 48, 16, 34, 4, 32, 38, 23, 11, 58, 4, 37, 9, 45, 5, 63, 48, 26, 57, 2, 28, 32, 51, 46, 29, 13, 62, 27, 46, 28, 18, 50, 15, 40, 4, 19, 34, 54, 0, 53, 9, 26, 58, 28, 5, 49, 0, 57, 27, 19, 60, 29, 8, 59, 12, 37, 63, 24, 46, 3, 37, 6, 52, 26, 32, 20, 36, 9, 22, 59, 18, 35, 51, 14, 57, 17, 24, 12, 44, 56, 0, 30, 13, 59, 20, 49, 17, 54, 43, 6, 34, 46, 17, 58, 36, 0, 34, 29, 54, 25, 2, 36, 15, 60, 6, 37, 46, 4, 50, 9, 45 }, | ||
82 | { 19, 59, 48, 3, 24, 60, 44, 22, 34, 51, 15, 45, 41, 5, 33, 47, 0, 37, 12, 55, 25, 54, 8, 57, 0, 47, 18, 34, 49, 15, 55, 24, 40, 20, 8, 35, 53, 13, 41, 18, 0, 59, 22, 33, 4, 52, 8, 60, 24, 36, 31, 56, 45, 26, 10, 43, 15, 56, 36, 4, 51, 14, 39, 30, 12, 55, 36, 2, 39, 49, 4, 44, 17, 0, 32, 13, 53, 35, 59, 17, 62, 0, 55, 24, 52, 38, 31, 6, 42, 19, 29, 40, 4, 54, 33, 5, 16, 27, 52, 37, 23, 55, 7, 37, 0, 39, 23, 49, 4, 53, 31, 15, 59, 10, 50, 4, 60, 34, 48, 7, 31, 49, 27, 14, 62, 22, 53, 29 }, | ||
83 | { 46, 21, 14, 51, 36, 17, 7, 57, 10, 32, 3, 37, 22, 60, 39, 18, 56, 20, 42, 3, 36, 10, 44, 26, 41, 29, 53, 27, 2, 39, 30, 52, 0, 59, 15, 48, 23, 61, 6, 58, 37, 12, 40, 49, 16, 39, 20, 44, 0, 62, 8, 21, 3, 59, 23, 32, 49, 31, 12, 44, 22, 59, 18, 50, 24, 7, 43, 52, 15, 23, 41, 26, 51, 28, 55, 39, 21, 27, 10, 42, 12, 45, 27, 47, 3, 15, 63, 26, 55, 0, 60, 26, 45, 18, 62, 38, 58, 49, 8, 47, 4, 33, 46, 29, 57, 13, 56, 16, 59, 21, 5, 47, 23, 39, 18, 44, 13, 22, 28, 53, 19, 0, 58, 32, 41, 7, 26, 13 }, | ||
84 | { 0, 56, 34, 28, 11, 55, 31, 47, 26, 41, 56, 13, 53, 28, 11, 49, 7, 52, 32, 61, 50, 22, 63, 17, 13, 56, 7, 19, 43, 62, 10, 21, 37, 32, 43, 4, 38, 19, 44, 25, 31, 54, 5, 23, 61, 30, 53, 12, 35, 22, 43, 53, 37, 48, 7, 62, 20, 2, 61, 41, 8, 34, 47, 9, 63, 34, 28, 10, 55, 33, 14, 57, 7, 47, 9, 61, 4, 49, 31, 50, 21, 38, 8, 16, 57, 44, 33, 5, 49, 36, 12, 50, 7, 34, 10, 25, 2, 22, 36, 15, 26, 61, 18, 9, 22, 46, 32, 8, 27, 37, 44, 30, 55, 3, 62, 24, 38, 56, 5, 45, 38, 24, 43, 10, 19, 54, 39, 61 }, | ||
85 | { 41, 30, 8, 63, 43, 23, 38, 3, 62, 19, 8, 49, 25, 1, 58, 30, 23, 40, 9, 28, 18, 40, 6, 38, 49, 22, 35, 59, 8, 27, 50, 5, 56, 17, 11, 50, 30, 9, 55, 2, 51, 19, 34, 47, 9, 41, 6, 26, 48, 57, 14, 28, 17, 12, 39, 13, 37, 46, 25, 19, 54, 27, 1, 37, 16, 45, 20, 60, 1, 48, 20, 38, 31, 22, 42, 15, 19, 44, 1, 61, 6, 34, 56, 40, 29, 10, 20, 46, 13, 22, 41, 23, 59, 42, 30, 51, 45, 13, 63, 53, 42, 12, 51, 38, 62, 2, 26, 41, 50, 1, 61, 10, 19, 42, 31, 8, 49, 32, 12, 63, 9, 52, 16, 56, 36, 2, 31, 16 }, | ||
86 | { 52, 5, 47, 20, 1, 53, 12, 50, 16, 35, 43, 21, 33, 43, 16, 44, 3, 59, 14, 46, 1, 30, 60, 33, 2, 45, 12, 42, 31, 47, 14, 33, 46, 25, 55, 27, 60, 36, 16, 42, 14, 46, 26, 1, 55, 15, 63, 32, 2, 38, 5, 47, 33, 61, 30, 52, 4, 57, 6, 38, 11, 43, 61, 24, 52, 3, 31, 22, 42, 10, 62, 3, 59, 11, 35, 57, 33, 54, 24, 14, 29, 48, 18, 2, 60, 41, 53, 24, 32, 62, 3, 53, 15, 1, 55, 17, 32, 40, 6, 31, 1, 40, 28, 5, 35, 52, 19, 63, 13, 33, 17, 41, 52, 26, 15, 57, 1, 20, 42, 17, 35, 27, 48, 5, 25, 50, 44, 11 }, | ||
87 | { 35, 25, 38, 57, 33, 17, 40, 6, 59, 27, 54, 5, 61, 10, 52, 26, 36, 19, 51, 35, 57, 48, 11, 20, 54, 25, 61, 16, 1, 58, 24, 61, 3, 39, 7, 47, 1, 22, 49, 28, 63, 10, 58, 32, 17, 36, 45, 19, 51, 29, 59, 10, 50, 1, 23, 42, 18, 29, 51, 21, 56, 32, 14, 5, 40, 58, 47, 13, 54, 35, 29, 45, 18, 52, 26, 2, 38, 8, 46, 36, 58, 11, 52, 35, 17, 28, 1, 58, 9, 39, 17, 28, 37, 48, 20, 9, 57, 24, 50, 19, 58, 16, 48, 25, 43, 11, 35, 6, 45, 24, 56, 4, 36, 7, 47, 35, 52, 28, 59, 30, 2, 61, 21, 33, 63, 12, 18, 59 }, | ||
88 | { 3, 49, 15, 10, 27, 61, 25, 45, 30, 0, 14, 47, 31, 38, 17, 62, 7, 55, 27, 4, 15, 24, 42, 52, 10, 34, 5, 51, 36, 18, 41, 11, 35, 21, 62, 13, 33, 57, 8, 35, 5, 40, 21, 43, 52, 3, 24, 56, 11, 16, 33, 25, 41, 20, 55, 8, 60, 35, 15, 48, 2, 57, 30, 49, 18, 25, 6, 39, 17, 57, 7, 25, 43, 5, 49, 16, 62, 22, 55, 4, 25, 43, 23, 7, 50, 11, 37, 48, 14, 51, 33, 57, 7, 27, 39, 46, 4, 29, 11, 43, 34, 56, 7, 60, 20, 54, 30, 57, 22, 49, 9, 33, 54, 14, 63, 23, 6, 43, 10, 40, 50, 13, 44, 8, 38, 33, 46, 23 }, | ||
89 | { 55, 39, 22, 50, 44, 4, 36, 9, 52, 23, 37, 59, 21, 2, 46, 13, 31, 41, 11, 45, 62, 29, 6, 37, 19, 48, 30, 23, 44, 7, 53, 28, 54, 16, 41, 29, 44, 18, 52, 24, 60, 15, 48, 7, 27, 59, 9, 34, 42, 54, 7, 63, 4, 46, 31, 27, 45, 0, 40, 26, 34, 17, 37, 10, 53, 29, 36, 50, 2, 27, 51, 11, 61, 37, 23, 41, 30, 7, 18, 50, 39, 14, 63, 32, 45, 61, 19, 30, 25, 44, 2, 47, 23, 63, 11, 34, 59, 37, 60, 3, 22, 14, 44, 30, 15, 0, 47, 15, 3, 38, 61, 20, 27, 45, 11, 39, 51, 16, 55, 3, 22, 54, 29, 58, 1, 57, 6, 29 }, | ||
90 | { 9, 17, 60, 2, 34, 56, 20, 62, 39, 12, 49, 6, 29, 56, 34, 48, 0, 58, 22, 38, 18, 43, 56, 0, 63, 14, 55, 3, 59, 31, 15, 45, 0, 49, 6, 58, 3, 38, 12, 45, 0, 37, 29, 57, 13, 39, 30, 49, 0, 23, 44, 36, 16, 57, 13, 54, 11, 24, 63, 9, 53, 7, 62, 42, 0, 59, 15, 23, 63, 34, 40, 16, 32, 0, 53, 12, 48, 28, 59, 33, 0, 53, 9, 27, 3, 22, 54, 5, 56, 9, 61, 13, 42, 14, 52, 19, 0, 21, 47, 27, 53, 36, 3, 50, 39, 58, 25, 40, 53, 28, 12, 50, 0, 59, 32, 2, 21, 34, 26, 46, 37, 7, 18, 47, 24, 14, 53, 42 }, | ||
91 | { 61, 32, 13, 54, 29, 7, 46, 13, 28, 57, 18, 41, 53, 15, 9, 39, 24, 49, 33, 3, 53, 9, 26, 32, 40, 28, 46, 39, 25, 9, 56, 21, 63, 37, 26, 22, 51, 27, 17, 56, 31, 53, 4, 43, 22, 46, 12, 18, 60, 40, 20, 26, 50, 21, 39, 5, 49, 33, 16, 44, 22, 46, 20, 32, 24, 45, 8, 43, 12, 46, 4, 48, 56, 20, 29, 58, 3, 40, 10, 42, 31, 21, 47, 41, 56, 38, 15, 42, 36, 27, 20, 33, 55, 3, 26, 44, 31, 54, 12, 35, 9, 63, 28, 10, 21, 32, 9, 60, 17, 8, 43, 29, 40, 16, 36, 48, 60, 7, 57, 14, 62, 31, 42, 15, 36, 40, 20, 26 }, | ||
92 | { 0, 37, 47, 23, 41, 18, 32, 48, 1, 35, 8, 25, 4, 26, 63, 20, 54, 8, 16, 61, 35, 23, 51, 15, 58, 7, 12, 20, 50, 34, 42, 4, 38, 10, 32, 47, 8, 60, 41, 20, 9, 25, 50, 19, 62, 1, 37, 56, 28, 8, 53, 11, 3, 58, 34, 43, 19, 60, 38, 4, 58, 31, 3, 51, 11, 55, 38, 30, 21, 58, 19, 26, 9, 44, 36, 13, 46, 20, 62, 24, 13, 60, 5, 28, 12, 34, 7, 59, 0, 53, 45, 6, 38, 30, 50, 7, 62, 16, 41, 5, 46, 18, 55, 42, 51, 5, 45, 23, 34, 48, 19, 58, 5, 25, 54, 19, 13, 41, 28, 21, 0, 49, 10, 60, 4, 51, 9, 45 }, | ||
93 | { 19, 28, 6, 58, 10, 51, 4, 22, 55, 42, 60, 45, 34, 51, 42, 5, 30, 45, 27, 40, 13, 47, 4, 49, 21, 38, 60, 29, 2, 57, 17, 27, 52, 19, 61, 14, 30, 34, 2, 44, 63, 33, 11, 35, 16, 51, 25, 6, 14, 47, 31, 61, 37, 29, 18, 8, 52, 2, 28, 54, 13, 41, 15, 62, 35, 18, 2, 60, 6, 33, 41, 61, 31, 6, 56, 17, 34, 50, 6, 52, 44, 35, 16, 51, 59, 24, 48, 18, 31, 40, 16, 49, 21, 60, 17, 39, 10, 49, 32, 57, 24, 39, 1, 25, 18, 62, 37, 12, 56, 1, 37, 11, 52, 44, 9, 30, 47, 4, 51, 40, 55, 25, 34, 27, 56, 30, 32, 54 }, | ||
94 | { 63, 40, 49, 15, 43, 26, 63, 38, 16, 20, 30, 12, 57, 14, 19, 60, 36, 12, 59, 2, 57, 17, 42, 31, 1, 44, 16, 35, 47, 11, 32, 48, 13, 43, 1, 39, 51, 12, 57, 23, 6, 40, 53, 3, 55, 31, 39, 60, 35, 44, 5, 15, 45, 1, 62, 41, 26, 14, 47, 22, 36, 27, 50, 9, 26, 47, 52, 28, 54, 16, 1, 13, 51, 39, 23, 63, 1, 30, 15, 26, 2, 57, 19, 37, 1, 44, 21, 50, 13, 63, 8, 24, 56, 1, 35, 25, 58, 20, 2, 28, 14, 51, 33, 59, 13, 30, 4, 49, 31, 24, 63, 26, 33, 3, 58, 38, 62, 24, 32, 8, 17, 45, 5, 48, 18, 3, 43, 11 }, | ||
95 | { 21, 4, 24, 34, 59, 1, 37, 11, 53, 5, 47, 2, 22, 40, 32, 1, 24, 50, 21, 29, 38, 25, 63, 8, 55, 24, 53, 6, 62, 23, 59, 3, 54, 20, 58, 24, 5, 46, 15, 38, 48, 14, 27, 42, 23, 7, 46, 10, 17, 58, 25, 52, 23, 32, 49, 12, 55, 30, 40, 7, 59, 1, 56, 21, 39, 4, 23, 15, 37, 46, 55, 42, 21, 4, 48, 8, 45, 54, 37, 55, 32, 8, 46, 10, 30, 54, 4, 41, 25, 29, 36, 48, 11, 43, 14, 47, 5, 43, 53, 36, 61, 10, 45, 6, 41, 54, 27, 43, 16, 55, 6, 46, 18, 42, 23, 15, 1, 45, 12, 60, 37, 22, 62, 12, 39, 59, 16, 52 }, | ||
96 | { 47, 35, 56, 7, 19, 46, 31, 50, 33, 24, 61, 35, 50, 7, 53, 44, 55, 6, 46, 10, 52, 5, 21, 43, 36, 10, 18, 41, 26, 37, 8, 29, 40, 36, 9, 49, 34, 26, 61, 21, 7, 59, 18, 62, 29, 54, 20, 32, 51, 0, 40, 10, 55, 6, 20, 36, 9, 61, 5, 51, 44, 19, 33, 43, 13, 57, 40, 63, 8, 24, 29, 10, 60, 34, 27, 40, 25, 18, 10, 42, 21, 49, 26, 62, 38, 12, 33, 61, 5, 57, 2, 19, 54, 28, 62, 22, 38, 31, 16, 7, 22, 47, 29, 17, 35, 8, 20, 51, 2, 40, 22, 50, 13, 61, 28, 53, 35, 20, 56, 30, 2, 53, 14, 41, 23, 34, 8, 31 }, | ||
97 | { 12, 2, 42, 29, 52, 13, 21, 8, 55, 14, 41, 17, 28, 58, 23, 11, 17, 36, 31, 62, 17, 34, 50, 14, 28, 61, 33, 52, 2, 51, 17, 45, 7, 25, 62, 30, 18, 55, 0, 42, 30, 35, 45, 1, 12, 48, 3, 63, 21, 36, 30, 48, 19, 59, 43, 27, 46, 17, 34, 25, 12, 29, 53, 6, 48, 31, 11, 34, 49, 3, 36, 50, 19, 47, 14, 61, 11, 36, 58, 4, 60, 14, 39, 22, 6, 52, 15, 35, 17, 46, 31, 42, 9, 34, 3, 52, 12, 60, 26, 56, 40, 2, 53, 23, 57, 38, 62, 14, 36, 59, 10, 31, 39, 6, 49, 9, 41, 26, 5, 48, 43, 27, 33, 58, 1, 50, 25, 57 }, | ||
98 | { 61, 37, 15, 61, 3, 39, 58, 43, 26, 0, 44, 10, 47, 3, 37, 63, 28, 43, 13, 39, 3, 57, 30, 59, 0, 48, 5, 43, 13, 22, 60, 33, 55, 15, 42, 4, 52, 10, 45, 13, 54, 4, 24, 49, 37, 26, 41, 14, 42, 9, 61, 13, 38, 23, 3, 53, 0, 58, 21, 42, 63, 10, 17, 61, 25, 0, 58, 28, 17, 44, 57, 12, 27, 0, 55, 5, 52, 28, 23, 47, 29, 0, 43, 17, 58, 28, 47, 23, 55, 10, 58, 23, 51, 40, 18, 33, 45, 0, 49, 8, 32, 61, 19, 48, 0, 26, 7, 47, 29, 18, 44, 0, 56, 34, 20, 59, 15, 51, 37, 18, 10, 52, 7, 20, 46, 9, 38, 17 }, | ||
99 | { 6, 27, 48, 23, 45, 29, 5, 18, 38, 62, 27, 56, 20, 32, 15, 9, 48, 0, 54, 22, 45, 20, 7, 41, 23, 39, 19, 27, 58, 31, 44, 0, 12, 50, 23, 56, 20, 39, 32, 59, 16, 52, 33, 9, 57, 22, 6, 58, 28, 50, 24, 2, 56, 35, 16, 45, 32, 38, 15, 54, 2, 38, 46, 22, 35, 45, 20, 5, 52, 25, 7, 35, 59, 32, 22, 43, 38, 3, 51, 16, 34, 53, 32, 50, 3, 40, 8, 43, 0, 39, 27, 4, 14, 61, 8, 55, 15, 41, 20, 44, 27, 13, 39, 11, 46, 42, 54, 33, 4, 52, 23, 61, 14, 25, 43, 2, 33, 11, 63, 29, 61, 17, 40, 55, 22, 62, 28, 44 }, | ||
100 | { 20, 54, 8, 56, 35, 10, 63, 31, 52, 12, 48, 6, 59, 41, 52, 33, 19, 58, 25, 49, 11, 37, 47, 12, 54, 15, 56, 35, 7, 47, 16, 53, 28, 34, 5, 37, 28, 8, 48, 3, 28, 38, 18, 61, 16, 43, 53, 32, 4, 17, 47, 27, 44, 8, 63, 10, 25, 49, 6, 37, 24, 52, 32, 3, 50, 12, 41, 56, 38, 14, 62, 20, 40, 16, 53, 31, 18, 63, 41, 9, 59, 7, 13, 25, 57, 20, 63, 26, 53, 18, 48, 62, 30, 46, 21, 25, 58, 29, 36, 4, 55, 34, 6, 60, 31, 16, 21, 12, 58, 38, 9, 29, 47, 7, 52, 30, 57, 44, 22, 0, 35, 45, 3, 31, 14, 36, 0, 51 }, | ||
101 | { 42, 14, 33, 24, 16, 49, 40, 2, 22, 33, 16, 36, 25, 1, 21, 61, 38, 8, 33, 4, 62, 26, 29, 60, 6, 46, 30, 11, 63, 4, 36, 40, 19, 57, 46, 11, 41, 63, 22, 25, 58, 10, 46, 2, 34, 27, 11, 38, 56, 34, 12, 53, 18, 33, 41, 51, 13, 28, 60, 20, 47, 14, 29, 59, 16, 62, 8, 22, 32, 47, 9, 49, 2, 44, 7, 12, 45, 6, 20, 27, 45, 24, 62, 42, 36, 11, 33, 15, 37, 7, 32, 10, 37, 1, 35, 50, 6, 11, 63, 24, 52, 15, 50, 24, 3, 37, 56, 27, 34, 22, 49, 16, 36, 62, 17, 39, 4, 15, 54, 24, 50, 8, 58, 26, 49, 54, 11, 30 }, | ||
102 | { 4, 59, 41, 1, 53, 12, 25, 45, 59, 7, 51, 39, 54, 14, 46, 4, 27, 53, 16, 44, 18, 51, 1, 32, 25, 2, 50, 40, 20, 54, 24, 9, 62, 2, 27, 60, 1, 17, 36, 50, 6, 40, 30, 55, 41, 19, 49, 1, 21, 60, 40, 5, 62, 1, 22, 30, 57, 4, 43, 31, 1, 55, 40, 7, 27, 37, 30, 54, 1, 19, 42, 30, 56, 26, 62, 49, 24, 57, 37, 56, 2, 39, 16, 5, 30, 55, 3, 49, 60, 23, 56, 44, 17, 52, 13, 42, 28, 48, 18, 45, 9, 37, 21, 41, 58, 10, 48, 1, 63, 5, 41, 57, 2, 24, 12, 48, 27, 42, 32, 46, 13, 38, 19, 34, 5, 41, 25, 60 }, | ||
103 | { 39, 28, 21, 46, 32, 57, 36, 9, 19, 42, 4, 29, 11, 43, 30, 49, 13, 42, 35, 56, 9, 39, 15, 52, 36, 61, 18, 26, 45, 14, 31, 48, 21, 43, 14, 33, 49, 54, 14, 44, 21, 62, 13, 23, 8, 62, 15, 51, 44, 7, 30, 37, 20, 42, 56, 7, 39, 18, 50, 11, 61, 9, 19, 43, 57, 2, 48, 11, 39, 60, 28, 4, 37, 17, 35, 1, 33, 11, 31, 14, 48, 19, 35, 51, 46, 21, 44, 29, 12, 41, 2, 22, 58, 26, 54, 4, 59, 38, 2, 33, 57, 1, 63, 13, 28, 51, 15, 40, 18, 45, 8, 30, 43, 37, 54, 19, 8, 59, 21, 6, 60, 29, 55, 10, 63, 15, 47, 17 }, | ||
104 | { 3, 50, 10, 62, 18, 5, 27, 49, 60, 23, 55, 18, 62, 24, 56, 10, 59, 28, 2, 23, 34, 59, 43, 20, 10, 42, 8, 49, 1, 37, 57, 6, 51, 29, 53, 7, 23, 31, 5, 32, 51, 0, 35, 54, 45, 31, 5, 26, 36, 24, 55, 15, 48, 29, 14, 48, 26, 60, 21, 41, 36, 26, 50, 33, 14, 44, 17, 24, 52, 15, 46, 23, 54, 6, 47, 21, 60, 50, 4, 53, 29, 61, 8, 23, 1, 60, 19, 6, 53, 16, 47, 34, 6, 39, 16, 31, 12, 20, 53, 22, 30, 43, 25, 46, 35, 6, 44, 32, 53, 26, 55, 19, 11, 59, 5, 33, 51, 1, 35, 53, 25, 3, 42, 23, 44, 32, 7, 53 }, | ||
105 | { 22, 44, 37, 6, 26, 51, 38, 0, 34, 13, 31, 46, 3, 37, 6, 19, 40, 21, 47, 63, 12, 5, 29, 55, 22, 58, 34, 28, 60, 22, 11, 41, 17, 38, 9, 44, 59, 39, 56, 19, 11, 47, 25, 15, 3, 39, 57, 17, 61, 11, 46, 3, 58, 9, 54, 35, 2, 34, 8, 45, 15, 56, 5, 23, 53, 33, 63, 35, 4, 59, 10, 51, 13, 61, 29, 41, 15, 25, 43, 19, 40, 10, 54, 33, 41, 12, 38, 51, 31, 26, 61, 9, 30, 45, 24, 62, 49, 40, 10, 61, 14, 49, 5, 17, 54, 20, 60, 23, 3, 13, 35, 50, 32, 23, 46, 27, 38, 63, 16, 12, 39, 48, 18, 51, 1, 27, 56, 35 }, | ||
106 | { 63, 15, 30, 55, 43, 14, 57, 17, 53, 44, 7, 48, 26, 50, 32, 60, 0, 53, 14, 31, 50, 24, 46, 0, 38, 13, 4, 52, 16, 45, 30, 59, 0, 25, 55, 35, 16, 10, 26, 42, 58, 29, 60, 38, 50, 22, 28, 47, 0, 50, 28, 19, 33, 39, 11, 44, 16, 52, 24, 59, 3, 38, 27, 51, 0, 21, 7, 42, 26, 34, 21, 40, 33, 18, 39, 3, 54, 38, 8, 59, 0, 44, 27, 15, 58, 28, 57, 9, 43, 0, 36, 50, 20, 59, 8, 34, 0, 27, 47, 7, 36, 19, 56, 32, 0, 38, 11, 29, 62, 47, 6, 61, 0, 41, 14, 56, 10, 23, 45, 31, 57, 8, 36, 13, 58, 38, 11, 19 }, | ||
107 | { 0, 34, 12, 47, 21, 2, 40, 30, 11, 25, 61, 20, 40, 15, 35, 22, 45, 36, 7, 41, 17, 57, 9, 48, 32, 62, 44, 24, 35, 3, 54, 13, 33, 63, 19, 4, 48, 22, 62, 2, 37, 8, 33, 6, 20, 52, 9, 32, 43, 13, 39, 63, 25, 4, 49, 23, 62, 32, 9, 30, 48, 18, 63, 12, 46, 29, 58, 13, 48, 8, 57, 31, 0, 51, 9, 58, 12, 22, 47, 29, 35, 22, 49, 5, 46, 4, 34, 20, 63, 24, 56, 11, 41, 3, 51, 19, 56, 35, 17, 58, 28, 42, 9, 45, 59, 26, 51, 42, 17, 36, 25, 15, 53, 21, 44, 3, 30, 55, 5, 50, 21, 28, 61, 32, 6, 49, 28, 46 }, | ||
108 | { 58, 42, 60, 4, 31, 59, 22, 63, 35, 38, 9, 54, 1, 57, 8, 51, 16, 58, 27, 53, 3, 38, 30, 15, 27, 6, 19, 56, 10, 50, 21, 36, 47, 5, 43, 28, 51, 32, 13, 46, 18, 54, 16, 43, 63, 12, 36, 59, 22, 34, 5, 52, 17, 59, 27, 41, 0, 19, 55, 37, 13, 43, 6, 34, 41, 10, 36, 55, 19, 44, 3, 16, 58, 27, 49, 25, 32, 62, 17, 55, 13, 63, 18, 52, 25, 37, 17, 48, 13, 32, 5, 46, 28, 37, 14, 43, 25, 5, 51, 39, 3, 52, 33, 22, 8, 40, 12, 4, 57, 9, 46, 39, 28, 58, 13, 62, 17, 42, 19, 36, 0, 47, 16, 43, 24, 21, 54, 13 }, | ||
109 | { 25, 9, 23, 50, 36, 8, 45, 14, 3, 51, 16, 28, 44, 12, 42, 29, 4, 26, 10, 47, 22, 61, 18, 54, 51, 39, 46, 13, 41, 26, 58, 7, 18, 39, 12, 57, 15, 1, 52, 27, 41, 23, 48, 1, 27, 45, 18, 2, 57, 26, 55, 8, 43, 31, 6, 58, 14, 51, 40, 5, 61, 31, 24, 54, 17, 60, 22, 1, 39, 30, 53, 45, 36, 13, 43, 5, 45, 2, 37, 6, 34, 42, 2, 39, 10, 62, 7, 54, 40, 18, 60, 15, 52, 21, 63, 8, 55, 46, 15, 30, 23, 13, 62, 16, 50, 24, 58, 31, 48, 21, 34, 2, 49, 7, 31, 37, 26, 48, 9, 61, 40, 11, 52, 2, 60, 40, 4, 37 }, | ||
110 | { 52, 28, 39, 16, 54, 19, 29, 55, 42, 20, 58, 33, 24, 63, 18, 55, 39, 62, 43, 34, 12, 40, 6, 35, 2, 25, 8, 62, 34, 1, 31, 42, 61, 27, 53, 24, 40, 61, 34, 8, 59, 4, 30, 56, 40, 6, 53, 42, 10, 48, 16, 37, 12, 46, 21, 36, 47, 11, 28, 45, 22, 10, 57, 2, 49, 31, 14, 44, 61, 11, 25, 6, 23, 63, 18, 36, 28, 56, 20, 51, 11, 48, 27, 56, 32, 22, 45, 30, 2, 42, 27, 39, 1, 44, 23, 31, 38, 22, 11, 61, 43, 54, 4, 47, 35, 2, 44, 16, 28, 54, 12, 62, 18, 43, 10, 52, 1, 58, 33, 15, 29, 56, 20, 34, 9, 30, 48, 17 }, | ||
111 | { 46, 2, 56, 11, 41, 1, 49, 6, 27, 47, 2, 48, 5, 32, 37, 3, 13, 19, 32, 1, 55, 28, 60, 17, 43, 59, 32, 20, 49, 16, 55, 23, 14, 46, 2, 36, 6, 30, 20, 49, 12, 47, 35, 14, 21, 60, 29, 14, 35, 24, 46, 1, 56, 29, 53, 8, 33, 23, 56, 1, 35, 46, 20, 39, 26, 4, 53, 28, 17, 38, 60, 34, 48, 9, 55, 15, 46, 7, 41, 31, 60, 24, 16, 36, 1, 59, 19, 52, 35, 6, 55, 11, 59, 33, 7, 57, 4, 29, 48, 1, 19, 26, 37, 30, 18, 63, 37, 6, 59, 1, 40, 24, 56, 33, 46, 22, 35, 7, 24, 53, 39, 5, 26, 45, 55, 18, 62, 7 }, | ||
112 | { 20, 60, 29, 34, 20, 62, 33, 52, 10, 36, 13, 60, 41, 21, 50, 27, 56, 49, 8, 51, 21, 45, 11, 48, 8, 23, 53, 3, 29, 44, 5, 52, 9, 32, 50, 17, 43, 56, 3, 38, 24, 10, 62, 25, 51, 9, 33, 49, 61, 7, 30, 62, 22, 19, 2, 42, 63, 5, 49, 18, 60, 15, 52, 7, 43, 56, 23, 50, 5, 50, 2, 20, 41, 30, 1, 52, 22, 61, 14, 26, 3, 43, 53, 7, 47, 28, 11, 14, 23, 58, 33, 25, 47, 13, 50, 17, 40, 54, 34, 60, 41, 6, 59, 14, 50, 7, 25, 55, 20, 42, 51, 8, 27, 4, 16, 60, 28, 50, 44, 3, 22, 49, 63, 12, 33, 1, 43, 31 }, | ||
113 | { 36, 5, 46, 8, 44, 24, 13, 39, 25, 57, 31, 18, 8, 52, 10, 45, 6, 30, 36, 24, 63, 4, 33, 26, 57, 40, 15, 56, 37, 12, 40, 25, 37, 58, 11, 63, 21, 45, 16, 60, 31, 53, 18, 33, 3, 45, 23, 0, 20, 54, 40, 15, 50, 38, 60, 16, 25, 42, 29, 38, 7, 41, 25, 62, 18, 33, 8, 35, 42, 16, 32, 56, 12, 39, 59, 19, 34, 9, 49, 38, 57, 12, 21, 50, 14, 40, 61, 44, 50, 9, 49, 19, 3, 29, 35, 62, 12, 24, 7, 18, 52, 32, 10, 46, 21, 41, 32, 11, 36, 29, 14, 34, 60, 38, 54, 11, 41, 14, 19, 57, 32, 16, 7, 41, 51, 25, 14, 57 }, | ||
114 | { 53, 18, 26, 50, 15, 58, 4, 63, 17, 43, 7, 40, 61, 35, 15, 41, 23, 60, 16, 38, 14, 42, 19, 50, 0, 31, 10, 46, 27, 63, 18, 60, 0, 20, 29, 39, 8, 26, 37, 5, 42, 0, 44, 39, 57, 17, 58, 41, 28, 37, 4, 32, 9, 44, 12, 31, 54, 10, 59, 14, 27, 53, 12, 36, 0, 47, 13, 63, 21, 58, 10, 24, 50, 27, 4, 26, 44, 53, 31, 0, 18, 42, 29, 33, 57, 4, 32, 26, 0, 38, 16, 61, 41, 53, 20, 0, 42, 44, 49, 27, 10, 56, 39, 0, 57, 15, 53, 49, 3, 61, 22, 47, 17, 5, 49, 26, 2, 63, 39, 10, 47, 27, 37, 23, 4, 59, 38, 10 }, | ||
115 | { 23, 39, 61, 3, 37, 28, 48, 31, 0, 34, 51, 23, 2, 26, 58, 0, 53, 11, 46, 1, 57, 29, 52, 14, 37, 61, 21, 35, 2, 49, 7, 34, 47, 55, 4, 33, 54, 13, 58, 52, 19, 50, 22, 7, 13, 29, 36, 11, 51, 17, 60, 25, 55, 4, 34, 51, 0, 35, 20, 48, 32, 3, 51, 30, 59, 28, 40, 3, 46, 29, 54, 43, 7, 62, 47, 11, 39, 4, 23, 46, 55, 8, 63, 5, 25, 37, 18, 46, 21, 56, 31, 5, 36, 8, 45, 58, 26, 15, 2, 36, 47, 21, 29, 44, 25, 34, 3, 27, 43, 10, 52, 0, 45, 30, 24, 36, 43, 18, 34, 59, 0, 52, 61, 15, 44, 19, 30, 49 }, | ||
116 | { 0, 27, 12, 43, 54, 9, 22, 53, 21, 46, 15, 55, 29, 47, 20, 33, 39, 28, 59, 35, 9, 44, 5, 24, 47, 7, 52, 17, 56, 22, 30, 42, 14, 26, 45, 18, 49, 1, 24, 34, 11, 27, 55, 32, 61, 47, 2, 56, 6, 44, 13, 47, 36, 27, 58, 22, 16, 47, 40, 4, 57, 38, 21, 45, 16, 9, 56, 26, 11, 38, 0, 22, 36, 17, 33, 57, 16, 30, 62, 15, 35, 40, 20, 45, 59, 10, 54, 8, 63, 13, 52, 27, 22, 57, 28, 12, 32, 51, 55, 22, 63, 4, 16, 54, 12, 62, 45, 19, 58, 13, 32, 40, 20, 56, 7, 57, 9, 54, 6, 29, 42, 21, 8, 55, 35, 47, 6, 41 }, | ||
117 | { 56, 33, 58, 32, 19, 35, 42, 6, 59, 11, 38, 5, 49, 12, 62, 7, 52, 17, 5, 25, 54, 20, 61, 31, 54, 27, 41, 11, 44, 5, 59, 12, 36, 51, 10, 61, 28, 41, 48, 9, 43, 63, 5, 40, 20, 8, 49, 26, 34, 21, 58, 1, 18, 45, 7, 39, 61, 26, 8, 50, 23, 10, 63, 5, 55, 37, 19, 49, 52, 15, 59, 47, 13, 54, 1, 25, 42, 58, 10, 48, 3, 27, 50, 1, 17, 48, 34, 41, 16, 40, 2, 45, 10, 39, 17, 61, 5, 38, 19, 9, 41, 31, 60, 38, 5, 23, 36, 8, 30, 55, 24, 63, 12, 48, 14, 51, 31, 20, 45, 25, 12, 50, 32, 2, 28, 11, 62, 14 }, | ||
118 | { 44, 16, 7, 48, 1, 62, 16, 50, 27, 33, 61, 25, 17, 44, 31, 14, 22, 43, 32, 48, 18, 40, 8, 36, 3, 16, 33, 62, 23, 38, 25, 53, 2, 21, 41, 6, 22, 15, 59, 29, 16, 37, 26, 15, 52, 42, 23, 15, 54, 39, 10, 30, 53, 11, 49, 24, 2, 43, 55, 17, 34, 44, 15, 31, 24, 44, 2, 32, 7, 35, 25, 5, 40, 45, 29, 51, 6, 21, 37, 52, 24, 60, 13, 31, 53, 23, 2, 28, 49, 24, 31, 60, 20, 51, 1, 34, 48, 14, 59, 33, 50, 1, 18, 33, 48, 60, 17, 51, 39, 6, 38, 2, 35, 29, 40, 23, 1, 62, 15, 53, 37, 17, 46, 57, 40, 51, 24, 22 }, | ||
119 | { 5, 37, 52, 24, 45, 13, 40, 3, 45, 9, 19, 42, 56, 4, 37, 46, 56, 2, 63, 11, 51, 1, 49, 13, 59, 45, 39, 1, 48, 15, 58, 9, 46, 31, 54, 35, 57, 38, 3, 46, 56, 4, 47, 57, 1, 30, 38, 63, 3, 46, 28, 63, 41, 14, 33, 62, 19, 32, 13, 28, 61, 1, 53, 42, 11, 60, 22, 62, 27, 42, 61, 31, 19, 8, 61, 12, 32, 55, 2, 18, 33, 12, 43, 36, 9, 62, 30, 55, 6, 58, 35, 7, 43, 29, 54, 23, 43, 30, 3, 25, 11, 45, 52, 28, 7, 14, 42, 1, 22, 50, 16, 53, 19, 59, 4, 46, 33, 41, 4, 35, 58, 5, 26, 13, 20, 2, 34, 54 }, | ||
120 | { 30, 63, 21, 10, 26, 55, 29, 59, 23, 39, 53, 1, 36, 24, 59, 27, 10, 34, 23, 38, 30, 60, 22, 42, 28, 19, 9, 57, 30, 19, 43, 33, 13, 63, 3, 19, 11, 50, 31, 20, 14, 34, 10, 35, 17, 59, 7, 31, 19, 25, 50, 5, 20, 57, 29, 6, 52, 41, 4, 46, 20, 37, 26, 17, 49, 6, 39, 18, 53, 14, 3, 49, 57, 23, 34, 48, 14, 41, 28, 38, 56, 6, 58, 25, 39, 19, 43, 15, 37, 11, 47, 18, 53, 4, 37, 9, 62, 21, 53, 40, 57, 24, 13, 40, 56, 26, 47, 31, 59, 25, 45, 27, 10, 43, 21, 61, 13, 27, 48, 9, 23, 43, 31, 62, 38, 59, 9, 47 }, | ||
121 | { 25, 4, 40, 60, 34, 6, 18, 36, 8, 57, 12, 30, 49, 14, 6, 54, 41, 16, 50, 6, 43, 15, 34, 4, 53, 24, 50, 35, 4, 51, 7, 55, 28, 24, 39, 44, 60, 7, 25, 62, 42, 53, 24, 61, 28, 45, 52, 12, 48, 37, 9, 35, 43, 3, 37, 48, 12, 58, 30, 52, 9, 59, 6, 57, 33, 29, 48, 4, 37, 45, 20, 34, 10, 39, 0, 60, 22, 45, 8, 63, 21, 42, 14, 49, 3, 56, 11, 46, 21, 61, 0, 42, 25, 13, 63, 17, 36, 8, 46, 16, 6, 35, 63, 0, 21, 37, 4, 57, 9, 34, 5, 61, 48, 32, 8, 37, 54, 17, 56, 30, 60, 0, 50, 16, 7, 29, 42, 17 }, | ||
122 | { 32, 50, 15, 48, 2, 43, 52, 25, 47, 16, 32, 63, 21, 52, 40, 19, 0, 61, 29, 58, 20, 56, 26, 46, 12, 55, 6, 22, 62, 32, 17, 40, 0, 49, 34, 8, 27, 32, 48, 0, 21, 39, 5, 44, 12, 6, 22, 40, 0, 57, 16, 60, 23, 17, 54, 22, 36, 15, 24, 39, 19, 34, 47, 23, 0, 54, 13, 51, 24, 9, 55, 16, 52, 27, 44, 20, 4, 54, 26, 49, 0, 30, 46, 16, 29, 51, 34, 4, 52, 28, 33, 15, 57, 39, 26, 49, 0, 56, 27, 31, 48, 20, 43, 29, 53, 11, 46, 19, 41, 13, 55, 18, 0, 57, 26, 51, 2, 44, 6, 38, 14, 40, 22, 45, 36, 53, 3, 57 }, | ||
123 | { 44, 12, 37, 28, 22, 57, 11, 38, 0, 51, 9, 41, 4, 29, 11, 47, 33, 45, 12, 26, 3, 36, 9, 63, 31, 16, 38, 44, 14, 47, 25, 61, 20, 58, 15, 47, 17, 57, 13, 36, 9, 51, 18, 29, 50, 36, 54, 20, 61, 27, 32, 13, 53, 44, 9, 27, 0, 63, 45, 2, 56, 10, 14, 43, 41, 28, 58, 11, 35, 60, 30, 41, 6, 63, 11, 51, 37, 32, 15, 10, 35, 53, 5, 61, 22, 7, 26, 59, 23, 9, 44, 48, 21, 3, 51, 32, 24, 41, 12, 61, 2, 55, 9, 15, 35, 58, 28, 15, 62, 30, 37, 23, 42, 29, 11, 17, 35, 24, 63, 20, 52, 28, 8, 55, 11, 23, 47, 19 }, | ||
124 | { 0, 56, 8, 53, 14, 31, 61, 20, 55, 28, 62, 18, 35, 60, 25, 57, 7, 23, 39, 54, 47, 17, 43, 0, 40, 59, 29, 2, 56, 10, 37, 5, 43, 11, 29, 52, 1, 23, 54, 41, 59, 30, 55, 1, 62, 15, 33, 4, 43, 10, 47, 39, 1, 31, 40, 60, 49, 33, 7, 55, 26, 50, 31, 61, 8, 18, 21, 32, 44, 1, 25, 47, 18, 36, 30, 23, 59, 7, 40, 59, 27, 19, 38, 32, 44, 54, 40, 17, 38, 60, 27, 6, 35, 55, 10, 14, 44, 5, 50, 17, 38, 26, 42, 50, 18, 3, 44, 52, 2, 49, 7, 52, 15, 46, 62, 39, 55, 10, 31, 48, 3, 58, 33, 18, 61, 34, 13, 59 }, | ||
125 | { 39, 27, 63, 20, 35, 41, 4, 45, 26, 5, 38, 13, 44, 2, 50, 17, 37, 52, 2, 13, 28, 58, 24, 51, 21, 8, 34, 48, 27, 42, 18, 51, 31, 56, 5, 36, 38, 44, 4, 17, 26, 11, 38, 23, 42, 8, 56, 39, 24, 51, 5, 56, 21, 59, 14, 6, 18, 42, 22, 35, 16, 37, 3, 25, 39, 46, 63, 5, 50, 17, 58, 8, 55, 3, 50, 12, 43, 17, 47, 2, 51, 9, 62, 12, 1, 35, 13, 50, 1, 37, 12, 51, 19, 29, 46, 59, 22, 58, 33, 45, 22, 60, 10, 32, 61, 39, 8, 33, 25, 36, 20, 60, 38, 4, 21, 5, 28, 45, 12, 18, 42, 11, 49, 1, 27, 40, 6, 30 }, | ||
126 | { 24, 16, 42, 1, 50, 10, 48, 17, 33, 43, 24, 48, 21, 55, 31, 42, 10, 21, 63, 35, 49, 6, 33, 13, 41, 53, 10, 20, 60, 6, 53, 26, 12, 41, 22, 60, 14, 28, 63, 33, 49, 3, 45, 16, 48, 26, 14, 46, 18, 30, 35, 26, 8, 50, 29, 51, 25, 57, 12, 47, 53, 9, 62, 20, 54, 2, 36, 15, 40, 28, 33, 13, 38, 24, 46, 1, 29, 56, 33, 20, 44, 24, 41, 26, 57, 20, 63, 8, 30, 55, 5, 41, 62, 8, 34, 2, 37, 10, 19, 6, 37, 1, 53, 23, 5, 27, 58, 22, 43, 12, 50, 26, 9, 34, 54, 32, 49, 1, 59, 37, 22, 46, 25, 36, 51, 15, 54, 46 }, | ||
127 | { 52, 7, 45, 33, 26, 58, 14, 60, 7, 54, 3, 58, 8, 34, 14, 5, 59, 30, 18, 44, 8, 22, 48, 62, 3, 26, 55, 38, 23, 16, 39, 1, 62, 24, 49, 9, 53, 19, 46, 7, 19, 60, 31, 58, 2, 34, 53, 7, 59, 2, 62, 42, 46, 19, 36, 11, 44, 4, 38, 28, 1, 43, 32, 51, 12, 29, 56, 22, 52, 2, 62, 49, 22, 60, 14, 35, 63, 5, 25, 57, 14, 53, 4, 46, 18, 31, 42, 22, 47, 20, 58, 31, 16, 43, 23, 54, 30, 42, 52, 57, 29, 49, 30, 13, 45, 48, 16, 55, 6, 63, 1, 44, 14, 58, 19, 47, 15, 24, 51, 34, 6, 55, 5, 63, 20, 41, 21, 9 }, | ||
128 | { 30, 62, 18, 55, 5, 23, 39, 29, 49, 30, 15, 36, 28, 46, 60, 25, 39, 46, 4, 32, 61, 40, 15, 30, 36, 45, 14, 2, 49, 33, 57, 45, 18, 32, 3, 45, 30, 2, 35, 52, 40, 27, 13, 21, 38, 63, 20, 28, 37, 23, 16, 10, 13, 55, 2, 62, 21, 32, 60, 17, 58, 23, 5, 40, 16, 48, 7, 45, 10, 26, 43, 19, 6, 31, 52, 21, 39, 16, 48, 9, 37, 28, 36, 55, 7, 48, 3, 59, 15, 45, 25, 1, 53, 13, 47, 7, 62, 15, 4, 25, 12, 41, 18, 60, 38, 11, 34, 19, 39, 31, 29, 56, 23, 42, 3, 27, 60, 41, 8, 16, 61, 29, 43, 9, 32, 2, 60, 34 }, | ||
129 | { 3, 38, 13, 37, 52, 44, 2, 19, 12, 42, 63, 19, 40, 1, 20, 50, 12, 55, 15, 56, 27, 1, 54, 11, 57, 18, 32, 63, 44, 4, 29, 13, 37, 61, 35, 16, 42, 57, 12, 22, 6, 55, 43, 10, 50, 5, 44, 11, 48, 52, 34, 58, 28, 41, 38, 30, 7, 52, 11, 49, 30, 14, 45, 27, 59, 34, 21, 38, 32, 58, 11, 36, 56, 42, 9, 41, 3, 54, 31, 42, 0, 60, 16, 11, 39, 24, 52, 33, 6, 36, 10, 40, 32, 60, 26, 20, 39, 28, 47, 34, 63, 8, 54, 3, 24, 56, 0, 51, 13, 47, 16, 40, 7, 35, 52, 11, 36, 4, 57, 30, 39, 13, 18, 50, 58, 28, 12, 48 }, | ||
130 | { 57, 24, 49, 21, 10, 31, 61, 36, 56, 0, 22, 53, 11, 56, 32, 7, 36, 27, 41, 9, 46, 19, 34, 42, 25, 7, 50, 9, 28, 21, 54, 8, 50, 7, 27, 59, 10, 25, 48, 62, 37, 0, 33, 58, 25, 18, 32, 61, 0, 15, 45, 5, 50, 3, 23, 55, 47, 17, 40, 6, 60, 34, 53, 8, 41, 0, 61, 13, 54, 4, 46, 28, 0, 17, 48, 27, 58, 13, 23, 61, 33, 21, 50, 30, 62, 8, 14, 29, 56, 27, 61, 49, 17, 2, 44, 11, 51, 0, 59, 17, 40, 20, 32, 47, 36, 21, 42, 28, 60, 4, 54, 10, 59, 17, 30, 62, 21, 43, 26, 48, 0, 56, 36, 25, 8, 44, 39, 17 }, | ||
131 | { 10, 42, 4, 59, 27, 47, 8, 23, 51, 32, 45, 6, 37, 26, 48, 43, 62, 0, 21, 53, 38, 12, 51, 5, 60, 47, 24, 37, 59, 15, 35, 47, 22, 55, 0, 50, 21, 40, 6, 29, 15, 52, 24, 8, 41, 55, 13, 29, 40, 56, 24, 31, 19, 33, 61, 15, 0, 35, 24, 42, 21, 2, 19, 57, 24, 15, 30, 50, 20, 25, 40, 16, 57, 34, 61, 8, 29, 45, 6, 49, 11, 47, 2, 44, 19, 57, 38, 50, 12, 42, 21, 4, 35, 52, 28, 56, 23, 36, 13, 45, 4, 52, 27, 14, 6, 62, 9, 45, 21, 37, 25, 46, 33, 49, 0, 44, 7, 53, 13, 19, 53, 31, 3, 47, 15, 56, 22, 51 }, | ||
132 | { 35, 28, 53, 32, 1, 16, 54, 40, 9, 17, 25, 58, 14, 59, 3, 22, 16, 51, 31, 5, 23, 58, 28, 17, 35, 20, 0, 42, 11, 52, 3, 31, 41, 17, 43, 13, 32, 54, 18, 60, 32, 45, 17, 49, 2, 36, 51, 22, 7, 36, 9, 63, 48, 12, 46, 26, 43, 28, 63, 13, 48, 37, 51, 33, 5, 47, 55, 9, 42, 63, 7, 51, 24, 12, 37, 19, 55, 34, 18, 38, 15, 28, 54, 34, 5, 43, 22, 0, 48, 14, 54, 24, 58, 9, 38, 5, 32, 55, 21, 30, 49, 9, 59, 43, 30, 51, 35, 26, 7, 53, 2, 22, 14, 27, 57, 18, 38, 24, 33, 45, 10, 41, 20, 60, 37, 5, 32, 0 }, | ||
133 | { 63, 19, 15, 40, 62, 35, 14, 28, 46, 61, 4, 49, 35, 10, 29, 54, 33, 8, 45, 62, 37, 1, 43, 55, 10, 52, 61, 30, 19, 40, 25, 62, 11, 38, 27, 58, 36, 3, 46, 8, 39, 4, 62, 28, 47, 20, 4, 54, 47, 27, 43, 1, 21, 38, 8, 58, 10, 54, 4, 56, 9, 26, 12, 39, 60, 27, 18, 37, 1, 31, 35, 5, 45, 50, 2, 43, 26, 1, 59, 23, 56, 40, 7, 26, 58, 17, 32, 63, 25, 39, 7, 31, 45, 19, 63, 15, 48, 8, 37, 61, 16, 34, 1, 56, 18, 3, 15, 58, 49, 32, 63, 41, 55, 5, 40, 22, 50, 6, 59, 2, 63, 23, 52, 11, 26, 61, 44, 23 }, | ||
134 | { 11, 56, 46, 6, 22, 43, 58, 3, 34, 21, 38, 30, 18, 44, 52, 13, 41, 57, 17, 28, 14, 49, 25, 7, 33, 39, 26, 6, 56, 48, 1, 20, 56, 5, 46, 9, 19, 51, 30, 25, 56, 21, 35, 14, 57, 42, 16, 33, 10, 57, 17, 59, 41, 25, 53, 37, 20, 40, 30, 18, 31, 62, 44, 22, 3, 44, 11, 48, 23, 53, 18, 60, 29, 22, 62, 15, 53, 47, 10, 41, 3, 19, 52, 36, 13, 46, 10, 35, 3, 61, 41, 16, 1, 50, 26, 42, 18, 46, 2, 25, 54, 20, 39, 23, 47, 31, 41, 12, 38, 17, 8, 19, 31, 48, 12, 61, 9, 54, 29, 35, 15, 38, 6, 43, 34, 14, 7, 47 }, | ||
135 | { 39, 2, 33, 26, 53, 8, 18, 50, 41, 12, 53, 1, 63, 24, 19, 39, 2, 24, 47, 10, 60, 38, 19, 63, 48, 4, 15, 45, 32, 14, 60, 36, 29, 53, 23, 63, 34, 12, 61, 1, 43, 11, 53, 30, 1, 26, 60, 45, 23, 39, 3, 29, 12, 50, 4, 16, 51, 3, 45, 36, 50, 1, 16, 54, 35, 14, 57, 30, 58, 9, 46, 14, 41, 10, 32, 38, 4, 30, 21, 51, 32, 63, 25, 1, 60, 27, 53, 18, 51, 22, 28, 55, 34, 12, 40, 3, 60, 29, 57, 41, 6, 44, 11, 53, 8, 61, 24, 57, 1, 28, 44, 59, 36, 3, 34, 25, 41, 31, 16, 44, 22, 47, 28, 58, 1, 49, 54, 29 }, | ||
136 | { 58, 25, 50, 13, 38, 30, 60, 24, 6, 57, 27, 42, 9, 45, 6, 61, 30, 50, 4, 34, 29, 3, 46, 13, 22, 42, 58, 28, 9, 39, 23, 44, 7, 15, 44, 2, 40, 15, 47, 41, 23, 37, 7, 59, 38, 11, 34, 6, 62, 14, 52, 35, 55, 19, 32, 61, 33, 24, 57, 6, 22, 59, 29, 7, 49, 25, 40, 3, 17, 39, 27, 52, 0, 55, 16, 57, 24, 61, 36, 6, 29, 12, 48, 39, 20, 44, 6, 40, 33, 5, 48, 10, 57, 36, 22, 51, 33, 9, 24, 12, 62, 29, 50, 35, 14, 43, 5, 33, 47, 52, 13, 23, 10, 51, 56, 16, 46, 1, 49, 4, 61, 9, 52, 18, 31, 21, 36, 17 }, | ||
137 | { 19, 42, 9, 48, 2, 44, 11, 37, 48, 20, 33, 16, 55, 35, 49, 15, 37, 20, 59, 16, 53, 22, 56, 31, 50, 11, 34, 54, 16, 51, 4, 49, 33, 53, 21, 28, 56, 24, 31, 9, 52, 16, 48, 24, 44, 13, 51, 20, 31, 49, 18, 6, 34, 2, 44, 14, 47, 8, 15, 43, 13, 41, 33, 52, 20, 61, 7, 51, 34, 62, 4, 20, 36, 33, 43, 8, 46, 13, 53, 17, 45, 42, 9, 31, 52, 11, 30, 56, 13, 59, 17, 44, 27, 6, 62, 11, 43, 17, 49, 38, 26, 2, 16, 27, 58, 21, 54, 18, 26, 5, 35, 61, 43, 27, 7, 39, 14, 58, 37, 55, 20, 33, 13, 40, 62, 10, 55, 5 }, | ||
138 | { 51, 14, 61, 29, 59, 20, 55, 31, 0, 49, 11, 60, 3, 26, 22, 56, 0, 40, 12, 43, 41, 8, 36, 0, 17, 57, 24, 2, 46, 26, 61, 18, 0, 38, 12, 59, 6, 49, 3, 57, 19, 63, 5, 33, 18, 54, 28, 56, 0, 43, 26, 46, 63, 27, 56, 22, 27, 54, 38, 28, 63, 24, 10, 45, 0, 31, 42, 21, 12, 25, 44, 49, 59, 6, 26, 50, 3, 34, 27, 59, 0, 35, 62, 16, 4, 58, 47, 0, 43, 24, 37, 2, 54, 20, 46, 31, 0, 56, 34, 5, 55, 45, 60, 37, 0, 40, 10, 38, 63, 46, 15, 20, 0, 53, 21, 62, 30, 11, 24, 27, 40, 0, 57, 26, 3, 45, 27, 35 } | ||
139 | }; | ||
140 | |||
141 | EFL_ALWAYS_INLINE void | ||
142 | _soft16_convert_from_rgba_pt(const DATA32 *src, DATA16 *dst, DATA8 *alpha, | ||
143 | const int x, const int y) | ||
144 | { | ||
145 | DATA8 orig_r, orig_g, orig_b, orig_a; | ||
146 | |||
147 | orig_r = R_VAL(src); | ||
148 | orig_g = G_VAL(src); | ||
149 | orig_b = B_VAL(src); | ||
150 | orig_a = A_VAL(src); | ||
151 | |||
152 | if (orig_a == 255) | ||
153 | { | ||
154 | DATA8 dith5, dith6, dith, r, g, b; | ||
155 | |||
156 | dith = dither_table[x & S16_DM_MSK][y & S16_DM_MSK]; | ||
157 | dith5 = dith >> S16_DM_SHF(5); | ||
158 | dith6 = dith >> S16_DM_SHF(6); | ||
159 | |||
160 | r = orig_r >> 3; | ||
161 | g = orig_g >> 2; | ||
162 | b = orig_b >> 3; | ||
163 | |||
164 | if (((orig_r - (r << 3)) >= dith5) && (r < 0x1f)) r++; | ||
165 | if (((orig_g - (g << 2)) >= dith6) && (g < 0x3f)) g++; | ||
166 | if (((orig_b - (b << 3)) >= dith5) && (b < 0x1f)) b++; | ||
167 | |||
168 | *dst = (r << 11) | (g << 5) | b; | ||
169 | *alpha = 31; | ||
170 | } | ||
171 | else if (orig_a == 0) | ||
172 | { | ||
173 | *dst = 0; | ||
174 | *alpha = 0; | ||
175 | } | ||
176 | else | ||
177 | { | ||
178 | DATA8 r, g, b, a; | ||
179 | r = orig_r >> 3; | ||
180 | g = orig_g >> 2; | ||
181 | b = orig_b >> 3; | ||
182 | a = (orig_a >> 3) + 1; | ||
183 | |||
184 | *dst = (r << 11) | (g << 5) | b; | ||
185 | *alpha = a; | ||
186 | } | ||
187 | } | ||
188 | |||
189 | static inline void | ||
190 | _soft16_convert_from_rgba_scanline(const DATA32 *src, DATA16 *dst, | ||
191 | DATA8 *alpha, const int y, const int w) | ||
192 | { | ||
193 | int x, m; | ||
194 | |||
195 | m = (w & ~7); | ||
196 | x = 0; | ||
197 | pld(src, 0); | ||
198 | |||
199 | while (x < m) | ||
200 | { | ||
201 | pld(src, 32); | ||
202 | UNROLL8({ | ||
203 | _soft16_convert_from_rgba_pt(src, dst, alpha, x, y); | ||
204 | src++; | ||
205 | dst++; | ||
206 | alpha++; | ||
207 | x++; | ||
208 | }); | ||
209 | } | ||
210 | |||
211 | for (; x < w; x++, src++, dst++, alpha++) | ||
212 | _soft16_convert_from_rgba_pt(src, dst, alpha, x, y); | ||
213 | } | ||
214 | |||
215 | void | ||
216 | evas_common_soft16_image_convert_from_rgba(Soft16_Image *im, const DATA32 *src) | ||
217 | { | ||
218 | const DATA32 *sp; | ||
219 | DATA16 *dp; | ||
220 | DATA8 *ap; | ||
221 | unsigned int y; | ||
222 | |||
223 | sp = src; | ||
224 | dp = im->pixels; | ||
225 | ap = im->alpha; | ||
226 | |||
227 | for (y = 0; y < im->cache_entry.h; y++, sp += im->cache_entry.w, dp += im->stride, ap += im->stride) | ||
228 | _soft16_convert_from_rgba_scanline(sp, dp, ap, y, im->cache_entry.w); | ||
229 | } | ||
230 | |||
231 | EFL_ALWAYS_INLINE void | ||
232 | _soft16_convert_from_rgb_pt(const DATA32 *src, DATA16 *dst, | ||
233 | const int x, const int y) | ||
234 | { | ||
235 | DATA8 orig_r, orig_g, orig_b, r, g, b, dith5, dith6, dith; | ||
236 | |||
237 | orig_r = R_VAL(src); | ||
238 | orig_g = G_VAL(src); | ||
239 | orig_b = B_VAL(src); | ||
240 | |||
241 | r = orig_r >> 3; | ||
242 | g = orig_g >> 2; | ||
243 | b = orig_b >> 3; | ||
244 | |||
245 | dith = dither_table[x & S16_DM_MSK][y & S16_DM_MSK]; | ||
246 | dith5 = dith >> S16_DM_SHF(5); | ||
247 | dith6 = dith >> S16_DM_SHF(6); | ||
248 | |||
249 | if (((orig_r - (r << 3)) >= dith5) && (r < 0x1f)) r++; | ||
250 | if (((orig_g - (g << 2)) >= dith6) && (g < 0x3f)) g++; | ||
251 | if (((orig_b - (b << 3)) >= dith5) && (b < 0x1f)) b++; | ||
252 | |||
253 | *dst = (r << 11) | (g << 5) | b; | ||
254 | } | ||
255 | |||
256 | static inline void | ||
257 | _soft16_convert_from_rgb_scanline(const DATA32 *src, DATA16 *dst, const int y, | ||
258 | const int w) | ||
259 | { | ||
260 | int x, m; | ||
261 | |||
262 | m = (w & ~7); | ||
263 | x = 0; | ||
264 | pld(src, 0); | ||
265 | |||
266 | while (x < m) | ||
267 | { | ||
268 | pld(src, 32); | ||
269 | UNROLL8({ | ||
270 | _soft16_convert_from_rgb_pt(src, dst, x, y); | ||
271 | src++; | ||
272 | dst++; | ||
273 | x++; | ||
274 | }); | ||
275 | } | ||
276 | |||
277 | for (; x < w; x++, src++, dst++) | ||
278 | _soft16_convert_from_rgb_pt(src, dst, x, y); | ||
279 | } | ||
280 | |||
281 | void | ||
282 | evas_common_soft16_image_convert_from_rgb(Soft16_Image *im, const DATA32 *src) | ||
283 | { | ||
284 | const DATA32 *sp; | ||
285 | DATA16 *dp; | ||
286 | unsigned int y; | ||
287 | |||
288 | sp = src; | ||
289 | dp = im->pixels; | ||
290 | |||
291 | for (y = 0; y < im->cache_entry.h; y++, sp += im->cache_entry.w, dp += im->stride) | ||
292 | _soft16_convert_from_rgb_scanline(sp, dp, y, im->cache_entry.w); | ||
293 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_font.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_font.c new file mode 100644 index 0000000..fbad4d2 --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_font.c | |||
@@ -0,0 +1,295 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | |||
3 | EFL_ALWAYS_INLINE void | ||
4 | _glyph_pt_mask_solid_solid(DATA16 *dst, | ||
5 | const DATA16 rgb565, | ||
6 | const DATA32 rgb565_unpack, | ||
7 | const DATA8 *mask) | ||
8 | { | ||
9 | DATA8 alpha = *mask >> 3; | ||
10 | |||
11 | if (alpha == 31) *dst = rgb565; | ||
12 | else if (alpha > 0) | ||
13 | { | ||
14 | DATA32 d; | ||
15 | |||
16 | d = RGB_565_UNPACK(*dst); | ||
17 | d = RGB_565_UNPACKED_BLEND_UNMUL(rgb565_unpack, d, alpha); | ||
18 | *dst = RGB_565_PACK(d); | ||
19 | } | ||
20 | } | ||
21 | |||
22 | static void | ||
23 | _glyph_scanline_mask_solid_solid(DATA16 *dst, | ||
24 | int size, | ||
25 | const DATA16 rgb565, | ||
26 | const DATA32 rgb565_unpack, | ||
27 | const DATA8 *mask) | ||
28 | { | ||
29 | DATA16 *start, *end; | ||
30 | |||
31 | start = dst; | ||
32 | pld(start, 0); | ||
33 | pld(mask, 0); | ||
34 | end = start + (size & ~3); | ||
35 | |||
36 | while (start < end) | ||
37 | { | ||
38 | pld(start, 16); | ||
39 | pld(mask, 4); | ||
40 | UNROLL4({ | ||
41 | _glyph_pt_mask_solid_solid(start, rgb565, rgb565_unpack, mask); | ||
42 | start++; | ||
43 | mask++; | ||
44 | }); | ||
45 | } | ||
46 | |||
47 | end = start + (size & 3); | ||
48 | for (; start < end; start++, mask++) | ||
49 | _glyph_pt_mask_solid_solid(start, rgb565, rgb565_unpack, mask); | ||
50 | } | ||
51 | |||
52 | EFL_ALWAYS_INLINE void | ||
53 | _glyph_pt_mask_transp_solid(DATA16 *dst, | ||
54 | DATA32 rgb565_unpack, | ||
55 | DATA8 alpha, | ||
56 | const DATA8 *mask) | ||
57 | { | ||
58 | DATA32 a, b; | ||
59 | int rel_alpha; | ||
60 | |||
61 | rel_alpha = *mask >> 3; | ||
62 | alpha = (alpha * rel_alpha) >> 5; | ||
63 | if (alpha == 0) | ||
64 | return; | ||
65 | |||
66 | alpha++; | ||
67 | |||
68 | a = ((rgb565_unpack * rel_alpha) >> 5) & RGB_565_UNPACKED_MASK; | ||
69 | b = RGB_565_UNPACK(*dst); | ||
70 | b = RGB_565_UNPACKED_BLEND(a, b, alpha); | ||
71 | *dst = RGB_565_PACK(b); | ||
72 | } | ||
73 | |||
74 | static void | ||
75 | _glyph_scanline_mask_transp_solid(DATA16 *dst, | ||
76 | int size, | ||
77 | const DATA32 rgb565_unpack, | ||
78 | const DATA8 rel_alpha, | ||
79 | const DATA8 *mask) | ||
80 | { | ||
81 | DATA16 *start, *end; | ||
82 | |||
83 | start = dst; | ||
84 | pld(start, 0); | ||
85 | pld(mask, 0); | ||
86 | end = start + (size & ~3); | ||
87 | |||
88 | while (start < end) | ||
89 | { | ||
90 | pld(start, 16); | ||
91 | pld(mask, 4); | ||
92 | UNROLL4({ | ||
93 | _glyph_pt_mask_transp_solid(start, rgb565_unpack, rel_alpha, mask); | ||
94 | start++; | ||
95 | mask++; | ||
96 | }); | ||
97 | } | ||
98 | |||
99 | end = start + (size & 3); | ||
100 | for (; start < end; start++, mask++) | ||
101 | _glyph_pt_mask_transp_solid(start, rgb565_unpack, rel_alpha, mask); | ||
102 | } | ||
103 | |||
104 | static inline void | ||
105 | _calc_ext(const Soft16_Image *dst, const RGBA_Draw_Context *dc, | ||
106 | Eina_Rectangle *ext) | ||
107 | { | ||
108 | EINA_RECTANGLE_SET(ext, 0, 0, dst->cache_entry.w, dst->cache_entry.h); | ||
109 | |||
110 | if (dc->clip.use) | ||
111 | { | ||
112 | int v; | ||
113 | |||
114 | EINA_RECTANGLE_SET(ext, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); | ||
115 | if (ext->x < 0) | ||
116 | { | ||
117 | ext->w += ext->x; | ||
118 | ext->x = 0; | ||
119 | } | ||
120 | if (ext->y < 0) | ||
121 | { | ||
122 | ext->h += ext->y; | ||
123 | ext->y = 0; | ||
124 | } | ||
125 | |||
126 | v = dst->cache_entry.w - ext->x; | ||
127 | if (ext->w > v) ext->w = v; | ||
128 | |||
129 | v = dst->cache_entry.h - ext->y; | ||
130 | if (ext->h > v) ext->h = v; | ||
131 | } | ||
132 | } | ||
133 | |||
134 | static inline void | ||
135 | _glyph_scanline(Soft16_Image *dst, const DATA8 *p_mask, | ||
136 | const Eina_Rectangle ext, int dx, int dy, int max_x, int max_y, | ||
137 | int w, DATA8 alpha, const DATA16 rgb565, | ||
138 | const DATA32 rgb565_unpack) | ||
139 | { | ||
140 | int size, in_x, in_w; | ||
141 | DATA16 *p_pixels; | ||
142 | |||
143 | if ((dx >= max_x) || (dy < ext.y) || (dy >= max_y)) return; | ||
144 | |||
145 | in_x = 0; | ||
146 | in_w = 0; | ||
147 | |||
148 | if (dx + w > max_x) in_w += (dx + w) - max_x; | ||
149 | |||
150 | if (dx < ext.x) | ||
151 | { | ||
152 | in_w += ext.x - dx; | ||
153 | in_x = ext.x - dx; | ||
154 | dx = ext.x; | ||
155 | } | ||
156 | |||
157 | size = w - in_w; | ||
158 | p_pixels = dst->pixels + (dy * dst->stride) + dx; | ||
159 | p_mask += in_x; | ||
160 | |||
161 | if (size > 1) | ||
162 | { | ||
163 | if (alpha == 31) | ||
164 | _glyph_scanline_mask_solid_solid | ||
165 | (p_pixels, size, rgb565, rgb565_unpack, p_mask); | ||
166 | else if (alpha != 0) | ||
167 | _glyph_scanline_mask_transp_solid | ||
168 | (p_pixels, size, rgb565_unpack, alpha, p_mask); | ||
169 | } | ||
170 | else if (size == 1) | ||
171 | { | ||
172 | if (alpha == 31) | ||
173 | _glyph_pt_mask_solid_solid(p_pixels, rgb565, rgb565_unpack, p_mask); | ||
174 | else if (alpha != 0) | ||
175 | _glyph_pt_mask_transp_solid(p_pixels, rgb565_unpack, alpha, p_mask); | ||
176 | } | ||
177 | } | ||
178 | |||
179 | static void | ||
180 | _soft16_font_glyph_draw_grayscale(Soft16_Image *dst, | ||
181 | RGBA_Draw_Context *dc __UNUSED__, RGBA_Font_Glyph *fg __UNUSED__, | ||
182 | int x, int y, DATA8 alpha, DATA16 rgb565, | ||
183 | const Eina_Rectangle ext, int bw, int bh, | ||
184 | int bpitch, const DATA8 *bitmap) | ||
185 | { | ||
186 | const DATA32 rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
187 | int i, max_x, max_y; | ||
188 | |||
189 | max_x = ext.x + ext.w; | ||
190 | max_y = ext.y + ext.h; | ||
191 | |||
192 | for (i = 0; i < bh; i++, bitmap += bpitch) | ||
193 | _glyph_scanline(dst, bitmap, ext, x, y + i, max_x, max_y, bw, | ||
194 | alpha, rgb565, rgb565_unpack); | ||
195 | } | ||
196 | |||
197 | static inline void | ||
198 | _glyph_create_mask_line(DATA8 *mask, const DATA8 *bitmap, int w) | ||
199 | { | ||
200 | const DATA8 bitrepl[2] = {0x0, 0xff}; | ||
201 | int i; | ||
202 | |||
203 | for (i = 0; i < w; i += 8, bitmap++) | ||
204 | { | ||
205 | int j, size; | ||
206 | DATA32 bits; | ||
207 | |||
208 | if (i + 8 < w) size = 8; | ||
209 | else size = w - i; | ||
210 | |||
211 | bits = *bitmap; | ||
212 | |||
213 | for (j = size - 1; j >= 0; j--, mask++) | ||
214 | *mask = bitrepl[(bits >> j) & 0x1]; | ||
215 | } | ||
216 | } | ||
217 | |||
218 | static void | ||
219 | _soft16_font_glyph_draw_mono(Soft16_Image *dst, | ||
220 | RGBA_Draw_Context *dc __UNUSED__, RGBA_Font_Glyph *fg __UNUSED__, | ||
221 | int x, int y, DATA8 alpha, DATA16 rgb565, | ||
222 | const Eina_Rectangle ext, int bw, int bh, | ||
223 | int bpitch, const DATA8 *bitmap) | ||
224 | { | ||
225 | const DATA32 rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
226 | DATA8 *mask; | ||
227 | int i, max_x, max_y; | ||
228 | |||
229 | max_x = ext.x + ext.w; | ||
230 | max_y = ext.y + ext.h; | ||
231 | |||
232 | mask = alloca(bpitch); | ||
233 | for (i = 0; i < bh; i++, bitmap += bpitch) | ||
234 | { | ||
235 | _glyph_create_mask_line(mask, bitmap, bw); | ||
236 | _glyph_scanline(dst, mask, ext, x, y + i, max_x, max_y, bw, | ||
237 | alpha, rgb565, rgb565_unpack); | ||
238 | } | ||
239 | } | ||
240 | |||
241 | void | ||
242 | evas_common_soft16_font_glyph_draw(void *data, void *dest __UNUSED__, void *context, | ||
243 | RGBA_Font_Glyph *fg, int x, int y) | ||
244 | { | ||
245 | Soft16_Image *dst; | ||
246 | RGBA_Draw_Context *dc; | ||
247 | const DATA8 *bitmap; | ||
248 | DATA8 alpha, r, g, b; | ||
249 | DATA16 rgb565; | ||
250 | Eina_Rectangle ext; | ||
251 | int bpitch, bw, bh; | ||
252 | |||
253 | dst = data; | ||
254 | dc = context; | ||
255 | |||
256 | alpha = A_VAL(&dc->col.col) >> 3; | ||
257 | if (alpha == 0) return; /* precision is 5 bits, 3 bits lost */ | ||
258 | |||
259 | r = R_VAL(&dc->col.col) >> 3; | ||
260 | g = G_VAL(&dc->col.col) >> 2; | ||
261 | b = B_VAL(&dc->col.col) >> 3; | ||
262 | |||
263 | if (r > alpha) r = alpha; | ||
264 | if (g > (alpha << 1)) g = (alpha << 1); | ||
265 | if (b > alpha) b = alpha; | ||
266 | |||
267 | rgb565 = (r << 11) | (g << 5) | b; | ||
268 | |||
269 | bitmap = fg->glyph_out->bitmap.buffer; | ||
270 | bh = fg->glyph_out->bitmap.rows; | ||
271 | bw = fg->glyph_out->bitmap.width; | ||
272 | bpitch = fg->glyph_out->bitmap.pitch; | ||
273 | if (bpitch < bw) bpitch = bw; | ||
274 | |||
275 | _calc_ext(dst, dc, &ext); | ||
276 | |||
277 | if ((fg->glyph_out->bitmap.num_grays == 256) && | ||
278 | (fg->glyph_out->bitmap.pixel_mode == ft_pixel_mode_grays)) | ||
279 | _soft16_font_glyph_draw_grayscale(dst, dc, fg, x, y, alpha, rgb565, | ||
280 | ext, bw, bh, bpitch, bitmap); | ||
281 | else | ||
282 | _soft16_font_glyph_draw_mono(dst, dc, fg, x, y, alpha, rgb565, | ||
283 | ext, bw, bh, bpitch, bitmap); | ||
284 | } | ||
285 | |||
286 | void * | ||
287 | evas_common_soft16_font_glyph_new(void *data __UNUSED__, RGBA_Font_Glyph *fg __UNUSED__) | ||
288 | { | ||
289 | return (void *)1; /* core requires != NULL to work */ | ||
290 | } | ||
291 | |||
292 | void | ||
293 | evas_common_soft16_font_glyph_free(void *ext_dat __UNUSED__) | ||
294 | { | ||
295 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c new file mode 100644 index 0000000..9c9f03c --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c | |||
@@ -0,0 +1,471 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | #include "evas_soft16_point_blend.c" | ||
3 | |||
4 | static void | ||
5 | _soft16_image_draw_scaled_solid_solid(Soft16_Image *src, | ||
6 | Soft16_Image *dst, | ||
7 | RGBA_Draw_Context *dc __UNUSED__, | ||
8 | int dst_offset, int w, int h, | ||
9 | int *offset_x, int *offset_y) | ||
10 | { | ||
11 | DATA16 *dst_itr; | ||
12 | int y, w_align; | ||
13 | |||
14 | w_align = w & ~7; | ||
15 | |||
16 | dst_itr = dst->pixels + dst_offset; | ||
17 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
18 | { | ||
19 | DATA16 *d, *s; | ||
20 | int x; | ||
21 | |||
22 | s = src->pixels + offset_y[y]; | ||
23 | pld(s, 0); | ||
24 | pld(offset_x, 0); | ||
25 | |||
26 | d = dst_itr; | ||
27 | x = 0; | ||
28 | while (x < w_align) | ||
29 | { | ||
30 | pld(s, 32); | ||
31 | pld(offset_x + x, 32); | ||
32 | |||
33 | UNROLL8({ | ||
34 | _soft16_pt_blend_solid_solid(d, s[offset_x[x]]); | ||
35 | x++; | ||
36 | d++; | ||
37 | }); | ||
38 | } | ||
39 | |||
40 | for (; x < w; x++, d++) | ||
41 | _soft16_pt_blend_solid_solid(d, s[offset_x[x]]); | ||
42 | } | ||
43 | } | ||
44 | static void | ||
45 | _soft16_image_draw_scaled_transp_solid(Soft16_Image *src, | ||
46 | Soft16_Image *dst, | ||
47 | RGBA_Draw_Context *dc __UNUSED__, | ||
48 | int dst_offset, int w, int h, | ||
49 | int *offset_x, int *offset_y) | ||
50 | { | ||
51 | DATA16 *dst_itr; | ||
52 | int y, w_align; | ||
53 | |||
54 | w_align = w & ~7; | ||
55 | |||
56 | dst_itr = dst->pixels + dst_offset; | ||
57 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
58 | { | ||
59 | DATA16 *d, *s; | ||
60 | DATA8 *a; | ||
61 | int x; | ||
62 | |||
63 | s = src->pixels + offset_y[y]; | ||
64 | a = src->alpha + offset_y[y]; | ||
65 | pld(s, 0); | ||
66 | pld(a, 0); | ||
67 | pld(offset_x, 0); | ||
68 | |||
69 | d = dst_itr; | ||
70 | x = 0; | ||
71 | while (x < w_align) | ||
72 | { | ||
73 | pld(s, 32); | ||
74 | pld(a, 8); | ||
75 | pld(offset_x + x, 32); | ||
76 | |||
77 | UNROLL8({ | ||
78 | int off_x = offset_x[x]; | ||
79 | _soft16_pt_blend_transp_solid(d, s[off_x], a[off_x]); | ||
80 | x++; | ||
81 | d++; | ||
82 | }); | ||
83 | } | ||
84 | |||
85 | for (; x < w; x++, d++) | ||
86 | _soft16_pt_blend_transp_solid(d, s[offset_x[x]], a[offset_x[x]]); | ||
87 | } | ||
88 | } | ||
89 | |||
90 | static inline void | ||
91 | _soft16_image_draw_scaled_no_mul(Soft16_Image *src, Soft16_Image *dst, | ||
92 | RGBA_Draw_Context *dc, | ||
93 | int dst_offset, int w, int h, | ||
94 | int *offset_x, int *offset_y) | ||
95 | { | ||
96 | if ((src->cache_entry.flags.alpha && src->alpha) && | ||
97 | (!dst->cache_entry.flags.alpha)) | ||
98 | _soft16_image_draw_scaled_transp_solid | ||
99 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y); | ||
100 | else if (!dst->cache_entry.flags.alpha) | ||
101 | _soft16_image_draw_scaled_solid_solid | ||
102 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y); | ||
103 | else | ||
104 | ERR("Unsupported draw of scaled images src->cache_entry.flags.alpha=%d, " | ||
105 | "dst->cache_entry.flags.alpha=%d, WITHOUT COLOR MUL", | ||
106 | src->cache_entry.flags.alpha, dst->cache_entry.flags.alpha); | ||
107 | } | ||
108 | |||
109 | static void | ||
110 | _soft16_image_draw_scaled_solid_solid_mul_alpha(Soft16_Image *src, | ||
111 | Soft16_Image *dst, | ||
112 | RGBA_Draw_Context *dc __UNUSED__, | ||
113 | int dst_offset, int w, int h, | ||
114 | int *offset_x, int *offset_y, | ||
115 | DATA8 alpha) | ||
116 | { | ||
117 | DATA16 *dst_itr; | ||
118 | int y, w_align; | ||
119 | |||
120 | w_align = w & ~7; | ||
121 | |||
122 | dst_itr = dst->pixels + dst_offset; | ||
123 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
124 | { | ||
125 | DATA16 *d, *s; | ||
126 | int x; | ||
127 | |||
128 | s = src->pixels + offset_y[y]; | ||
129 | pld(s, 0); | ||
130 | pld(offset_x, 0); | ||
131 | |||
132 | d = dst_itr; | ||
133 | x = 0; | ||
134 | while (x < w_align) | ||
135 | { | ||
136 | pld(s, 32); | ||
137 | pld(offset_x + x, 32); | ||
138 | |||
139 | UNROLL8({ | ||
140 | _soft16_pt_blend_solid_solid_mul_alpha | ||
141 | (d, s[offset_x[x]], alpha); | ||
142 | x++; | ||
143 | d++; | ||
144 | }); | ||
145 | } | ||
146 | |||
147 | for (; x < w; x++, d++) | ||
148 | _soft16_pt_blend_solid_solid_mul_alpha | ||
149 | (d, s[offset_x[x]], alpha); | ||
150 | } | ||
151 | } | ||
152 | |||
153 | static void | ||
154 | _soft16_image_draw_scaled_transp_solid_mul_alpha(Soft16_Image *src, | ||
155 | Soft16_Image *dst, | ||
156 | RGBA_Draw_Context *dc __UNUSED__, | ||
157 | int dst_offset, int w, int h, | ||
158 | int *offset_x, int *offset_y, | ||
159 | DATA8 alpha) | ||
160 | { | ||
161 | DATA16 *dst_itr; | ||
162 | int y, w_align; | ||
163 | |||
164 | w_align = w & ~7; | ||
165 | |||
166 | dst_itr = dst->pixels + dst_offset; | ||
167 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
168 | { | ||
169 | DATA16 *d, *s; | ||
170 | DATA8 *a; | ||
171 | int x; | ||
172 | |||
173 | s = src->pixels + offset_y[y]; | ||
174 | a = src->alpha + offset_y[y]; | ||
175 | pld(s, 0); | ||
176 | pld(a, 0); | ||
177 | pld(offset_x, 0); | ||
178 | |||
179 | d = dst_itr; | ||
180 | x = 0; | ||
181 | while (x < w_align) | ||
182 | { | ||
183 | pld(s, 32); | ||
184 | pld(a, 8); | ||
185 | pld(offset_x + x, 32); | ||
186 | |||
187 | UNROLL8({ | ||
188 | int off_x = offset_x[x]; | ||
189 | _soft16_pt_blend_transp_solid_mul_alpha | ||
190 | (d, s[off_x], a[off_x], alpha); | ||
191 | x++; | ||
192 | d++; | ||
193 | }); | ||
194 | } | ||
195 | |||
196 | for (; x < w; x++, d++) | ||
197 | _soft16_pt_blend_transp_solid_mul_alpha | ||
198 | (d, s[offset_x[x]], a[offset_x[x]], alpha); | ||
199 | } | ||
200 | } | ||
201 | |||
202 | static inline void | ||
203 | _soft16_image_draw_scaled_mul_alpha(Soft16_Image *src, Soft16_Image *dst, | ||
204 | RGBA_Draw_Context *dc, | ||
205 | int dst_offset, int w, int h, | ||
206 | int *offset_x, int *offset_y, DATA8 a) | ||
207 | { | ||
208 | if ((src->cache_entry.flags.alpha && src->alpha) && | ||
209 | (!dst->cache_entry.flags.alpha)) | ||
210 | _soft16_image_draw_scaled_transp_solid_mul_alpha | ||
211 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y, a); | ||
212 | else if (!dst->cache_entry.flags.alpha) | ||
213 | _soft16_image_draw_scaled_solid_solid_mul_alpha | ||
214 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y, a); | ||
215 | else | ||
216 | ERR("Unsupported draw of scaled images src->cache_entry.flags.alpha=%d, " | ||
217 | "dst->cache_entry.flags.alpha=%d, WITH ALPHA MUL %d", | ||
218 | src->cache_entry.flags.alpha, dst->cache_entry.flags.alpha, A_VAL(&dc->mul.col)); | ||
219 | } | ||
220 | |||
221 | static void | ||
222 | _soft16_image_draw_scaled_solid_solid_mul_color(Soft16_Image *src, | ||
223 | Soft16_Image *dst, | ||
224 | RGBA_Draw_Context *dc __UNUSED__, | ||
225 | int dst_offset, int w, int h, | ||
226 | int *offset_x, int *offset_y, | ||
227 | DATA8 r, DATA8 g, DATA8 b, | ||
228 | DATA8 alpha) | ||
229 | { | ||
230 | DATA16 *dst_itr; | ||
231 | int y, w_align; | ||
232 | |||
233 | w_align = w & ~7; | ||
234 | |||
235 | dst_itr = dst->pixels + dst_offset; | ||
236 | |||
237 | if (alpha == 31) | ||
238 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
239 | { | ||
240 | DATA16 *d, *s; | ||
241 | int x; | ||
242 | |||
243 | s = src->pixels + offset_y[y]; | ||
244 | pld(s, 0); | ||
245 | pld(offset_x, 0); | ||
246 | |||
247 | d = dst_itr; | ||
248 | x = 0; | ||
249 | while (x < w_align) | ||
250 | { | ||
251 | pld(s, 32); | ||
252 | pld(offset_x + x, 32); | ||
253 | |||
254 | UNROLL8({ | ||
255 | _soft16_pt_blend_solid_solid_mul_color_solid | ||
256 | (d, s[offset_x[x]], r, g, b); | ||
257 | x++; | ||
258 | d++; | ||
259 | }); | ||
260 | } | ||
261 | |||
262 | for (; x < w; x++, d++) | ||
263 | _soft16_pt_blend_solid_solid_mul_color_solid | ||
264 | (d, s[offset_x[x]], r, g, b); | ||
265 | } | ||
266 | else | ||
267 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
268 | { | ||
269 | DATA16 *d, *s; | ||
270 | int x; | ||
271 | |||
272 | s = src->pixels + offset_y[y]; | ||
273 | pld(s, 0); | ||
274 | pld(offset_x, 0); | ||
275 | |||
276 | d = dst_itr; | ||
277 | x = 0; | ||
278 | while (x < w_align) | ||
279 | { | ||
280 | pld(s, 32); | ||
281 | pld(offset_x + x, 32); | ||
282 | |||
283 | UNROLL8({ | ||
284 | _soft16_pt_blend_solid_solid_mul_color_transp | ||
285 | (d, s[offset_x[x]], alpha, r, g, b); | ||
286 | x++; | ||
287 | d++; | ||
288 | }); | ||
289 | } | ||
290 | |||
291 | for (; x < w; x++, d++) | ||
292 | _soft16_pt_blend_solid_solid_mul_color_transp | ||
293 | (d, s[offset_x[x]], alpha, r, g, b); | ||
294 | } | ||
295 | } | ||
296 | |||
297 | static void | ||
298 | _soft16_image_draw_scaled_transp_solid_mul_color(Soft16_Image *src, | ||
299 | Soft16_Image *dst, | ||
300 | RGBA_Draw_Context *dc __UNUSED__, | ||
301 | int dst_offset, int w, int h, | ||
302 | int *offset_x, int *offset_y, | ||
303 | DATA8 r, DATA8 g, DATA8 b, | ||
304 | DATA8 alpha) | ||
305 | { | ||
306 | DATA16 *dst_itr; | ||
307 | int y, w_align; | ||
308 | |||
309 | w_align = w & ~7; | ||
310 | |||
311 | dst_itr = dst->pixels + dst_offset; | ||
312 | |||
313 | if (alpha == 31) | ||
314 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
315 | { | ||
316 | DATA16 *d, *s; | ||
317 | DATA8 *a; | ||
318 | int x; | ||
319 | |||
320 | s = src->pixels + offset_y[y]; | ||
321 | a = src->alpha + offset_y[y]; | ||
322 | pld(s, 0); | ||
323 | pld(a, 0); | ||
324 | pld(offset_x, 0); | ||
325 | |||
326 | d = dst_itr; | ||
327 | x = 0; | ||
328 | while (x < w_align) | ||
329 | { | ||
330 | pld(s, 32); | ||
331 | pld(a, 8); | ||
332 | pld(offset_x + x, 32); | ||
333 | |||
334 | UNROLL8({ | ||
335 | int off_x = offset_x[x]; | ||
336 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
337 | (d, s[off_x], a[off_x], r, g, b); | ||
338 | x++; | ||
339 | d++; | ||
340 | }); | ||
341 | } | ||
342 | |||
343 | for (; x < w; x++, d++) | ||
344 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
345 | (d, s[offset_x[x]], a[offset_x[x]], r, g, b); | ||
346 | } | ||
347 | else | ||
348 | for (y = 0; y < h; y++, dst_itr += dst->stride) | ||
349 | { | ||
350 | DATA16 *d, *s; | ||
351 | DATA8 *a; | ||
352 | int x; | ||
353 | |||
354 | s = src->pixels + offset_y[y]; | ||
355 | a = src->alpha + offset_y[y]; | ||
356 | pld(s, 0); | ||
357 | pld(a, 0); | ||
358 | pld(offset_x, 0); | ||
359 | |||
360 | d = dst_itr; | ||
361 | x = 0; | ||
362 | while (x < w_align) | ||
363 | { | ||
364 | pld(s, 32); | ||
365 | pld(a, 8); | ||
366 | pld(offset_x + x, 32); | ||
367 | |||
368 | UNROLL8({ | ||
369 | int off_x = offset_x[x]; | ||
370 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
371 | (d, s[off_x], a[off_x], alpha, r, g, b); | ||
372 | x++; | ||
373 | d++; | ||
374 | }); | ||
375 | } | ||
376 | |||
377 | for (; x < w; x++, d++) | ||
378 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
379 | (d, s[offset_x[x]], a[offset_x[x]], alpha, r, g, b); | ||
380 | } | ||
381 | } | ||
382 | |||
383 | static inline void | ||
384 | _soft16_image_draw_scaled_mul_color(Soft16_Image *src, Soft16_Image *dst, | ||
385 | RGBA_Draw_Context *dc, | ||
386 | int dst_offset, int w, int h, | ||
387 | int *offset_x, int *offset_y, | ||
388 | DATA8 r, DATA8 g, DATA8 b, DATA8 a) | ||
389 | { | ||
390 | if ((src->cache_entry.flags.alpha && src->alpha) && | ||
391 | (!dst->cache_entry.flags.alpha)) | ||
392 | _soft16_image_draw_scaled_transp_solid_mul_color | ||
393 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y, r, g, b, a); | ||
394 | else if (!dst->cache_entry.flags.alpha) | ||
395 | _soft16_image_draw_scaled_solid_solid_mul_color | ||
396 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y, r, g, b, a); | ||
397 | else | ||
398 | ERR("Unsupported draw of scaled images src->cache_entry.flags.alpha=%d, " | ||
399 | "dst->cache_entry.flags.alpha=%d, WITH COLOR MUL 0x%08x", | ||
400 | src->cache_entry.flags.alpha, dst->cache_entry.flags.alpha, dc->mul.col); | ||
401 | } | ||
402 | |||
403 | static inline void | ||
404 | _soft16_image_draw_scaled_mul(Soft16_Image *src, Soft16_Image *dst, | ||
405 | RGBA_Draw_Context *dc, | ||
406 | int dst_offset, int w, int h, | ||
407 | int *offset_x, int *offset_y, DATA8 r, DATA8 g, | ||
408 | DATA8 b, DATA8 a) | ||
409 | { | ||
410 | if ((a == r) && (a == (g >> 1)) && (a == b)) | ||
411 | _soft16_image_draw_scaled_mul_alpha | ||
412 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y, a); | ||
413 | else | ||
414 | _soft16_image_draw_scaled_mul_color | ||
415 | (src, dst, dc, dst_offset, w, h, offset_x, offset_y, r, g, b, a); | ||
416 | } | ||
417 | |||
418 | void | ||
419 | evas_common_soft16_image_draw_scaled_sampled(Soft16_Image *src, Soft16_Image *dst, | ||
420 | RGBA_Draw_Context *dc, | ||
421 | const Eina_Rectangle sr, | ||
422 | const Eina_Rectangle dr, | ||
423 | const Eina_Rectangle cr) | ||
424 | { | ||
425 | int x, y, dst_offset, *offset_x, *offset_y; | ||
426 | DATA16 mul_rgb565; | ||
427 | DATA8 r, g, b, a; | ||
428 | |||
429 | if (!dc->mul.use) | ||
430 | { | ||
431 | r = b = a = 31; | ||
432 | g = 63; | ||
433 | mul_rgb565 = 0xffff; | ||
434 | } | ||
435 | else | ||
436 | { | ||
437 | a = A_VAL(&dc->mul.col) >> 3; | ||
438 | if (a == 0) | ||
439 | return; | ||
440 | |||
441 | r = R_VAL(&dc->mul.col) >> 3; | ||
442 | g = G_VAL(&dc->mul.col) >> 2; | ||
443 | b = B_VAL(&dc->mul.col) >> 3; | ||
444 | |||
445 | if (r > a) r = a; | ||
446 | if (g > (a << 1)) g = (a << 1); | ||
447 | if (b > a) b = a; | ||
448 | |||
449 | mul_rgb565 = (r << 11) || (g << 5) | b; | ||
450 | } | ||
451 | |||
452 | /* pre-calculated scale tables */ | ||
453 | offset_x = alloca(cr.w * sizeof(*offset_x)); | ||
454 | for (x = 0; x < cr.w; x++) | ||
455 | offset_x[x] = (((x + cr.x - dr.x) * sr.w) / dr.w) + sr.x; | ||
456 | |||
457 | offset_y = alloca(cr.h * sizeof(*offset_y)); | ||
458 | for (y = 0; y < cr.h; y++) | ||
459 | offset_y[y] = (((((y + cr.y - dr.y) * sr.h) / dr.h) + sr.y) | ||
460 | * src->stride); | ||
461 | |||
462 | dst_offset = cr.x + (cr.y * dst->stride); | ||
463 | |||
464 | |||
465 | if (mul_rgb565 == 0xffff) | ||
466 | _soft16_image_draw_scaled_no_mul | ||
467 | (src, dst, dc, dst_offset, cr.w, cr.h, offset_x, offset_y); | ||
468 | else | ||
469 | _soft16_image_draw_scaled_mul | ||
470 | (src, dst, dc, dst_offset, cr.w, cr.h, offset_x, offset_y, r, g, b, a); | ||
471 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_image_unscaled.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_image_unscaled.c new file mode 100644 index 0000000..f53fdf0 --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_image_unscaled.c | |||
@@ -0,0 +1,287 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | #include "evas_soft16_scanline_blend.c" | ||
3 | |||
4 | static void | ||
5 | _soft16_image_draw_unscaled_solid_solid(Soft16_Image *src, Soft16_Image *dst, | ||
6 | RGBA_Draw_Context *dc __UNUSED__, | ||
7 | int src_offset, int dst_offset, | ||
8 | int w, int h) | ||
9 | { | ||
10 | DATA16 *src_itr, *dst_itr; | ||
11 | int y; | ||
12 | |||
13 | src_itr = src->pixels + src_offset; | ||
14 | dst_itr = dst->pixels + dst_offset; | ||
15 | |||
16 | for (y = 0; y < h; y++) | ||
17 | { | ||
18 | _soft16_scanline_blend_solid_solid(src_itr, dst_itr, w); | ||
19 | src_itr += src->stride; | ||
20 | dst_itr += dst->stride; | ||
21 | } | ||
22 | } | ||
23 | |||
24 | static void | ||
25 | _soft16_image_draw_unscaled_transp_solid(Soft16_Image *src, Soft16_Image *dst, | ||
26 | RGBA_Draw_Context *dc __UNUSED__, | ||
27 | int src_offset, int dst_offset, | ||
28 | int w, int h) | ||
29 | |||
30 | { | ||
31 | DATA16 *src_itr, *dst_itr; | ||
32 | DATA8 *alpha_itr; | ||
33 | int y; | ||
34 | |||
35 | src_itr = src->pixels + src_offset; | ||
36 | alpha_itr = src->alpha + src_offset; | ||
37 | dst_itr = dst->pixels + dst_offset; | ||
38 | |||
39 | for (y = 0; y < h; y++) | ||
40 | { | ||
41 | _soft16_scanline_blend_transp_solid(src_itr, alpha_itr, dst_itr, w); | ||
42 | src_itr += src->stride; | ||
43 | alpha_itr += src->stride; | ||
44 | dst_itr += dst->stride; | ||
45 | } | ||
46 | } | ||
47 | |||
48 | static inline void | ||
49 | _soft16_image_draw_unscaled_no_mul(Soft16_Image *src, Soft16_Image *dst, | ||
50 | RGBA_Draw_Context *dc, | ||
51 | int src_offset, int dst_offset, | ||
52 | int width, int height) | ||
53 | { | ||
54 | if (src->cache_entry.flags.alpha && (!dst->cache_entry.flags.alpha)) | ||
55 | _soft16_image_draw_unscaled_transp_solid(src, dst, dc, | ||
56 | src_offset, dst_offset, | ||
57 | width, height); | ||
58 | else if ((!src->cache_entry.flags.alpha) && (!dst->cache_entry.flags.alpha)) | ||
59 | _soft16_image_draw_unscaled_solid_solid(src, dst, dc, | ||
60 | src_offset, dst_offset, | ||
61 | width, height); | ||
62 | else | ||
63 | ERR("Unsupported draw of unscaled images src->cache_entry.flags.alpha=%d, " | ||
64 | "dst->cache_entry.flags.alpha=%d, WITHOUT COLOR MUL", | ||
65 | src->cache_entry.flags.alpha, dst->cache_entry.flags.alpha); | ||
66 | } | ||
67 | |||
68 | static void | ||
69 | _soft16_image_draw_unscaled_solid_solid_mul_alpha(Soft16_Image *src, | ||
70 | Soft16_Image *dst, | ||
71 | RGBA_Draw_Context *dc __UNUSED__, | ||
72 | int src_offset, | ||
73 | int dst_offset, | ||
74 | int w, int h, DATA8 a) | ||
75 | { | ||
76 | DATA16 *src_itr, *dst_itr; | ||
77 | int y; | ||
78 | |||
79 | src_itr = src->pixels + src_offset; | ||
80 | dst_itr = dst->pixels + dst_offset; | ||
81 | |||
82 | for (y = 0; y < h; y++) | ||
83 | { | ||
84 | _soft16_scanline_blend_solid_solid_mul_alpha(src_itr, dst_itr, w, a); | ||
85 | src_itr += src->stride; | ||
86 | dst_itr += dst->stride; | ||
87 | } | ||
88 | } | ||
89 | |||
90 | static void | ||
91 | _soft16_image_draw_unscaled_transp_solid_mul_alpha(Soft16_Image *src, | ||
92 | Soft16_Image *dst, | ||
93 | RGBA_Draw_Context *dc __UNUSED__, | ||
94 | int src_offset, | ||
95 | int dst_offset, | ||
96 | int w, int h, DATA8 a) | ||
97 | |||
98 | { | ||
99 | DATA16 *src_itr, *dst_itr; | ||
100 | DATA8 *alpha_itr; | ||
101 | int y; | ||
102 | |||
103 | src_itr = src->pixels + src_offset; | ||
104 | alpha_itr = src->alpha + src_offset; | ||
105 | dst_itr = dst->pixels + dst_offset; | ||
106 | |||
107 | for (y = 0; y < h; y++) | ||
108 | { | ||
109 | _soft16_scanline_blend_transp_solid_mul_alpha(src_itr, alpha_itr, | ||
110 | dst_itr, w, a); | ||
111 | src_itr += src->stride; | ||
112 | alpha_itr += src->stride; | ||
113 | dst_itr += dst->stride; | ||
114 | } | ||
115 | } | ||
116 | |||
117 | static inline void | ||
118 | _soft16_image_draw_unscaled_mul_alpha(Soft16_Image *src, Soft16_Image *dst, | ||
119 | RGBA_Draw_Context *dc, | ||
120 | int src_offset, int dst_offset, | ||
121 | int width, int height, DATA8 a) | ||
122 | { | ||
123 | if (src->cache_entry.flags.alpha && (!dst->cache_entry.flags.alpha)) | ||
124 | _soft16_image_draw_unscaled_transp_solid_mul_alpha | ||
125 | (src, dst, dc, src_offset, dst_offset, width, height, a); | ||
126 | else if ((!src->cache_entry.flags.alpha) && (!dst->cache_entry.flags.alpha)) | ||
127 | _soft16_image_draw_unscaled_solid_solid_mul_alpha | ||
128 | (src, dst, dc, src_offset, dst_offset, width, height, a); | ||
129 | else | ||
130 | ERR("Unsupported draw of unscaled images src->cache_entry.flags.alpha=%d, " | ||
131 | "dst->cache_entry.flags.alpha=%d, WITH ALPHA MUL %d", | ||
132 | src->cache_entry.flags.alpha, dst->cache_entry.flags.alpha, A_VAL(&dc->mul.col)); | ||
133 | } | ||
134 | |||
135 | static void | ||
136 | _soft16_image_draw_unscaled_solid_solid_mul_color(Soft16_Image *src, | ||
137 | Soft16_Image *dst, | ||
138 | RGBA_Draw_Context *dc __UNUSED__, | ||
139 | int src_offset, | ||
140 | int dst_offset, | ||
141 | int w, int h, DATA8 r, | ||
142 | DATA8 g, DATA8 b, DATA8 a) | ||
143 | { | ||
144 | DATA16 *src_itr, *dst_itr; | ||
145 | int y; | ||
146 | |||
147 | src_itr = src->pixels + src_offset; | ||
148 | dst_itr = dst->pixels + dst_offset; | ||
149 | |||
150 | if (a == 31) | ||
151 | for (y = 0; y < h; y++) | ||
152 | { | ||
153 | _soft16_scanline_blend_solid_solid_mul_color_solid | ||
154 | (src_itr, dst_itr, w, r, g, b); | ||
155 | src_itr += src->stride; | ||
156 | dst_itr += dst->stride; | ||
157 | } | ||
158 | else | ||
159 | for (y = 0; y < h; y++) | ||
160 | { | ||
161 | _soft16_scanline_blend_solid_solid_mul_color_transp | ||
162 | (src_itr, dst_itr, w, a, r, g, b); | ||
163 | src_itr += src->stride; | ||
164 | dst_itr += dst->stride; | ||
165 | } | ||
166 | } | ||
167 | |||
168 | static void | ||
169 | _soft16_image_draw_unscaled_transp_solid_mul_color(Soft16_Image *src, | ||
170 | Soft16_Image *dst, | ||
171 | RGBA_Draw_Context *dc __UNUSED__, | ||
172 | int src_offset, | ||
173 | int dst_offset, | ||
174 | int w, int h, DATA8 r, | ||
175 | DATA8 g, DATA8 b, DATA8 a) | ||
176 | |||
177 | { | ||
178 | DATA16 *src_itr, *dst_itr; | ||
179 | DATA8 *alpha_itr; | ||
180 | int y; | ||
181 | |||
182 | src_itr = src->pixels + src_offset; | ||
183 | alpha_itr = src->alpha + src_offset; | ||
184 | dst_itr = dst->pixels + dst_offset; | ||
185 | |||
186 | if (a == 31) | ||
187 | for (y = 0; y < h; y++) | ||
188 | { | ||
189 | _soft16_scanline_blend_transp_solid_mul_color_solid | ||
190 | (src_itr, alpha_itr, dst_itr, w, r, g, b); | ||
191 | src_itr += src->stride; | ||
192 | alpha_itr += src->stride; | ||
193 | dst_itr += dst->stride; | ||
194 | } | ||
195 | else | ||
196 | for (y = 0; y < h; y++) | ||
197 | { | ||
198 | _soft16_scanline_blend_transp_solid_mul_color_transp | ||
199 | (src_itr, alpha_itr, dst_itr, w, a, r, g, b); | ||
200 | src_itr += src->stride; | ||
201 | alpha_itr += src->stride; | ||
202 | dst_itr += dst->stride; | ||
203 | } | ||
204 | } | ||
205 | |||
206 | static inline void | ||
207 | _soft16_image_draw_unscaled_mul_color(Soft16_Image *src, Soft16_Image *dst, | ||
208 | RGBA_Draw_Context *dc, | ||
209 | int src_offset, int dst_offset, | ||
210 | int width, int height, | ||
211 | DATA8 r, DATA8 g, DATA8 b, DATA8 a) | ||
212 | { | ||
213 | if (src->cache_entry.flags.alpha && (!dst->cache_entry.flags.alpha)) | ||
214 | _soft16_image_draw_unscaled_transp_solid_mul_color | ||
215 | (src, dst, dc, src_offset, dst_offset, width, height, r, g, b, a); | ||
216 | else if ((!src->cache_entry.flags.alpha) && (!dst->cache_entry.flags.alpha)) | ||
217 | _soft16_image_draw_unscaled_solid_solid_mul_color | ||
218 | (src, dst, dc, src_offset, dst_offset, width, height, r, g, b, a); | ||
219 | else | ||
220 | ERR("Unsupported draw of unscaled images src->cache_entry.flags.alpha=%d, " | ||
221 | "dst->cache_entry.flags.alpha=%d, WITH COLOR MUL 0x%08x", | ||
222 | src->cache_entry.flags.alpha, dst->cache_entry.flags.alpha, dc->mul.col); | ||
223 | } | ||
224 | |||
225 | static inline void | ||
226 | _soft16_image_draw_unscaled_mul(Soft16_Image *src, Soft16_Image *dst, | ||
227 | RGBA_Draw_Context *dc, | ||
228 | int src_offset, int dst_offset, | ||
229 | int width, int height, DATA8 r, DATA8 g, | ||
230 | DATA8 b, DATA8 a) | ||
231 | { | ||
232 | if ((a == r) && (a == (g >> 1)) && (a == b)) | ||
233 | _soft16_image_draw_unscaled_mul_alpha(src, dst, dc, src_offset, | ||
234 | dst_offset, width, height, a); | ||
235 | else | ||
236 | _soft16_image_draw_unscaled_mul_color(src, dst, dc, src_offset, | ||
237 | dst_offset, width, height, | ||
238 | r, g, b, a); | ||
239 | } | ||
240 | |||
241 | void | ||
242 | evas_common_soft16_image_draw_unscaled(Soft16_Image *src, Soft16_Image *dst, | ||
243 | RGBA_Draw_Context *dc, | ||
244 | const Eina_Rectangle sr, | ||
245 | const Eina_Rectangle dr, | ||
246 | const Eina_Rectangle cr) | ||
247 | { | ||
248 | int src_offset_rows, src_offset, dst_offset; | ||
249 | DATA16 mul_rgb565; | ||
250 | DATA8 r, g, b, a; | ||
251 | |||
252 | if (!dc->mul.use) | ||
253 | { | ||
254 | r = b = a = 31; | ||
255 | g = 63; | ||
256 | mul_rgb565 = 0xffff; | ||
257 | } | ||
258 | else | ||
259 | { | ||
260 | a = A_VAL(&dc->mul.col) >> 3; | ||
261 | if (a == 0) | ||
262 | return; | ||
263 | |||
264 | r = R_VAL(&dc->mul.col) >> 3; | ||
265 | g = G_VAL(&dc->mul.col) >> 2; | ||
266 | b = B_VAL(&dc->mul.col) >> 3; | ||
267 | |||
268 | if (r > a) r = a; | ||
269 | if (g > (a << 1)) g = (a << 1); | ||
270 | if (b > a) b = a; | ||
271 | |||
272 | mul_rgb565 = (r << 11) || (g << 5) | b; | ||
273 | } | ||
274 | |||
275 | |||
276 | src_offset_rows = (cr.y - dr.y) + sr.y; | ||
277 | src_offset = (src_offset_rows * src->stride) + (cr.x - dr.x) + sr.x; | ||
278 | |||
279 | dst_offset = cr.x + (cr.y * dst->stride); | ||
280 | |||
281 | if (mul_rgb565 == 0xffff) | ||
282 | _soft16_image_draw_unscaled_no_mul(src, dst, dc, src_offset, dst_offset, | ||
283 | cr.w, cr.h); | ||
284 | else | ||
285 | _soft16_image_draw_unscaled_mul(src, dst, dc, src_offset, dst_offset, | ||
286 | cr.w, cr.h, r, g, b, a); | ||
287 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_line.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_line.c new file mode 100644 index 0000000..92e14af --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_line.c | |||
@@ -0,0 +1,444 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | #include "evas_soft16_scanline_fill.c" | ||
3 | |||
4 | /* | ||
5 | * All functions except by evas_common_soft16_line_draw() expect x0 <= x1. | ||
6 | */ | ||
7 | |||
8 | static inline int | ||
9 | _in_range(int value, int min, int max) | ||
10 | { | ||
11 | return min <= value && value <= max; | ||
12 | } | ||
13 | |||
14 | static inline int | ||
15 | _is_xy_inside_clip(int x, int y, const struct RGBA_Draw_Context_clip clip) | ||
16 | { | ||
17 | if (!clip.use) | ||
18 | return 1; | ||
19 | |||
20 | if (!_in_range(x, clip.x, clip.x + clip.w - 1)) | ||
21 | return 0; | ||
22 | |||
23 | if (!_in_range(y, clip.y, clip.y + clip.h - 1)) | ||
24 | return 0; | ||
25 | |||
26 | return 1; | ||
27 | } | ||
28 | |||
29 | static inline int | ||
30 | _is_x_inside_clip(int x, const struct RGBA_Draw_Context_clip clip) | ||
31 | { | ||
32 | if (!clip.use) | ||
33 | return 1; | ||
34 | |||
35 | return _in_range(x, clip.x, clip.x + clip.w - 1); | ||
36 | } | ||
37 | |||
38 | static inline int | ||
39 | _is_y_inside_clip(int y, const struct RGBA_Draw_Context_clip clip) | ||
40 | { | ||
41 | if (!clip.use) | ||
42 | return 1; | ||
43 | |||
44 | return _in_range(y, clip.y, clip.y + clip.h - 1); | ||
45 | } | ||
46 | |||
47 | static inline int | ||
48 | _is_xy_inside_rect(int x, int y, int w, int h) | ||
49 | { | ||
50 | return _in_range(x, 0, w - 1) && _in_range(y, 0, h - 1); | ||
51 | } | ||
52 | |||
53 | static inline int | ||
54 | _is_empty_clip(const struct RGBA_Draw_Context_clip clip) | ||
55 | { | ||
56 | return clip.w < 1 || clip.h < 1; | ||
57 | } | ||
58 | |||
59 | static void | ||
60 | _soft16_line_point(Soft16_Image *dst, RGBA_Draw_Context *dc, int x, int y) | ||
61 | { | ||
62 | DATA16 rgb565, *dst_itr; | ||
63 | DATA8 alpha; | ||
64 | |||
65 | if (!_is_xy_inside_rect(x, y, dst->cache_entry.w, dst->cache_entry.h)) | ||
66 | return; | ||
67 | |||
68 | if (!_is_xy_inside_clip(x, y, dc->clip)) | ||
69 | return; | ||
70 | |||
71 | dst_itr = dst->pixels + (dst->stride * y) + x; | ||
72 | alpha = A_VAL(&dc->col.col) >> 3; | ||
73 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
74 | G_VAL(&dc->col.col), | ||
75 | B_VAL(&dc->col.col)); | ||
76 | |||
77 | if (alpha == 31) | ||
78 | _soft16_pt_fill_solid_solid(dst_itr, rgb565); | ||
79 | else if (alpha > 0) | ||
80 | { | ||
81 | DATA32 rgb565_unpack; | ||
82 | |||
83 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
84 | alpha++; | ||
85 | _soft16_pt_fill_transp_solid(dst_itr, rgb565_unpack, alpha); | ||
86 | } | ||
87 | } | ||
88 | |||
89 | static void | ||
90 | _soft16_line_horiz(Soft16_Image *dst, RGBA_Draw_Context *dc, int x0, int x1, int y) | ||
91 | { | ||
92 | DATA16 rgb565, *dst_itr; | ||
93 | DATA8 alpha; | ||
94 | int w; | ||
95 | |||
96 | if (!_is_y_inside_clip(y, dc->clip)) | ||
97 | return; | ||
98 | |||
99 | if (x0 < dc->clip.x) | ||
100 | x0 = dc->clip.x; | ||
101 | |||
102 | if (x1 >= dc->clip.x + dc->clip.w) | ||
103 | x1 = dc->clip.x + dc->clip.w - 1; | ||
104 | |||
105 | w = x1 - x0; | ||
106 | if (w < 1) | ||
107 | return; | ||
108 | |||
109 | dst_itr = dst->pixels + (dst->stride * y) + x0; | ||
110 | alpha = A_VAL(&dc->col.col) >> 3; | ||
111 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
112 | G_VAL(&dc->col.col), | ||
113 | B_VAL(&dc->col.col)); | ||
114 | |||
115 | if (alpha == 31) | ||
116 | _soft16_scanline_fill_solid_solid(dst_itr, w, rgb565); | ||
117 | else if (alpha > 0) | ||
118 | { | ||
119 | DATA32 rgb565_unpack; | ||
120 | |||
121 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
122 | alpha++; | ||
123 | _soft16_scanline_fill_transp_solid(dst_itr, w, rgb565_unpack, alpha); | ||
124 | } | ||
125 | } | ||
126 | |||
127 | static void | ||
128 | _soft16_line_vert(Soft16_Image *dst, RGBA_Draw_Context *dc, int x, int y0, int y1) | ||
129 | { | ||
130 | DATA16 rgb565, *dst_itr; | ||
131 | DATA8 alpha; | ||
132 | int h; | ||
133 | |||
134 | if (!_is_x_inside_clip(x, dc->clip)) | ||
135 | return; | ||
136 | |||
137 | if (y1 < y0) | ||
138 | { | ||
139 | int t; | ||
140 | t = y0; | ||
141 | y0 = y1; | ||
142 | y1 = t; | ||
143 | } | ||
144 | |||
145 | if (y0 < dc->clip.y) | ||
146 | y0 = dc->clip.y; | ||
147 | |||
148 | if (y1 >= dc->clip.y + dc->clip.h) | ||
149 | y1 = dc->clip.y + dc->clip.h - 1; | ||
150 | |||
151 | h = y1 - y0; | ||
152 | if (h < 1) | ||
153 | return; | ||
154 | |||
155 | dst_itr = dst->pixels + (dst->stride * y0) + x; | ||
156 | alpha = A_VAL(&dc->col.col) >> 3; | ||
157 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
158 | G_VAL(&dc->col.col), | ||
159 | B_VAL(&dc->col.col)); | ||
160 | |||
161 | if (alpha == 31) | ||
162 | { | ||
163 | for (; h > 0; h--, dst_itr += dst->stride) | ||
164 | _soft16_pt_fill_solid_solid(dst_itr, rgb565); | ||
165 | } | ||
166 | else if (alpha > 0) | ||
167 | { | ||
168 | DATA32 rgb565_unpack; | ||
169 | |||
170 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
171 | alpha++; | ||
172 | |||
173 | for (; h > 0; h--, dst_itr += dst->stride) | ||
174 | _soft16_pt_fill_transp_solid(dst_itr, rgb565_unpack, alpha); | ||
175 | } | ||
176 | } | ||
177 | |||
178 | static inline void | ||
179 | _soft16_line_45deg_adjust_boundaries(const struct RGBA_Draw_Context_clip clip, int *p_x0, int *p_y0, int *p_x1, int *p_y1) | ||
180 | { | ||
181 | int diff, dy, x0, y0, x1, y1; | ||
182 | |||
183 | x0 = *p_x0; | ||
184 | y0 = *p_y0; | ||
185 | x1 = *p_x1; | ||
186 | y1 = *p_y1; | ||
187 | |||
188 | dy = y1 - y0; | ||
189 | |||
190 | diff = clip.x - x0; | ||
191 | if (diff > 0) | ||
192 | { | ||
193 | x0 = clip.x; | ||
194 | y0 += (dy > 0) ? diff : -diff; | ||
195 | } | ||
196 | |||
197 | diff = x1 - (clip.x + clip.w); | ||
198 | if (diff > 0) | ||
199 | { | ||
200 | x1 = clip.x + clip.w; | ||
201 | y1 += (dy > 0) ? -diff : diff; | ||
202 | } | ||
203 | |||
204 | if (dy > 0) | ||
205 | { | ||
206 | diff = clip.y - y0; | ||
207 | if (diff > 0) | ||
208 | { | ||
209 | y0 = clip.y; | ||
210 | x0 += diff; | ||
211 | } | ||
212 | |||
213 | diff = y1 - (clip.y + clip.h); | ||
214 | if (diff > 0) | ||
215 | { | ||
216 | y1 = clip.y + clip.h; | ||
217 | x1 -= diff; | ||
218 | } | ||
219 | } | ||
220 | else | ||
221 | { | ||
222 | diff = clip.y - y1; | ||
223 | if (diff > 0) | ||
224 | { | ||
225 | y1 = clip.y; | ||
226 | x1 -= diff; | ||
227 | } | ||
228 | |||
229 | diff = y0 - (clip.y + clip.h - 1); | ||
230 | if (diff > 0) | ||
231 | { | ||
232 | y0 = clip.y + clip.h - 1; | ||
233 | x0 += diff; | ||
234 | } | ||
235 | } | ||
236 | |||
237 | *p_x0 = x0; | ||
238 | *p_y0 = y0; | ||
239 | *p_x1 = x1; | ||
240 | *p_y1 = y1; | ||
241 | } | ||
242 | |||
243 | static void | ||
244 | _soft16_line_45deg(Soft16_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1) | ||
245 | { | ||
246 | int dy, step_dst_itr, len; | ||
247 | DATA8 alpha; | ||
248 | DATA16 *dst_itr, rgb565; | ||
249 | |||
250 | alpha = A_VAL(&dc->col.col) >> 3; | ||
251 | if (alpha < 1) | ||
252 | return; | ||
253 | |||
254 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
255 | G_VAL(&dc->col.col), | ||
256 | B_VAL(&dc->col.col)); | ||
257 | |||
258 | dy = y1 - y0; | ||
259 | step_dst_itr = 1 + ((dy > 0) ? dst->stride : -dst->stride); | ||
260 | |||
261 | _soft16_line_45deg_adjust_boundaries(dc->clip, &x0, &y0, &x1, &y1); | ||
262 | |||
263 | len = (dy > 0) ? (y1 - y0) : (y0 - y1); | ||
264 | if (len < 1) | ||
265 | return; | ||
266 | |||
267 | dst_itr = dst->pixels + dst->stride * y0 + x0; | ||
268 | if (alpha == 31) | ||
269 | { | ||
270 | for (; len > 0; len--, dst_itr += step_dst_itr) | ||
271 | _soft16_pt_fill_solid_solid(dst_itr, rgb565); | ||
272 | } | ||
273 | else | ||
274 | { | ||
275 | DATA32 rgb565_unpack; | ||
276 | |||
277 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
278 | alpha++; | ||
279 | for (; len > 0; len--, dst_itr += step_dst_itr) | ||
280 | _soft16_pt_fill_transp_solid(dst_itr, rgb565_unpack, alpha); | ||
281 | } | ||
282 | } | ||
283 | |||
284 | EFL_ALWAYS_INLINE void | ||
285 | _soft16_line_aliased_pt(DATA16 *dst_itr, DATA16 rgb565, DATA32 rgb565_unpack, DATA8 alpha) | ||
286 | { | ||
287 | if (alpha == 32) | ||
288 | _soft16_pt_fill_solid_solid(dst_itr, rgb565); | ||
289 | else | ||
290 | _soft16_pt_fill_transp_solid(dst_itr, rgb565_unpack, alpha); | ||
291 | } | ||
292 | |||
293 | static void | ||
294 | _soft16_line_aliased(Soft16_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1) | ||
295 | { | ||
296 | int dx, dy, step_y, step_dst_itr; | ||
297 | DATA32 rgb565_unpack; | ||
298 | DATA16 rgb565; | ||
299 | DATA8 alpha; | ||
300 | |||
301 | alpha = A_VAL(&dc->col.col) >> 3; | ||
302 | if (alpha == 0) | ||
303 | return; | ||
304 | alpha++; | ||
305 | |||
306 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
307 | G_VAL(&dc->col.col), | ||
308 | B_VAL(&dc->col.col)); | ||
309 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
310 | |||
311 | dx = x1 - x0; | ||
312 | dy = y1 - y0; | ||
313 | |||
314 | if (dy >= 0) | ||
315 | { | ||
316 | step_y = 1; | ||
317 | step_dst_itr = dst->stride; | ||
318 | } | ||
319 | else | ||
320 | { | ||
321 | dy = -dy; | ||
322 | step_y = -1; | ||
323 | step_dst_itr = -dst->stride; | ||
324 | } | ||
325 | |||
326 | if (dx > dy) | ||
327 | { | ||
328 | DATA16 *dst_itr; | ||
329 | int e, x, y; | ||
330 | |||
331 | e = - (dx / 2); | ||
332 | y = y0; | ||
333 | dst_itr = dst->pixels + dst->stride * y0 + x0; | ||
334 | for (x=x0; x <= x1; x++, dst_itr++) | ||
335 | { | ||
336 | if (_is_xy_inside_clip(x, y, dc->clip)) | ||
337 | _soft16_line_aliased_pt(dst_itr, rgb565, rgb565_unpack, alpha); | ||
338 | |||
339 | e += dy; | ||
340 | if (e >= 0) | ||
341 | { | ||
342 | dst_itr += step_dst_itr; | ||
343 | y += step_y; | ||
344 | e -= dx; | ||
345 | } | ||
346 | } | ||
347 | } | ||
348 | else | ||
349 | { | ||
350 | DATA16 *dst_itr; | ||
351 | int e, x, y; | ||
352 | |||
353 | e = - (dy / 2); | ||
354 | x = x0; | ||
355 | dst_itr = dst->pixels + dst->stride * y0 + x0; | ||
356 | for (y=y0; y != y1; y += step_y, dst_itr += step_dst_itr) | ||
357 | { | ||
358 | if (_is_xy_inside_clip(x, y, dc->clip)) | ||
359 | _soft16_line_aliased_pt(dst_itr, rgb565, rgb565_unpack, alpha); | ||
360 | |||
361 | e += dx; | ||
362 | if (e >= 0) | ||
363 | { | ||
364 | dst_itr++; | ||
365 | x++; | ||
366 | e -= dy; | ||
367 | } | ||
368 | } | ||
369 | } | ||
370 | } | ||
371 | |||
372 | void | ||
373 | evas_common_soft16_line_draw(Soft16_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1) | ||
374 | { | ||
375 | struct RGBA_Draw_Context_clip c_bkp, c_tmp; | ||
376 | int dx, dy; | ||
377 | int x, y, w, h; | ||
378 | |||
379 | c_tmp.use = 1; | ||
380 | c_tmp.x = 0; | ||
381 | c_tmp.y = 0; | ||
382 | c_tmp.w = dst->cache_entry.w; | ||
383 | c_tmp.h = dst->cache_entry.h; | ||
384 | |||
385 | /* save out clip info */ | ||
386 | c_bkp = dc->clip; | ||
387 | if (c_bkp.use) | ||
388 | { | ||
389 | RECTS_CLIP_TO_RECT(c_tmp.x, c_tmp.y, c_tmp.w, c_tmp.h, | ||
390 | c_bkp.x, c_bkp.y, c_bkp.w, c_bkp.h); | ||
391 | if (_is_empty_clip(c_tmp)) | ||
392 | return; | ||
393 | } | ||
394 | |||
395 | x = MIN(x0, x1); | ||
396 | y = MIN(y0, y1); | ||
397 | w = MAX(x0, x1) - x + 1; | ||
398 | h = MAX(y0, y1) - y + 1; | ||
399 | |||
400 | RECTS_CLIP_TO_RECT(c_tmp.x, c_tmp.y, c_tmp.w, c_tmp.h, x, y, w, h); | ||
401 | if (_is_empty_clip(c_tmp)) | ||
402 | return; | ||
403 | |||
404 | /* Check if the line doesn't cross the clip area */ | ||
405 | if (x0 < c_tmp.x && x1 < c_tmp.x) | ||
406 | return; | ||
407 | if (x0 >= c_tmp.x + c_tmp.w && x1 >= c_tmp.x + c_tmp.w) | ||
408 | return; | ||
409 | if (y0 < c_tmp.y && y1 < c_tmp.y) | ||
410 | return; | ||
411 | if (y0 >= c_tmp.y + c_tmp.h && y1 >= c_tmp.y + c_tmp.h) | ||
412 | return; | ||
413 | |||
414 | dc->clip = c_tmp; | ||
415 | dx = x1 - x0; | ||
416 | dy = y1 - y0; | ||
417 | |||
418 | if (dx < 0) | ||
419 | { | ||
420 | int t; | ||
421 | |||
422 | t = x0; | ||
423 | x0 = x1; | ||
424 | x1 = t; | ||
425 | |||
426 | t = y0; | ||
427 | y0 = y1; | ||
428 | y1 = t; | ||
429 | } | ||
430 | |||
431 | if (dx == 0 && dy == 0) | ||
432 | _soft16_line_point(dst, dc, x0, y0); | ||
433 | else if (dx == 0) | ||
434 | _soft16_line_vert(dst, dc, x0, y0, y1); | ||
435 | else if (dy == 0) | ||
436 | _soft16_line_horiz(dst, dc, x0, x1, y0); | ||
437 | else if (dy == dx || dy == -dx) | ||
438 | _soft16_line_45deg(dst, dc, x0, y0, x1, y1); | ||
439 | else | ||
440 | _soft16_line_aliased(dst, dc, x0, y0, x1, y1); | ||
441 | |||
442 | /* restore clip info */ | ||
443 | dc->clip = c_bkp; | ||
444 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_main.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_main.c new file mode 100644 index 0000000..6028744 --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_main.c | |||
@@ -0,0 +1,594 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | |||
3 | static Evas_Cache_Image *eci = NULL; | ||
4 | static int reference = 0; | ||
5 | |||
6 | static Image_Entry *_evas_common_soft16_image_new(void); | ||
7 | static void _evas_common_soft16_image_delete(Image_Entry *ie); | ||
8 | |||
9 | static int _evas_common_soft16_image_surface_alloc(Image_Entry *ie, unsigned int w, unsigned int h); | ||
10 | static void _evas_common_soft16_image_surface_delete(Image_Entry *ie); | ||
11 | static DATA32 *_evas_common_soft16_image_surface_pixels(Image_Entry *ie); | ||
12 | |||
13 | static int _evas_common_load_soft16_image_from_file(Image_Entry *ie); | ||
14 | static void _evas_common_soft16_image_unload(Image_Entry *ie); | ||
15 | |||
16 | static void _evas_common_soft16_image_dirty_region(Image_Entry *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h); | ||
17 | static int _evas_common_soft16_image_dirty(Image_Entry *ie_dst, const Image_Entry *ie_src); | ||
18 | |||
19 | static int _evas_common_soft16_image_ram_usage(Image_Entry *ie); | ||
20 | |||
21 | static int _evas_common_soft16_image_size_set(Image_Entry *ie_dst, const Image_Entry *ie_im, unsigned int w, unsigned int h); | ||
22 | static int _evas_common_soft16_image_from_copied_data(Image_Entry* ie_dst, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, int cspace); | ||
23 | static int _evas_common_soft16_image_from_data(Image_Entry* ie_dst, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, int cspace); | ||
24 | static int _evas_common_soft16_image_colorspace_set(Image_Entry* ie_dst, int cspace); | ||
25 | |||
26 | static int _evas_common_load_soft16_image_data_from_file(Image_Entry *ie); | ||
27 | |||
28 | /* static void */ | ||
29 | /* _evas_common_soft16_image_debug(const char* context, Image_Entry *eim) */ | ||
30 | /* { */ | ||
31 | /* DBG("[16] %p = [%s] {%s,%s} %i [%i|%i]", eim, context, eim->file, eim->key, eim->references, eim->w, eim->h); */ | ||
32 | /* } */ | ||
33 | |||
34 | static const Evas_Cache_Image_Func _evas_common_soft16_image_func = | ||
35 | { | ||
36 | _evas_common_soft16_image_new, | ||
37 | _evas_common_soft16_image_delete, | ||
38 | _evas_common_soft16_image_surface_alloc, | ||
39 | _evas_common_soft16_image_surface_delete, | ||
40 | _evas_common_soft16_image_surface_pixels, | ||
41 | _evas_common_load_soft16_image_from_file, | ||
42 | _evas_common_soft16_image_unload, | ||
43 | _evas_common_soft16_image_dirty_region, | ||
44 | _evas_common_soft16_image_dirty, | ||
45 | _evas_common_soft16_image_size_set, | ||
46 | _evas_common_soft16_image_from_copied_data, | ||
47 | _evas_common_soft16_image_from_data, | ||
48 | _evas_common_soft16_image_colorspace_set, | ||
49 | _evas_common_load_soft16_image_data_from_file, | ||
50 | _evas_common_soft16_image_ram_usage, | ||
51 | /* _evas_common_soft16_image_debug */ | ||
52 | NULL | ||
53 | }; | ||
54 | |||
55 | EAPI void | ||
56 | evas_common_soft16_image_init(void) | ||
57 | { | ||
58 | if (!eci) | ||
59 | eci = evas_cache_image_init(&_evas_common_soft16_image_func); | ||
60 | reference++; | ||
61 | } | ||
62 | |||
63 | EAPI void | ||
64 | evas_common_soft16_image_shutdown(void) | ||
65 | { | ||
66 | if (--reference == 0) | ||
67 | { | ||
68 | // DISABLE for now - something wrong with cache shutdown freeing things | ||
69 | // still in use - rage_thumb segv's now. | ||
70 | // | ||
71 | // actually - i think i see it. cache ref goes to 0 (and thus gets freed) | ||
72 | // because in eng_setup() when a buffer changes size it is FIRST freed | ||
73 | // THEN allocated again - thus brignhjing ref to 0 then back to 1 immediately | ||
74 | // where it should stay at 1. - see evas_engine.c in the buffer enigne for | ||
75 | // example. eng_output_free() is called BEFORE _output_setup(). although this | ||
76 | // is only a SIGNE of the problem. we can patch this up with either freeing | ||
77 | // after the setup (so we just pt a ref of 2 then back to 1), or just | ||
78 | // evas_common_image_init() at the start and evas_common_image_shutdown() | ||
79 | // after it all. really ref 0 should only be reached when no more canvases | ||
80 | // with no more objects exist anywhere. | ||
81 | |||
82 | // ENABLE IT AGAIN, hope it is fixed. Gustavo @ January 22nd, 2009. | ||
83 | evas_cache_image_shutdown(eci); | ||
84 | eci = NULL; | ||
85 | } | ||
86 | } | ||
87 | |||
88 | EAPI Evas_Cache_Image * | ||
89 | evas_common_soft16_image_cache_get(void) | ||
90 | { | ||
91 | return eci; | ||
92 | } | ||
93 | |||
94 | static Image_Entry * | ||
95 | _evas_common_soft16_image_new(void) | ||
96 | { | ||
97 | Soft16_Image *im; | ||
98 | |||
99 | im = calloc(1, sizeof(Soft16_Image)); | ||
100 | if (!im) return NULL; | ||
101 | |||
102 | im->stride = -1; | ||
103 | |||
104 | return (Image_Entry *) im; | ||
105 | } | ||
106 | |||
107 | static void | ||
108 | _evas_common_soft16_image_delete(Image_Entry *ie) | ||
109 | { | ||
110 | memset(ie, 0xFF, sizeof (Soft16_Image)); | ||
111 | free(ie); | ||
112 | } | ||
113 | |||
114 | static int | ||
115 | _evas_common_soft16_image_surface_alloc(Image_Entry *ie, unsigned int w, unsigned int h) | ||
116 | { | ||
117 | Soft16_Image *im = (Soft16_Image *) ie; | ||
118 | |||
119 | if (im->stride < 0) im->stride = _calc_stride(w); | ||
120 | |||
121 | im->pixels = realloc(im->pixels, IMG_BYTE_SIZE(im->stride, h, ie->flags.alpha)); | ||
122 | if (!im->pixels) return -1; | ||
123 | |||
124 | if (ie->flags.alpha) | ||
125 | { | ||
126 | im->alpha = (DATA8 *)(im->pixels + (im->stride * h)); | ||
127 | im->flags.free_alpha = 0; | ||
128 | } | ||
129 | im->flags.free_pixels = 1; | ||
130 | |||
131 | return 0; | ||
132 | } | ||
133 | |||
134 | static void | ||
135 | _evas_common_soft16_image_surface_delete(Image_Entry *ie) | ||
136 | { | ||
137 | Soft16_Image *im = (Soft16_Image *) ie; | ||
138 | |||
139 | if (im->flags.free_pixels) | ||
140 | free(im->pixels); | ||
141 | im->pixels = NULL; | ||
142 | im->flags.free_pixels = 0; | ||
143 | |||
144 | if (im->flags.free_alpha) | ||
145 | free(im->alpha); | ||
146 | im->alpha = NULL; | ||
147 | im->flags.free_alpha = 0; | ||
148 | } | ||
149 | |||
150 | static DATA32 * | ||
151 | _evas_common_soft16_image_surface_pixels(Image_Entry *ie __UNUSED__) | ||
152 | { | ||
153 | abort(); | ||
154 | |||
155 | return NULL; | ||
156 | } | ||
157 | |||
158 | static int | ||
159 | _evas_common_load_soft16_image_from_file(Image_Entry *ie) | ||
160 | { | ||
161 | Soft16_Image *sim = (Soft16_Image *) ie; | ||
162 | RGBA_Image *im; | ||
163 | int error = 0; | ||
164 | |||
165 | im = (RGBA_Image *) evas_cache_image_request(evas_common_image_cache_get(), sim->cache_entry.file, sim->cache_entry.key, &sim->cache_entry.load_opts, &error); | ||
166 | sim->source = im; | ||
167 | if (!sim->source) return -1; | ||
168 | |||
169 | sim->cache_entry.w = sim->source->cache_entry.w; | ||
170 | sim->cache_entry.h = sim->source->cache_entry.h; | ||
171 | ie->flags.alpha = im->cache_entry.flags.alpha; | ||
172 | sim->cache_entry.info = im->cache_entry.info; | ||
173 | if (sim->stride < 0) sim->stride = _calc_stride(sim->cache_entry.w); | ||
174 | |||
175 | return 0; | ||
176 | } | ||
177 | |||
178 | static void | ||
179 | _evas_common_soft16_image_unload(Image_Entry *ie __UNUSED__) | ||
180 | { | ||
181 | } | ||
182 | |||
183 | static void | ||
184 | _evas_common_soft16_image_dirty_region(Image_Entry *im __UNUSED__, unsigned int x __UNUSED__, unsigned int y __UNUSED__, unsigned int w __UNUSED__, unsigned int h __UNUSED__) | ||
185 | { | ||
186 | } | ||
187 | |||
188 | static int | ||
189 | _evas_common_soft16_image_dirty(Image_Entry *ie_dst, const Image_Entry *ie_src) | ||
190 | { | ||
191 | Soft16_Image *dst = (Soft16_Image *) ie_dst; | ||
192 | Soft16_Image *src = (Soft16_Image *) ie_src; | ||
193 | |||
194 | evas_cache_image_load_data(&src->cache_entry); | ||
195 | evas_cache_image_surface_alloc(&dst->cache_entry, | ||
196 | src->cache_entry.w, src->cache_entry.h); | ||
197 | |||
198 | /* evas_common_blit_rectangle(src, dst, 0, 0, src->cache_entry.w, src->cache_entry.h, 0, 0); */ | ||
199 | |||
200 | return 0; | ||
201 | } | ||
202 | |||
203 | static int | ||
204 | _evas_common_soft16_image_ram_usage(Image_Entry *ie) | ||
205 | { | ||
206 | Soft16_Image *im = (Soft16_Image *) ie; | ||
207 | |||
208 | if (im->pixels && im->flags.free_pixels) | ||
209 | return IMG_BYTE_SIZE(im->stride, im->cache_entry.h, ie->flags.alpha); | ||
210 | return 0; | ||
211 | } | ||
212 | |||
213 | static int | ||
214 | _evas_common_soft16_image_size_set(Image_Entry *ie_dst, const Image_Entry *ie_im, unsigned int w __UNUSED__, unsigned int h __UNUSED__) | ||
215 | { | ||
216 | Soft16_Image *dst = (Soft16_Image *) ie_dst; | ||
217 | Soft16_Image *im = (Soft16_Image *) ie_im; | ||
218 | |||
219 | dst->flags = im->flags; | ||
220 | |||
221 | return 0; | ||
222 | } | ||
223 | |||
224 | static int | ||
225 | _evas_common_soft16_image_from_data(Image_Entry* ie_dst, unsigned int w, unsigned int h, DATA32 *image_data, int alpha, int cspace __UNUSED__) | ||
226 | { | ||
227 | Soft16_Image *im = (Soft16_Image *) ie_dst; | ||
228 | |||
229 | /* FIXME: handle colorspace */ | ||
230 | ie_dst->w = w; | ||
231 | ie_dst->h = h; | ||
232 | ie_dst->flags.alpha = alpha; | ||
233 | |||
234 | im->flags.free_pixels = 0; | ||
235 | im->flags.free_alpha = 0; | ||
236 | if (im->stride < 0) | ||
237 | im->stride = _calc_stride(w); | ||
238 | |||
239 | /* FIXME: That's bad, the application must be aware of the engine internal. */ | ||
240 | im->pixels = (DATA16 *) image_data; | ||
241 | if (ie_dst->flags.alpha) | ||
242 | im->alpha = (DATA8 *)(im->pixels + (im->stride * h)); | ||
243 | |||
244 | return 0; | ||
245 | } | ||
246 | |||
247 | static int | ||
248 | _evas_common_soft16_image_from_copied_data(Image_Entry* ie_dst, unsigned int w __UNUSED__, unsigned int h, DATA32 *image_data, int alpha __UNUSED__, int cspace __UNUSED__) | ||
249 | { | ||
250 | Soft16_Image *im = (Soft16_Image *) ie_dst; | ||
251 | |||
252 | /* FIXME: handle colorspace */ | ||
253 | if (image_data) | ||
254 | memcpy(im->pixels, image_data, IMG_BYTE_SIZE(im->stride, h, ie_dst->flags.alpha)); | ||
255 | else | ||
256 | memset(im->pixels, 0, IMG_BYTE_SIZE(im->stride, h, ie_dst->flags.alpha)); | ||
257 | |||
258 | return 0; | ||
259 | } | ||
260 | |||
261 | static int | ||
262 | _evas_common_soft16_image_colorspace_set(Image_Entry* ie_dst __UNUSED__, int cspace __UNUSED__) | ||
263 | { | ||
264 | /* FIXME: handle colorspace */ | ||
265 | return 0; | ||
266 | } | ||
267 | |||
268 | static int | ||
269 | _evas_common_load_soft16_image_data_from_file(Image_Entry *ie) | ||
270 | { | ||
271 | Soft16_Image *im = (Soft16_Image *) ie; | ||
272 | |||
273 | if (im->pixels) return 0; | ||
274 | if (!im->source) return -1; | ||
275 | |||
276 | evas_cache_image_load_data(&im->source->cache_entry); | ||
277 | if (im->source->image.data) | ||
278 | { | ||
279 | DATA32 *sp; | ||
280 | |||
281 | evas_cache_image_surface_alloc(&im->cache_entry, | ||
282 | im->source->cache_entry.w, | ||
283 | im->source->cache_entry.h); | ||
284 | |||
285 | sp = im->source->image.data; | ||
286 | if (im->alpha) | ||
287 | evas_common_soft16_image_convert_from_rgba(im, sp); | ||
288 | else | ||
289 | evas_common_soft16_image_convert_from_rgb(im, sp); | ||
290 | } | ||
291 | evas_cache_image_drop(&im->source->cache_entry); | ||
292 | im->cache_entry.info.module = NULL; | ||
293 | im->cache_entry.info.loader = NULL; | ||
294 | im->source = NULL; | ||
295 | |||
296 | return 0; | ||
297 | } | ||
298 | |||
299 | /* Soft16_Image * */ | ||
300 | /* evas_common_soft16_image_new(int w, int h, int stride, int have_alpha, DATA16 *pixels, */ | ||
301 | /* int copy) */ | ||
302 | /* { */ | ||
303 | /* Soft16_Image *im; */ | ||
304 | |||
305 | /* if (stride < 0) stride = _calc_stride(w); */ | ||
306 | |||
307 | /* im = evas_common_soft16_image_alloc(w, h, stride, have_alpha, copy); */ | ||
308 | /* if (!im) return NULL; */ | ||
309 | |||
310 | /* if (pixels) */ | ||
311 | /* { */ | ||
312 | /* if (copy) */ | ||
313 | /* memcpy(im->pixels, pixels, IMG_BYTE_SIZE(stride, h, have_alpha)); */ | ||
314 | /* else */ | ||
315 | /* { */ | ||
316 | /* im->pixels = pixels; */ | ||
317 | /* if (have_alpha) im->alpha = (DATA8 *)(im->pixels + (stride * h)); */ | ||
318 | /* } */ | ||
319 | /* } */ | ||
320 | /* return im; */ | ||
321 | /* } */ | ||
322 | |||
323 | static inline void | ||
324 | _get_clip(const RGBA_Draw_Context *dc, const Soft16_Image *im, | ||
325 | Eina_Rectangle *clip) | ||
326 | { | ||
327 | if (dc->clip.use) | ||
328 | { | ||
329 | EINA_RECTANGLE_SET(clip, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); | ||
330 | if (clip->x < 0) | ||
331 | { | ||
332 | clip->w += clip->x; | ||
333 | clip->x = 0; | ||
334 | } | ||
335 | if (clip->y < 0) | ||
336 | { | ||
337 | clip->h += clip->y; | ||
338 | clip->y = 0; | ||
339 | } | ||
340 | if ((clip->x + clip->w) > (int)im->cache_entry.w) clip->w = im->cache_entry.w - clip->x; | ||
341 | if ((clip->y + clip->h) > (int)im->cache_entry.h) clip->h = im->cache_entry.h - clip->y; | ||
342 | } | ||
343 | else | ||
344 | { | ||
345 | EINA_RECTANGLE_SET(clip, 0, 0, im->cache_entry.w, im->cache_entry.h); | ||
346 | } | ||
347 | } | ||
348 | |||
349 | static inline int | ||
350 | _is_empty_rectangle(const Eina_Rectangle *r) | ||
351 | { | ||
352 | return (r->w < 1) || (r->h < 1); | ||
353 | } | ||
354 | |||
355 | static inline void | ||
356 | _shrink(int *s_pos, int *s_size, int pos, int size) | ||
357 | { | ||
358 | int d; | ||
359 | |||
360 | d = (*s_pos) - pos; | ||
361 | if (d < 0) | ||
362 | { | ||
363 | (*s_size) += d; | ||
364 | (*s_pos) = pos; | ||
365 | } | ||
366 | |||
367 | d = size + pos - (*s_pos); | ||
368 | if ((*s_size) > d) | ||
369 | (*s_size) = d; | ||
370 | } | ||
371 | |||
372 | static int | ||
373 | _soft16_adjust_areas(Eina_Rectangle *src, | ||
374 | int src_max_x, int src_max_y, | ||
375 | Eina_Rectangle *dst, | ||
376 | int dst_max_x, int dst_max_y, | ||
377 | Eina_Rectangle *dst_clip) | ||
378 | { | ||
379 | if (_is_empty_rectangle(src) || | ||
380 | _is_empty_rectangle(dst) || | ||
381 | _is_empty_rectangle(dst_clip)) | ||
382 | return 0; | ||
383 | |||
384 | /* shrink clip */ | ||
385 | _shrink(&dst_clip->x, &dst_clip->w, dst->x, dst->w); | ||
386 | _shrink(&dst_clip->y, &dst_clip->h, dst->y, dst->h); | ||
387 | if (_is_empty_rectangle(dst_clip)) return 0; | ||
388 | |||
389 | /* sanitise x */ | ||
390 | if (src->x < 0) | ||
391 | { | ||
392 | dst->x -= (src->x * dst->w) / src->w; | ||
393 | dst->w += (src->x * dst->w) / src->w; | ||
394 | src->w += src->x; | ||
395 | src->x = 0; | ||
396 | } | ||
397 | if (src->x >= src_max_x) return 0; | ||
398 | if ((src->x + src->w) > src_max_x) | ||
399 | { | ||
400 | dst->w = (dst->w * (src_max_x - src->x)) / (src->w); | ||
401 | src->w = src_max_x - src->x; | ||
402 | } | ||
403 | if (dst->w <= 0) return 0; | ||
404 | if (src->w <= 0) return 0; | ||
405 | if (dst_clip->x < 0) | ||
406 | { | ||
407 | dst_clip->w += dst_clip->x; | ||
408 | dst_clip->x = 0; | ||
409 | } | ||
410 | if (dst_clip->w <= 0) return 0; | ||
411 | if (dst_clip->x >= dst_max_x) return 0; | ||
412 | |||
413 | _shrink(&dst_clip->x, &dst_clip->w, 0, dst_max_x); | ||
414 | if (dst_clip->w <= 0) return 0; | ||
415 | |||
416 | /* sanitise y */ | ||
417 | if (src->y < 0) | ||
418 | { | ||
419 | dst->y -= (src->y * dst->h) / src->h; | ||
420 | dst->h += (src->y * dst->h) / src->h; | ||
421 | src->h += src->y; | ||
422 | src->y = 0; | ||
423 | } | ||
424 | if (src->y >= src_max_y) return 0; | ||
425 | if ((src->y + src->h) > src_max_y) | ||
426 | { | ||
427 | dst->h = (dst->h * (src_max_y - src->y)) / (src->h); | ||
428 | src->h = src_max_y - src->y; | ||
429 | } | ||
430 | if (dst->h <= 0) return 0; | ||
431 | if (src->h <= 0) return 0; | ||
432 | if (dst_clip->y < 0) | ||
433 | { | ||
434 | dst_clip->h += dst_clip->y; | ||
435 | dst_clip->y = 0; | ||
436 | } | ||
437 | if (dst_clip->h <= 0) return 0; | ||
438 | if (dst_clip->y >= dst_max_y) return 0; | ||
439 | |||
440 | _shrink(&dst_clip->y, &dst_clip->h, 0, dst_max_y); | ||
441 | if (dst_clip->h <= 0) return 0; | ||
442 | |||
443 | return 1; | ||
444 | } | ||
445 | |||
446 | static void | ||
447 | _soft16_image_draw_sampled_int(Soft16_Image *src, Soft16_Image *dst, | ||
448 | RGBA_Draw_Context *dc, | ||
449 | Eina_Rectangle sr, Eina_Rectangle dr) | ||
450 | { | ||
451 | Eina_Rectangle cr; | ||
452 | |||
453 | if (!(RECTS_INTERSECT(dr.x, dr.y, dr.w, dr.h, 0, 0, dst->cache_entry.w, dst->cache_entry.h))) | ||
454 | return; | ||
455 | if (!(RECTS_INTERSECT(sr.x, sr.y, sr.w, sr.h, 0, 0, src->cache_entry.w, src->cache_entry.h))) | ||
456 | return; | ||
457 | |||
458 | _get_clip(dc, dst, &cr); | ||
459 | if (!_soft16_adjust_areas(&sr, src->cache_entry.w, src->cache_entry.h, &dr, dst->cache_entry.w, dst->cache_entry.h, &cr)) | ||
460 | return; | ||
461 | |||
462 | if ((dr.w == sr.w) && (dr.h == sr.h)) | ||
463 | evas_common_soft16_image_draw_unscaled(src, dst, dc, sr, dr, cr); | ||
464 | else | ||
465 | evas_common_soft16_image_draw_scaled_sampled(src, dst, dc, sr, dr, cr); | ||
466 | } | ||
467 | |||
468 | EAPI void | ||
469 | evas_common_soft16_image_draw(Soft16_Image *src, Soft16_Image *dst, | ||
470 | RGBA_Draw_Context *dc, | ||
471 | int src_region_x, int src_region_y, | ||
472 | int src_region_w, int src_region_h, | ||
473 | int dst_region_x, int dst_region_y, | ||
474 | int dst_region_w, int dst_region_h, | ||
475 | int smooth __UNUSED__) | ||
476 | { | ||
477 | Eina_Rectangle sr, dr; | ||
478 | Cutout_Rects *rects; | ||
479 | Cutout_Rect *r; | ||
480 | struct RGBA_Draw_Context_clip clip_bkp; | ||
481 | int i; | ||
482 | |||
483 | /* handle cutouts here! */ | ||
484 | EINA_RECTANGLE_SET(&dr, dst_region_x, dst_region_y, dst_region_w, dst_region_h); | ||
485 | |||
486 | if (_is_empty_rectangle(&dr)) return; | ||
487 | if (!(RECTS_INTERSECT(dr.x, dr.y, dr.w, dr.h, 0, 0, dst->cache_entry.w, dst->cache_entry.h))) | ||
488 | return; | ||
489 | |||
490 | EINA_RECTANGLE_SET(&sr, src_region_x, src_region_y, src_region_w, src_region_h); | ||
491 | |||
492 | if (_is_empty_rectangle(&sr)) return; | ||
493 | if (!(RECTS_INTERSECT(sr.x, sr.y, sr.w, sr.h, 0, 0, src->cache_entry.w, src->cache_entry.h))) | ||
494 | return; | ||
495 | |||
496 | /* no cutouts - cut right to the chase */ | ||
497 | if (!dc->cutout.rects) | ||
498 | { | ||
499 | _soft16_image_draw_sampled_int(src, dst, dc, sr, dr); | ||
500 | return; | ||
501 | } | ||
502 | |||
503 | /* save out clip info */ | ||
504 | clip_bkp = dc->clip; | ||
505 | evas_common_draw_context_clip_clip(dc, 0, 0, dst->cache_entry.w, dst->cache_entry.h); | ||
506 | evas_common_draw_context_clip_clip(dc, dst_region_x, dst_region_y, dst_region_w, dst_region_h); | ||
507 | /* our clip is 0 size.. abort */ | ||
508 | if ((dc->clip.w <= 0) || (dc->clip.h <= 0)) | ||
509 | { | ||
510 | dc->clip = clip_bkp; | ||
511 | return; | ||
512 | } | ||
513 | rects = evas_common_draw_context_apply_cutouts(dc); | ||
514 | for (i = 0; i < rects->active; i++) | ||
515 | { | ||
516 | r = rects->rects + i; | ||
517 | evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h); | ||
518 | _soft16_image_draw_sampled_int(src, dst, dc, sr, dr); | ||
519 | } | ||
520 | evas_common_draw_context_apply_clear_cutouts(rects); | ||
521 | dc->clip = clip_bkp; | ||
522 | } | ||
523 | |||
524 | EAPI Soft16_Image * | ||
525 | evas_common_soft16_image_alpha_set(Soft16_Image *im, int have_alpha) | ||
526 | { | ||
527 | Soft16_Image *new_im; | ||
528 | |||
529 | if (im->cache_entry.flags.alpha == have_alpha) return im; | ||
530 | |||
531 | new_im = (Soft16_Image *) evas_cache_image_alone(&im->cache_entry); | ||
532 | |||
533 | new_im->cache_entry.flags.alpha = have_alpha; | ||
534 | |||
535 | if (im->cache_entry.w > 0 | ||
536 | && im->cache_entry.h) | ||
537 | new_im = (Soft16_Image *) evas_cache_image_size_set(&new_im->cache_entry, im->cache_entry.w, im->cache_entry.h); | ||
538 | |||
539 | return new_im; | ||
540 | } | ||
541 | |||
542 | /* Soft16_Image * */ | ||
543 | /* evas_common_soft16_image_size_set(Soft16_Image *old_im, int w, int h) */ | ||
544 | /* { */ | ||
545 | /* Soft16_Image *new_im; */ | ||
546 | /* DATA16 *dp, *sp; */ | ||
547 | /* int i, cw, ch, ew; */ | ||
548 | |||
549 | /* if ((old_im->cache_entry.w == w) && (old_im->cache_entry.h == h)) return old_im; */ | ||
550 | |||
551 | /* new_im = evas_common_soft16_image_new(w, h, -1, old_im->flags.have_alpha, NULL, 1); */ | ||
552 | |||
553 | /* if (old_im->cache_entry.w < new_im->cache_entry.w) */ | ||
554 | /* cw = old_im->cache_entry.w; */ | ||
555 | /* else */ | ||
556 | /* cw = new_im->cache_entry.w; */ | ||
557 | |||
558 | /* ew = new_im->cache_entry.w - cw; */ | ||
559 | |||
560 | /* if (old_im->cache_entry.h < new_im->cache_entry.h) */ | ||
561 | /* ch = old_im->cache_entry.h; */ | ||
562 | /* else */ | ||
563 | /* ch = new_im->cache_entry.h; */ | ||
564 | |||
565 | /* dp = new_im->pixels; */ | ||
566 | /* sp = old_im->pixels; */ | ||
567 | /* for (i = 0; i < ch; i++) */ | ||
568 | /* { */ | ||
569 | /* memcpy(dp, sp, cw * sizeof(DATA16)); */ | ||
570 | /* if (ew > 0) memset(dp, 0, ew * sizeof(DATA16)); */ | ||
571 | |||
572 | /* dp += new_im->stride; */ | ||
573 | /* sp += old_im->stride; */ | ||
574 | /* } */ | ||
575 | |||
576 | /* if (old_im->flags.have_alpha) */ | ||
577 | /* { */ | ||
578 | /* DATA8 *dp, *sp; */ | ||
579 | |||
580 | /* dp = new_im->alpha; */ | ||
581 | /* sp = old_im->alpha; */ | ||
582 | /* for (i = 0; i < ch; i++) */ | ||
583 | /* { */ | ||
584 | /* memcpy(dp, sp, cw * sizeof(DATA8)); */ | ||
585 | /* if (ew > 0) memset(dp, 0, ew * sizeof(DATA8)); */ | ||
586 | |||
587 | /* dp += new_im->stride; */ | ||
588 | /* sp += old_im->stride; */ | ||
589 | /* } */ | ||
590 | /* } */ | ||
591 | |||
592 | /* evas_cache_image_drop(&old_im->cache_entry); */ | ||
593 | /* return new_im; */ | ||
594 | /* } */ | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_point_blend.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_point_blend.c new file mode 100644 index 0000000..8cd02d5 --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_point_blend.c | |||
@@ -0,0 +1,149 @@ | |||
1 | /** NOTE: This file is meant to be included by users **/ | ||
2 | |||
3 | /** NOTE2: r, g, b parameters are 16bits, so you can pass 0 to 256 inclusive. | ||
4 | ** this is due our division by 256 when multiplying the color. | ||
5 | **/ | ||
6 | |||
7 | /***************************************************************************** | ||
8 | * Scanline processing | ||
9 | * | ||
10 | * _soft16_pt_<description>_<src>_<dst>[_<modifier>]() | ||
11 | * | ||
12 | ****************************************************************************/ | ||
13 | |||
14 | /*********************************************************************** | ||
15 | * Regular blend operations | ||
16 | */ | ||
17 | |||
18 | EFL_ALWAYS_INLINE void | ||
19 | _soft16_pt_blend_transp_solid(DATA16 *p_dst, DATA16 src, DATA8 alpha) | ||
20 | { | ||
21 | if (alpha == 31) *p_dst = src; | ||
22 | else if (alpha != 0) | ||
23 | { | ||
24 | DATA32 a, b; | ||
25 | |||
26 | a = RGB_565_UNPACK(src); | ||
27 | b = RGB_565_UNPACK(*p_dst); | ||
28 | b = RGB_565_UNPACKED_BLEND(a, b, alpha); | ||
29 | *p_dst = RGB_565_PACK(b); | ||
30 | } | ||
31 | } | ||
32 | |||
33 | EFL_ALWAYS_INLINE void | ||
34 | _soft16_pt_blend_solid_solid(DATA16 *p_dst, DATA16 src) | ||
35 | { | ||
36 | *p_dst = src; | ||
37 | } | ||
38 | |||
39 | /*********************************************************************** | ||
40 | * Blend operations taking an extra alpha (fade in, out) | ||
41 | */ | ||
42 | |||
43 | EFL_ALWAYS_INLINE void | ||
44 | _soft16_pt_blend_transp_solid_mul_alpha(DATA16 *p_dst, DATA16 src, DATA8 alpha, DATA8 rel_alpha) | ||
45 | { | ||
46 | DATA32 a, b; | ||
47 | |||
48 | alpha = (alpha * rel_alpha) >> 5; | ||
49 | if (alpha == 0) | ||
50 | return; | ||
51 | |||
52 | alpha++; | ||
53 | |||
54 | a = ((RGB_565_UNPACK(src) * rel_alpha) >> 5) & RGB_565_UNPACKED_MASK; | ||
55 | b = RGB_565_UNPACK(*p_dst); | ||
56 | b = RGB_565_UNPACKED_BLEND(a, b, alpha); | ||
57 | *p_dst = RGB_565_PACK(b); | ||
58 | } | ||
59 | |||
60 | EFL_ALWAYS_INLINE void | ||
61 | _soft16_pt_blend_solid_solid_mul_alpha(DATA16 *p_dst, DATA16 src, DATA8 rel_alpha) | ||
62 | { | ||
63 | DATA32 a, b; | ||
64 | a = RGB_565_UNPACK(src); | ||
65 | b = RGB_565_UNPACK(*p_dst); | ||
66 | b = RGB_565_UNPACKED_BLEND_UNMUL(a, b, rel_alpha); | ||
67 | *p_dst = RGB_565_PACK(b); | ||
68 | } | ||
69 | |||
70 | /*********************************************************************** | ||
71 | * Blend operations with extra alpha and multiply color | ||
72 | */ | ||
73 | |||
74 | EFL_ALWAYS_INLINE void | ||
75 | _soft16_pt_blend_transp_solid_mul_color_transp(DATA16 *p_dst, DATA16 src, DATA8 alpha, DATA8 rel_alpha, DATA16 r, DATA16 g, DATA16 b) | ||
76 | { | ||
77 | DATA32 rgb, d; | ||
78 | int r1, g1, b1; | ||
79 | |||
80 | alpha = (alpha * rel_alpha) >> 5; | ||
81 | if (alpha == 0) | ||
82 | return; | ||
83 | |||
84 | alpha++; | ||
85 | |||
86 | r1 = ((((src) >> 11) & 0x1f) * r) >> 5; | ||
87 | g1 = ((((src) >> 5) & 0x3f) * g) >> 6; | ||
88 | b1 = (((src) & 0x1f) * b) >> 5; | ||
89 | rgb = ((r1 << 11) | (g1 << 21) | b1) & RGB_565_UNPACKED_MASK; | ||
90 | d = RGB_565_UNPACK(*p_dst); | ||
91 | d = RGB_565_UNPACKED_BLEND(rgb, d, alpha); | ||
92 | |||
93 | *p_dst = RGB_565_PACK(d); | ||
94 | } | ||
95 | |||
96 | EFL_ALWAYS_INLINE void | ||
97 | _soft16_pt_blend_solid_solid_mul_color_transp(DATA16 *p_dst, DATA16 src, DATA8 rel_alpha, DATA16 r, DATA16 g, DATA16 b) | ||
98 | { | ||
99 | int r1, g1, b1; | ||
100 | DATA32 rgb, d; | ||
101 | |||
102 | r1 = ((((src) >> 11) & 0x1f) * r) >> 5; | ||
103 | g1 = ((((src) >> 5) & 0x3f) * g) >> 6; | ||
104 | b1 = (((src) & 0x1f) * b) >> 5; | ||
105 | |||
106 | rgb = ((r1 << 11) | (g1 << 21) | b1) & RGB_565_UNPACKED_MASK; | ||
107 | d = RGB_565_UNPACK(*p_dst); | ||
108 | d = RGB_565_UNPACKED_BLEND(rgb, d, rel_alpha); | ||
109 | *p_dst = RGB_565_PACK(d); | ||
110 | } | ||
111 | |||
112 | /*********************************************************************** | ||
113 | * Blend operations with extra multiply color | ||
114 | */ | ||
115 | |||
116 | EFL_ALWAYS_INLINE void | ||
117 | _soft16_pt_blend_transp_solid_mul_color_solid(DATA16 *p_dst, DATA16 src, DATA8 alpha, DATA8 r, DATA8 g, DATA8 b) | ||
118 | { | ||
119 | int r1, g1, b1; | ||
120 | |||
121 | if (alpha == 0) return; | ||
122 | |||
123 | r1 = ((((src >> 11) & 0x1f) * r) >> 5) & 0x1f; | ||
124 | g1 = ((((src >> 5) & 0x3f) * g) >> 6) & 0x3f; | ||
125 | b1 = (((src & 0x1f) * b) >> 5) & 0x1f; | ||
126 | |||
127 | if (alpha == 31) *p_dst = (r1 << 11) | (g1 << 5) | b1; | ||
128 | else | ||
129 | { | ||
130 | DATA32 rgb_unpack, d; | ||
131 | |||
132 | rgb_unpack = ((r1 << 11) | (g1 << 21) | b1) & RGB_565_UNPACKED_MASK; | ||
133 | d = RGB_565_UNPACK(*p_dst); | ||
134 | d = RGB_565_UNPACKED_BLEND(rgb_unpack, d, alpha); | ||
135 | *p_dst = RGB_565_PACK(d); | ||
136 | } | ||
137 | } | ||
138 | |||
139 | EFL_ALWAYS_INLINE void | ||
140 | _soft16_pt_blend_solid_solid_mul_color_solid(DATA16 *p_dst, DATA16 src, DATA16 r, DATA16 g, DATA16 b) | ||
141 | { | ||
142 | int r1, g1, b1; | ||
143 | |||
144 | r1 = ((((src >> 11) & 0x1f) * r) >> 5) & 0x1f; | ||
145 | g1 = ((((src >> 5) & 0x3f) * g) >> 6) & 0x3f; | ||
146 | b1 = (((src & 0x1f) * b) >> 5) & 0x1f; | ||
147 | |||
148 | *p_dst = (r1 << 11) | (g1 << 5) | b1; | ||
149 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_polygon.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_polygon.c new file mode 100644 index 0000000..ca18bef --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_polygon.c | |||
@@ -0,0 +1,231 @@ | |||
1 | #include <math.h> | ||
2 | #include <evas_common_soft16.h> | ||
3 | #include "evas_soft16_scanline_fill.c" | ||
4 | |||
5 | typedef struct _RGBA_Edge RGBA_Edge; | ||
6 | typedef struct _RGBA_Vertex RGBA_Vertex; | ||
7 | |||
8 | struct _RGBA_Edge | ||
9 | { | ||
10 | float x, dx; | ||
11 | int i; | ||
12 | }; | ||
13 | |||
14 | struct _RGBA_Vertex | ||
15 | { | ||
16 | float x, y; | ||
17 | int i; | ||
18 | }; | ||
19 | |||
20 | #define POLY_EDGE_DEL(_i) \ | ||
21 | { \ | ||
22 | int _j; \ | ||
23 | \ | ||
24 | for (_j = 0; (_j < num_active_edges) && (edges[_j].i != _i); _j++); \ | ||
25 | if (_j < num_active_edges) \ | ||
26 | { \ | ||
27 | num_active_edges--; \ | ||
28 | memmove(&(edges[_j]), &(edges[_j + 1]), \ | ||
29 | (num_active_edges - _j) * sizeof(RGBA_Edge)); \ | ||
30 | } \ | ||
31 | } | ||
32 | |||
33 | #define POLY_EDGE_ADD(_i, _y) \ | ||
34 | { \ | ||
35 | int _j; \ | ||
36 | float _dx; \ | ||
37 | RGBA_Vertex *_p, *_q; \ | ||
38 | if (_i < (n - 1)) _j = _i + 1; \ | ||
39 | else _j = 0; \ | ||
40 | if (point[_i].y < point[_j].y) \ | ||
41 | { \ | ||
42 | _p = &(point[_i]); \ | ||
43 | _q = &(point[_j]); \ | ||
44 | } \ | ||
45 | else \ | ||
46 | { \ | ||
47 | _p = &(point[_j]); \ | ||
48 | _q = &(point[_i]); \ | ||
49 | } \ | ||
50 | edges[num_active_edges].dx = _dx = (_q->x - _p->x) / (_q->y - _p->y); \ | ||
51 | edges[num_active_edges].x = (_dx * ((float)_y + 0.5 - _p->y)) + _p->x; \ | ||
52 | edges[num_active_edges].i = _i; \ | ||
53 | num_active_edges++; \ | ||
54 | } | ||
55 | |||
56 | static int | ||
57 | polygon_point_sorter(const void *a, const void *b) | ||
58 | { | ||
59 | RGBA_Vertex *p, *q; | ||
60 | |||
61 | p = (RGBA_Vertex *)a; | ||
62 | q = (RGBA_Vertex *)b; | ||
63 | if (p->y <= q->y) return -1; | ||
64 | return 1; | ||
65 | } | ||
66 | |||
67 | static int | ||
68 | polygon_edge_sorter(const void *a, const void *b) | ||
69 | { | ||
70 | RGBA_Edge *p, *q; | ||
71 | |||
72 | p = (RGBA_Edge *)a; | ||
73 | q = (RGBA_Edge *)b; | ||
74 | if (p->x <= q->x) return -1; | ||
75 | return 1; | ||
76 | } | ||
77 | |||
78 | void | ||
79 | evas_common_soft16_polygon_draw(Soft16_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y) | ||
80 | { | ||
81 | RGBA_Polygon_Point *pt; | ||
82 | RGBA_Vertex *point; | ||
83 | RGBA_Edge *edges; | ||
84 | int num_active_edges; | ||
85 | int n; | ||
86 | int i, j, k; | ||
87 | int y0, y1, yi; | ||
88 | int ext_x, ext_y, ext_w, ext_h; | ||
89 | int *sorted_index; | ||
90 | DATA8 alpha; | ||
91 | DATA16 rgb565; | ||
92 | DATA32 rgb565_unpack; | ||
93 | |||
94 | alpha = A_VAL(&dc->col.col) >> 3; | ||
95 | if (alpha == 0) | ||
96 | return; | ||
97 | alpha++; | ||
98 | |||
99 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
100 | G_VAL(&dc->col.col), | ||
101 | B_VAL(&dc->col.col)); | ||
102 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
103 | |||
104 | ext_x = 0; | ||
105 | ext_y = 0; | ||
106 | ext_w = dst->cache_entry.w; | ||
107 | ext_h = dst->cache_entry.h; | ||
108 | if (dc->clip.use) | ||
109 | RECTS_CLIP_TO_RECT(ext_x, ext_y, ext_w, ext_h, | ||
110 | dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); | ||
111 | |||
112 | if ((ext_w <= 0) || (ext_h <= 0)) | ||
113 | return; | ||
114 | |||
115 | n = 0; | ||
116 | EINA_INLIST_FOREACH(points, pt) n++; | ||
117 | |||
118 | if (n < 3) | ||
119 | return; | ||
120 | |||
121 | edges = malloc(sizeof(RGBA_Edge) * n); | ||
122 | if (!edges) | ||
123 | return; | ||
124 | |||
125 | point = malloc(sizeof(RGBA_Vertex) * n); | ||
126 | if (!point) | ||
127 | { | ||
128 | free(edges); | ||
129 | return; | ||
130 | } | ||
131 | |||
132 | sorted_index = malloc(sizeof(int) * n); | ||
133 | if (!sorted_index) | ||
134 | { | ||
135 | free(edges); | ||
136 | free(point); | ||
137 | return; | ||
138 | } | ||
139 | |||
140 | k = 0; | ||
141 | EINA_INLIST_FOREACH(points, pt) | ||
142 | { | ||
143 | point[k].x = pt->x + x; | ||
144 | point[k].y = pt->y + y; | ||
145 | point[k].i = k; | ||
146 | k++; | ||
147 | } | ||
148 | qsort(point, n, sizeof(RGBA_Vertex), polygon_point_sorter); | ||
149 | |||
150 | for (k = 0; k < n; k++) | ||
151 | sorted_index[k] = point[k].i; | ||
152 | |||
153 | k = 0; | ||
154 | EINA_INLIST_FOREACH(points, pt) | ||
155 | { | ||
156 | point[k].x = pt->x + x; | ||
157 | point[k].y = pt->y + y; | ||
158 | point[k].i = k; | ||
159 | k++; | ||
160 | } | ||
161 | |||
162 | y0 = MAX(ext_y, ceil(point[sorted_index[0]].y - 0.5)); | ||
163 | y1 = MIN(ext_y + ext_h - 1, floor(point[sorted_index[n - 1]].y - 0.5)); | ||
164 | |||
165 | k = 0; | ||
166 | num_active_edges = 0; | ||
167 | |||
168 | for (yi = y0; yi <= y1; yi++) | ||
169 | { | ||
170 | for (; (k < n) && (point[sorted_index[k]].y <= ((float)yi + 0.5)); k++) | ||
171 | { | ||
172 | i = sorted_index[k]; | ||
173 | |||
174 | if (i > 0) j = i - 1; | ||
175 | else j = n - 1; | ||
176 | if (point[j].y <= ((float)yi - 0.5)) | ||
177 | { | ||
178 | POLY_EDGE_DEL(j) | ||
179 | } | ||
180 | else if (point[j].y > ((float)yi + 0.5)) | ||
181 | { | ||
182 | POLY_EDGE_ADD(j, yi) | ||
183 | } | ||
184 | if (i < (n - 1)) j = i + 1; | ||
185 | else j = 0; | ||
186 | if (point[j].y <= ((float)yi - 0.5)) | ||
187 | { | ||
188 | POLY_EDGE_DEL(i) | ||
189 | } | ||
190 | else if (point[j].y > ((float)yi + 0.5)) | ||
191 | { | ||
192 | POLY_EDGE_ADD(i, yi) | ||
193 | } | ||
194 | } | ||
195 | |||
196 | qsort(edges, num_active_edges, sizeof(RGBA_Edge), polygon_edge_sorter); | ||
197 | |||
198 | for (j = 0; j < num_active_edges; j += 2) | ||
199 | { | ||
200 | int x0, x1; | ||
201 | |||
202 | x0 = ceil(edges[j].x - 0.5); | ||
203 | if (j < (num_active_edges - 1)) | ||
204 | x1 = floor(edges[j + 1].x - 0.5); | ||
205 | else | ||
206 | x1 = x0; | ||
207 | if ((x1 >= ext_x) && (x0 < (ext_x + ext_w)) && (x0 <= x1)) | ||
208 | { | ||
209 | DATA16 *dst_itr; | ||
210 | int w; | ||
211 | |||
212 | if (x0 < ext_x) x0 = ext_x; | ||
213 | if (x1 >= (ext_x + ext_w)) x1 = ext_x + ext_w - 1; | ||
214 | |||
215 | w = (x1 - x0) + 1; | ||
216 | dst_itr = dst->pixels + (yi * dst->stride) + x0; | ||
217 | |||
218 | if (alpha == 32) | ||
219 | _soft16_scanline_fill_solid_solid(dst_itr, w, rgb565); | ||
220 | else | ||
221 | _soft16_scanline_fill_transp_solid(dst_itr, w, rgb565_unpack, alpha); | ||
222 | } | ||
223 | edges[j].x += edges[j].dx; | ||
224 | edges[j + 1].x += edges[j + 1].dx; | ||
225 | } | ||
226 | } | ||
227 | |||
228 | free(edges); | ||
229 | free(point); | ||
230 | free(sorted_index); | ||
231 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_rectangle.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_rectangle.c new file mode 100644 index 0000000..bd38fce --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_rectangle.c | |||
@@ -0,0 +1,121 @@ | |||
1 | #include "evas_common_soft16.h" | ||
2 | #include "evas_soft16_scanline_fill.c" | ||
3 | |||
4 | static inline int | ||
5 | _is_empty_rectangle(const Eina_Rectangle *r) | ||
6 | { | ||
7 | return (r->w < 1) || (r->h < 1); | ||
8 | } | ||
9 | |||
10 | static inline void | ||
11 | _soft16_rectangle_draw_solid_solid(Soft16_Image *dst, int offset, int w, int h, | ||
12 | DATA16 rgb565) | ||
13 | { | ||
14 | DATA16 *dst_itr; | ||
15 | int i; | ||
16 | |||
17 | dst_itr = dst->pixels + offset; | ||
18 | |||
19 | for (i = 0; i < h; i++, dst_itr += dst->stride) | ||
20 | _soft16_scanline_fill_solid_solid(dst_itr, w, rgb565); | ||
21 | } | ||
22 | |||
23 | static inline void | ||
24 | _soft16_rectangle_draw_transp_solid(Soft16_Image *dst, int offset, int w, int h, | ||
25 | DATA16 rgb565, DATA8 alpha) | ||
26 | { | ||
27 | DATA16 *dst_itr; | ||
28 | DATA32 rgb565_unpack; | ||
29 | int i; | ||
30 | |||
31 | dst_itr = dst->pixels + offset; | ||
32 | rgb565_unpack = RGB_565_UNPACK(rgb565); | ||
33 | alpha++; | ||
34 | |||
35 | for (i = 0; i < h; i++, dst_itr += dst->stride) | ||
36 | _soft16_scanline_fill_transp_solid(dst_itr, w, rgb565_unpack, alpha); | ||
37 | } | ||
38 | |||
39 | static void | ||
40 | _soft16_rectangle_draw_int(Soft16_Image *dst, RGBA_Draw_Context *dc, | ||
41 | Eina_Rectangle dr) | ||
42 | { | ||
43 | int dst_offset; | ||
44 | |||
45 | if (_is_empty_rectangle(&dr)) return; | ||
46 | RECTS_CLIP_TO_RECT(dr.x, dr.y, dr.w, dr.h, 0, 0, dst->cache_entry.w, dst->cache_entry.h); | ||
47 | if (_is_empty_rectangle(&dr)) return; | ||
48 | |||
49 | if (dc->clip.use) | ||
50 | RECTS_CLIP_TO_RECT(dr.x, dr.y, dr.w, dr.h, dc->clip.x, | ||
51 | dc->clip.y, dc->clip.w, dc->clip.h); | ||
52 | if (_is_empty_rectangle(&dr)) return; | ||
53 | if (A_VAL(&dc->col.col) == 0) return; | ||
54 | |||
55 | dst_offset = dr.x + (dr.y * dst->cache_entry.w); | ||
56 | |||
57 | if (!dst->cache_entry.flags.alpha) | ||
58 | { | ||
59 | DATA16 rgb565; | ||
60 | DATA8 alpha; | ||
61 | |||
62 | alpha = A_VAL(&dc->col.col) >> 3; | ||
63 | rgb565 = RGB_565_FROM_COMPONENTS(R_VAL(&dc->col.col), | ||
64 | G_VAL(&dc->col.col), | ||
65 | B_VAL(&dc->col.col)); | ||
66 | if (alpha == 31) | ||
67 | _soft16_rectangle_draw_solid_solid | ||
68 | (dst, dst_offset, dr.w, dr.h, rgb565); | ||
69 | else if (alpha > 0) | ||
70 | _soft16_rectangle_draw_transp_solid | ||
71 | (dst, dst_offset, dr.w, dr.h, rgb565, alpha); | ||
72 | } | ||
73 | else | ||
74 | ERR("Unsupported feature: drawing rectangle to non-opaque destination."); | ||
75 | } | ||
76 | |||
77 | void | ||
78 | evas_common_soft16_rectangle_draw(Soft16_Image *dst, RGBA_Draw_Context *dc, | ||
79 | int x, int y, int w, int h) | ||
80 | { | ||
81 | Eina_Rectangle dr; | ||
82 | Cutout_Rects *rects; | ||
83 | Cutout_Rect *r; | ||
84 | struct RGBA_Draw_Context_clip c_bkp; | ||
85 | int i; | ||
86 | |||
87 | /* handle cutouts here! */ | ||
88 | EINA_RECTANGLE_SET(&dr, x, y, w, h); | ||
89 | |||
90 | if (_is_empty_rectangle(&dr)) return; | ||
91 | if (!(RECTS_INTERSECT(dr.x, dr.y, dr.w, dr.h, 0, 0, dst->cache_entry.w, dst->cache_entry.h))) | ||
92 | return; | ||
93 | |||
94 | /* no cutouts - cut right to the chase */ | ||
95 | if (!dc->cutout.rects) | ||
96 | { | ||
97 | _soft16_rectangle_draw_int(dst, dc, dr); | ||
98 | return; | ||
99 | } | ||
100 | |||
101 | c_bkp = dc->clip; | ||
102 | |||
103 | evas_common_draw_context_clip_clip(dc, 0, 0, dst->cache_entry.w, dst->cache_entry.h); | ||
104 | evas_common_draw_context_clip_clip(dc, x, y, w, h); | ||
105 | /* our clip is 0 size.. abort */ | ||
106 | if ((dc->clip.w <= 0) || (dc->clip.h <= 0)) | ||
107 | { | ||
108 | dc->clip = c_bkp; | ||
109 | return; | ||
110 | } | ||
111 | rects = evas_common_draw_context_apply_cutouts(dc); | ||
112 | for (i = 0; i < rects->active; ++i) | ||
113 | { | ||
114 | r = rects->rects + i; | ||
115 | evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h); | ||
116 | _soft16_rectangle_draw_int(dst, dc, dr); | ||
117 | } | ||
118 | evas_common_draw_context_apply_clear_cutouts(rects); | ||
119 | dc->clip = c_bkp; | ||
120 | } | ||
121 | |||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_scanline_blend.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_scanline_blend.c new file mode 100644 index 0000000..c89eeaa --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_scanline_blend.c | |||
@@ -0,0 +1,353 @@ | |||
1 | /** NOTE: This file is meant to be included by users **/ | ||
2 | |||
3 | /** NOTE2: r, g, b parameters are 16bits, so you can pass 0 to 256 inclusive. | ||
4 | ** this is due our division by 256 when multiplying the color. | ||
5 | **/ | ||
6 | |||
7 | /***************************************************************************** | ||
8 | * Scanline processing | ||
9 | * | ||
10 | * _soft16_scanline_<description>_<src>_<dst>[_<modifier>]() | ||
11 | * | ||
12 | ****************************************************************************/ | ||
13 | |||
14 | #include "evas_soft16_point_blend.c" | ||
15 | |||
16 | /*********************************************************************** | ||
17 | * Regular blend operations | ||
18 | */ | ||
19 | static void | ||
20 | _soft16_scanline_blend_transp_solid(DATA16 *src, DATA8 *alpha, DATA16 *dst, int size) | ||
21 | { | ||
22 | DATA16 *start, *end; | ||
23 | |||
24 | start = dst; | ||
25 | end = start + (size & ~7); | ||
26 | |||
27 | pld(alpha, 0); | ||
28 | pld(src, 0); | ||
29 | |||
30 | /* work on 8 pixels per time, do data preload */ | ||
31 | while (start < end) | ||
32 | { | ||
33 | DATA8 alpha1, alpha2; | ||
34 | |||
35 | alpha1 = alpha[0]; | ||
36 | alpha += 8; | ||
37 | |||
38 | /* empirical tests show these give the best performance */ | ||
39 | pld(alpha, 8); | ||
40 | pld(src, 32); | ||
41 | |||
42 | src += 8; | ||
43 | start += 8; | ||
44 | |||
45 | alpha2 = alpha[-7]; | ||
46 | _soft16_pt_blend_transp_solid(start - 8, src[-8], alpha1); | ||
47 | |||
48 | alpha1 = alpha[-6]; | ||
49 | _soft16_pt_blend_transp_solid(start - 7, src[-7], alpha2); | ||
50 | |||
51 | alpha2 = alpha[-5]; | ||
52 | _soft16_pt_blend_transp_solid(start - 6, src[-6], alpha1); | ||
53 | |||
54 | alpha1 = alpha[-4]; | ||
55 | _soft16_pt_blend_transp_solid(start - 5, src[-5], alpha2); | ||
56 | |||
57 | alpha2 = alpha[-3]; | ||
58 | _soft16_pt_blend_transp_solid(start - 4, src[-4], alpha1); | ||
59 | |||
60 | alpha1 = alpha[-2]; | ||
61 | _soft16_pt_blend_transp_solid(start - 3, src[-3], alpha2); | ||
62 | |||
63 | alpha2 = alpha[-1]; | ||
64 | _soft16_pt_blend_transp_solid(start - 2, src[-2], alpha1); | ||
65 | |||
66 | _soft16_pt_blend_transp_solid(start - 1, src[-1], alpha2); | ||
67 | } | ||
68 | |||
69 | /* remaining pixels (up to 7) */ | ||
70 | end = start + (size & 7); | ||
71 | for (; start < end; start++, src++, alpha++) | ||
72 | _soft16_pt_blend_transp_solid(start, *src, *alpha); | ||
73 | } | ||
74 | |||
75 | static inline void | ||
76 | _soft16_scanline_blend_solid_solid(DATA16 *src, DATA16 *dst, int size) | ||
77 | { | ||
78 | memcpy(dst, src, size * sizeof(DATA16)); | ||
79 | } | ||
80 | |||
81 | /*********************************************************************** | ||
82 | * Blend operations taking an extra alpha (fade in, out) | ||
83 | */ | ||
84 | |||
85 | static void | ||
86 | _soft16_scanline_blend_transp_solid_mul_alpha(DATA16 *src, DATA8 *alpha, DATA16 *dst, int size, const DATA8 rel_alpha) | ||
87 | { | ||
88 | DATA16 *start, *end; | ||
89 | |||
90 | start = dst; | ||
91 | end = start + (size & ~7); | ||
92 | |||
93 | pld(alpha, 0); | ||
94 | pld(src, 0); | ||
95 | |||
96 | while (start < end) | ||
97 | { | ||
98 | DATA8 alpha1, alpha2; | ||
99 | |||
100 | alpha1 = alpha[0]; | ||
101 | alpha += 8; | ||
102 | |||
103 | pld(alpha, 8); | ||
104 | pld(src, 32); | ||
105 | |||
106 | src += 8; | ||
107 | start += 8; | ||
108 | |||
109 | alpha2 = alpha[-7]; | ||
110 | _soft16_pt_blend_transp_solid_mul_alpha | ||
111 | (start - 8, src[-8], alpha1, rel_alpha); | ||
112 | |||
113 | alpha1 = alpha[-6]; | ||
114 | _soft16_pt_blend_transp_solid_mul_alpha | ||
115 | (start - 7, src[-7], alpha2, rel_alpha); | ||
116 | |||
117 | alpha2 = alpha[-5]; | ||
118 | _soft16_pt_blend_transp_solid_mul_alpha | ||
119 | (start - 6, src[-6], alpha1, rel_alpha); | ||
120 | |||
121 | alpha1 = alpha[-4]; | ||
122 | _soft16_pt_blend_transp_solid_mul_alpha | ||
123 | (start - 5, src[-5], alpha2, rel_alpha); | ||
124 | |||
125 | alpha2 = alpha[-3]; | ||
126 | _soft16_pt_blend_transp_solid_mul_alpha | ||
127 | (start - 4, src[-4], alpha1, rel_alpha); | ||
128 | |||
129 | alpha1 = alpha[-2]; | ||
130 | _soft16_pt_blend_transp_solid_mul_alpha | ||
131 | (start - 3, src[-3], alpha2, rel_alpha); | ||
132 | |||
133 | alpha2 = alpha[-1]; | ||
134 | _soft16_pt_blend_transp_solid_mul_alpha | ||
135 | (start - 2, src[-2], alpha1, rel_alpha); | ||
136 | |||
137 | _soft16_pt_blend_transp_solid_mul_alpha | ||
138 | (start - 1, src[-1], alpha2, rel_alpha); | ||
139 | } | ||
140 | |||
141 | end = start + (size & 7); | ||
142 | for (; start < end; start++, src++, alpha++) | ||
143 | _soft16_pt_blend_transp_solid_mul_alpha(start, *src, *alpha, rel_alpha); | ||
144 | } | ||
145 | |||
146 | static void | ||
147 | _soft16_scanline_blend_solid_solid_mul_alpha(DATA16 *src, DATA16 *dst, int size, DATA8 rel_alpha) | ||
148 | { | ||
149 | DATA16 *start, *end; | ||
150 | |||
151 | start = dst; | ||
152 | end = start + (size & ~7); | ||
153 | |||
154 | pld(src, 0); | ||
155 | |||
156 | while (start < end) | ||
157 | { | ||
158 | pld(src, 32); | ||
159 | UNROLL8({ | ||
160 | _soft16_pt_blend_solid_solid_mul_alpha(start, *src, rel_alpha); | ||
161 | start++; | ||
162 | src++; | ||
163 | }); | ||
164 | } | ||
165 | |||
166 | end = start + (size & 7); | ||
167 | for (; start < end; start++, src++) | ||
168 | _soft16_pt_blend_solid_solid_mul_alpha(start, *src, rel_alpha); | ||
169 | } | ||
170 | |||
171 | /*********************************************************************** | ||
172 | * Blend operations with extra alpha and multiply color | ||
173 | */ | ||
174 | |||
175 | static void | ||
176 | _soft16_scanline_blend_transp_solid_mul_color_transp(DATA16 *src, DATA8 *alpha, DATA16 *dst, int size, DATA8 rel_alpha, DATA16 r, DATA16 g, DATA16 b) | ||
177 | { | ||
178 | DATA16 *start, *end; | ||
179 | |||
180 | start = dst; | ||
181 | end = start + (size & ~7); | ||
182 | |||
183 | pld(alpha, 0); | ||
184 | pld(src, 0); | ||
185 | |||
186 | while (start < end) | ||
187 | { | ||
188 | DATA8 alpha1, alpha2; | ||
189 | |||
190 | alpha1 = alpha[0]; | ||
191 | alpha += 8; | ||
192 | |||
193 | pld(src, 32); | ||
194 | pld(start, 32); | ||
195 | |||
196 | src += 8; | ||
197 | start += 8; | ||
198 | |||
199 | alpha2 = alpha[-7]; | ||
200 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
201 | (start - 8, src[-8], alpha1, rel_alpha, r, g, b); | ||
202 | |||
203 | alpha1 = alpha[-6]; | ||
204 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
205 | (start - 7, src[-7], alpha2, rel_alpha, r, g, b); | ||
206 | |||
207 | alpha2 = alpha[-5]; | ||
208 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
209 | (start - 6, src[-6], alpha1, rel_alpha, r, g, b); | ||
210 | |||
211 | alpha1 = alpha[-4]; | ||
212 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
213 | (start - 5, src[-5], alpha2, rel_alpha, r, g, b); | ||
214 | |||
215 | alpha2 = alpha[-3]; | ||
216 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
217 | (start - 4, src[-4], alpha1, rel_alpha, r, g, b); | ||
218 | |||
219 | alpha1 = alpha[-2]; | ||
220 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
221 | (start - 3, src[-3], alpha2, rel_alpha, r, g, b); | ||
222 | |||
223 | alpha2 = alpha[-1]; | ||
224 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
225 | (start - 2, src[-2], alpha1, rel_alpha, r, g, b); | ||
226 | |||
227 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
228 | (start - 1, src[-1], alpha2, rel_alpha, r, g, b); | ||
229 | } | ||
230 | |||
231 | end = start + (size & 7); | ||
232 | for (; start < end; start++, src++, alpha++) | ||
233 | _soft16_pt_blend_transp_solid_mul_color_transp | ||
234 | (start, *src, *alpha, rel_alpha, r, g, b); | ||
235 | } | ||
236 | |||
237 | static void | ||
238 | _soft16_scanline_blend_solid_solid_mul_color_transp(DATA16 *src, DATA16 *dst, int size, DATA8 rel_alpha, DATA16 r, DATA16 g, DATA16 b) | ||
239 | { | ||
240 | DATA16 *start, *end; | ||
241 | |||
242 | start = dst; | ||
243 | end = start + (size & ~7); | ||
244 | |||
245 | pld(src, 0); | ||
246 | |||
247 | while (start < end) | ||
248 | { | ||
249 | pld(src, 32); | ||
250 | UNROLL8({ | ||
251 | _soft16_pt_blend_solid_solid_mul_color_transp | ||
252 | (start, *src, rel_alpha, r, g, b); | ||
253 | start++; | ||
254 | src++; | ||
255 | }); | ||
256 | } | ||
257 | |||
258 | end = start + (size & 7); | ||
259 | for (; start < end; start++, src++) | ||
260 | _soft16_pt_blend_solid_solid_mul_color_transp | ||
261 | (start, *src, rel_alpha, r, g, b); | ||
262 | } | ||
263 | |||
264 | /*********************************************************************** | ||
265 | * Blend operations with extra multiply color | ||
266 | */ | ||
267 | |||
268 | static void | ||
269 | _soft16_scanline_blend_transp_solid_mul_color_solid(DATA16 *src, DATA8 *alpha, DATA16 *dst, int size, DATA16 r, DATA16 g, DATA16 b) | ||
270 | { | ||
271 | DATA16 *start, *end; | ||
272 | |||
273 | start = dst; | ||
274 | end = start + (size & ~7); | ||
275 | |||
276 | pld(alpha, 0); | ||
277 | pld(src, 0); | ||
278 | |||
279 | while (start < end) | ||
280 | { | ||
281 | DATA8 alpha1, alpha2; | ||
282 | |||
283 | alpha1 = alpha[0]; | ||
284 | alpha += 8; | ||
285 | |||
286 | pld(alpha, 8); | ||
287 | pld(src, 32); | ||
288 | |||
289 | src += 8; | ||
290 | start += 8; | ||
291 | |||
292 | alpha2 = alpha[-7]; | ||
293 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
294 | (start - 8, src[-8], alpha1, r, g, b); | ||
295 | |||
296 | alpha1 = alpha[-6]; | ||
297 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
298 | (start - 7, src[-7], alpha2, r, g, b); | ||
299 | |||
300 | alpha2 = alpha[-5]; | ||
301 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
302 | (start - 6, src[-6], alpha1, r, g, b); | ||
303 | |||
304 | alpha1 = alpha[-4]; | ||
305 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
306 | (start - 5, src[-5], alpha2, r, g, b); | ||
307 | |||
308 | alpha2 = alpha[-3]; | ||
309 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
310 | (start - 4, src[-4], alpha1, r, g, b); | ||
311 | |||
312 | alpha1 = alpha[-2]; | ||
313 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
314 | (start - 3, src[-3], alpha2, r, g, b); | ||
315 | |||
316 | alpha2 = alpha[-1]; | ||
317 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
318 | (start - 2, src[-2], alpha1, r, g, b); | ||
319 | |||
320 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
321 | (start - 1, src[-1], alpha2, r, g, b); | ||
322 | } | ||
323 | |||
324 | end = start + (size & 7); | ||
325 | for (; start < end; start++, src++, alpha++) | ||
326 | _soft16_pt_blend_transp_solid_mul_color_solid | ||
327 | (start, *src, *alpha, r, g, b); | ||
328 | } | ||
329 | |||
330 | static void | ||
331 | _soft16_scanline_blend_solid_solid_mul_color_solid(DATA16 *src, DATA16 *dst, int size, DATA8 r, DATA8 g, DATA8 b) | ||
332 | { | ||
333 | DATA16 *start, *end; | ||
334 | |||
335 | start = dst; | ||
336 | end = start + (size & ~7); | ||
337 | |||
338 | pld(src, 0); | ||
339 | |||
340 | while (start < end) | ||
341 | { | ||
342 | pld(src, 32); | ||
343 | UNROLL8({ | ||
344 | _soft16_pt_blend_solid_solid_mul_color_solid(start, *src, r, g, b); | ||
345 | start++; | ||
346 | src++; | ||
347 | }); | ||
348 | } | ||
349 | |||
350 | end = start + (size & 7); | ||
351 | for (; start < end; start++, src++) | ||
352 | _soft16_pt_blend_solid_solid_mul_color_solid(start, *src, r, g, b); | ||
353 | } | ||
diff --git a/libraries/evas/src/lib/engines/common_16/evas_soft16_scanline_fill.c b/libraries/evas/src/lib/engines/common_16/evas_soft16_scanline_fill.c new file mode 100644 index 0000000..d31bef8 --- /dev/null +++ b/libraries/evas/src/lib/engines/common_16/evas_soft16_scanline_fill.c | |||
@@ -0,0 +1,86 @@ | |||
1 | /** NOTE: This file is meant to be included by users **/ | ||
2 | |||
3 | /***************************************************************************** | ||
4 | * Point processing | ||
5 | * | ||
6 | * _soft16_pt_<description>_<src>_<dst>[_<modifier>]() | ||
7 | * | ||
8 | * Scanline processing | ||
9 | * | ||
10 | * _soft16_scanline_<description>_<src>_<dst>[_<modifier>]() | ||
11 | * | ||
12 | ****************************************************************************/ | ||
13 | EFL_ALWAYS_INLINE void | ||
14 | _soft16_pt_fill_solid_solid(DATA16 *dst, DATA16 rgb565) | ||
15 | { | ||
16 | *dst = rgb565; | ||
17 | } | ||
18 | |||
19 | static void | ||
20 | _soft16_scanline_fill_solid_solid(DATA16 *dst, int size, DATA16 rgb565) | ||
21 | { | ||
22 | DATA16 *start, *end; | ||
23 | DATA32 rgb565_double; | ||
24 | |||
25 | start = dst; | ||
26 | |||
27 | if ((long)start & 0x2) | ||
28 | { | ||
29 | *start = rgb565; | ||
30 | start++; | ||
31 | size--; | ||
32 | } | ||
33 | |||
34 | end = start + (size & ~7); | ||
35 | |||
36 | rgb565_double = (rgb565 << 16) | rgb565; | ||
37 | |||
38 | while (start < end) | ||
39 | { | ||
40 | DATA32 *p = (DATA32 *)start; | ||
41 | |||
42 | p[0] = rgb565_double; | ||
43 | p[1] = rgb565_double; | ||
44 | p[2] = rgb565_double; | ||
45 | p[3] = rgb565_double; | ||
46 | |||
47 | start += 8; | ||
48 | } | ||
49 | |||
50 | end = start + (size & 7); | ||
51 | for (; start < end; start++) | ||
52 | *start = rgb565; | ||
53 | } | ||
54 | |||
55 | EFL_ALWAYS_INLINE void | ||
56 | _soft16_pt_fill_transp_solid(DATA16 *dst, DATA32 rgb565_unpack, DATA8 alpha) | ||
57 | { | ||
58 | DATA32 d; | ||
59 | |||
60 | d = RGB_565_UNPACK(*dst); | ||
61 | d = RGB_565_UNPACKED_BLEND(rgb565_unpack, d, alpha); | ||
62 | *dst = RGB_565_PACK(d); | ||
63 | } | ||
64 | |||
65 | static void | ||
66 | _soft16_scanline_fill_transp_solid(DATA16 *dst, int size, DATA32 rgb565_unpack, DATA8 alpha) | ||
67 | { | ||
68 | DATA16 *start, *end; | ||
69 | |||
70 | start = dst; | ||
71 | pld(start, 0); | ||
72 | end = start + (size & ~7); | ||
73 | |||
74 | while (start < end) | ||
75 | { | ||
76 | pld(start, 32); | ||
77 | UNROLL8({ | ||
78 | _soft16_pt_fill_transp_solid(start, rgb565_unpack, alpha); | ||
79 | start++; | ||
80 | }); | ||
81 | } | ||
82 | |||
83 | end = start + (size & 7); | ||
84 | for (; start < end; start++) | ||
85 | _soft16_pt_fill_transp_solid(start, rgb565_unpack, alpha); | ||
86 | } | ||