aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/modules/engines/wayland_egl
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 17:29:19 +1000
committerDavid Walter Seikel2013-01-13 17:29:19 +1000
commit07274513e984f0b5544586c74508ccd16e7dcafa (patch)
treeb32ff2a9136fbc1a4a6a0ed1e4d79cde0f5f16d9 /libraries/evas/src/modules/engines/wayland_egl
parentAdded Irrlicht 1.8, but without all the Windows binaries. (diff)
downloadSledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.zip
SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.gz
SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.bz2
SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.xz
Remove EFL, since it's been released now.
Diffstat (limited to '')
-rw-r--r--libraries/evas/src/modules/engines/wayland_egl/Evas_Engine_Wayland_Egl.h42
-rw-r--r--libraries/evas/src/modules/engines/wayland_egl/Makefile.am47
-rw-r--r--libraries/evas/src/modules/engines/wayland_egl/Makefile.in816
-rw-r--r--libraries/evas/src/modules/engines/wayland_egl/evas_engine.c3032
-rw-r--r--libraries/evas/src/modules/engines/wayland_egl/evas_engine.h82
-rw-r--r--libraries/evas/src/modules/engines/wayland_egl/evas_wl_main.c325
6 files changed, 0 insertions, 4344 deletions
diff --git a/libraries/evas/src/modules/engines/wayland_egl/Evas_Engine_Wayland_Egl.h b/libraries/evas/src/modules/engines/wayland_egl/Evas_Engine_Wayland_Egl.h
deleted file mode 100644
index 92ffe25..0000000
--- a/libraries/evas/src/modules/engines/wayland_egl/Evas_Engine_Wayland_Egl.h
+++ /dev/null
@@ -1,42 +0,0 @@
1#ifndef _EVAS_ENGINE_WAYLAND_EGL_H
2#define _EVAS_ENGINE_WAYLAND_EGL_H
3
4#include <wayland-client.h>
5
6typedef struct _Evas_Engine_Info_Wayland_Egl Evas_Engine_Info_Wayland_Egl;
7
8struct _Evas_Engine_Info_Wayland_Egl
9{
10 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
11 /* at you and make nasty noises */
12 Evas_Engine_Info magic;
13
14 /* engine specific data & parameters it needs to set up */
15 struct {
16 struct wl_display *display;
17 struct wl_surface *surface;
18 int depth;
19 int screen;
20 int rotation;
21 unsigned int destination_alpha : 1;
22 } info;
23 /* engine specific function calls to query stuff about the destination */
24 /* engine (what visual & colormap & depth to use, performance info etc. */
25 struct {
26 int (*best_depth_get) (Evas_Engine_Info_Wayland_Egl *einfo);
27 } func;
28
29 struct {
30 void (*pre_swap) (void *data, Evas *e);
31 void (*post_swap) (void *data, Evas *e);
32
33 void *data; // data for callback calls
34 } callback;
35
36 /* non-blocking or blocking mode */
37 Evas_Engine_Render_Mode render_mode;
38
39 unsigned char vsync : 1; // does nothing right now
40 unsigned char indirect : 1; // use indirect rendering
41};
42#endif
diff --git a/libraries/evas/src/modules/engines/wayland_egl/Makefile.am b/libraries/evas/src/modules/engines/wayland_egl/Makefile.am
deleted file mode 100644
index 9234b33..0000000
--- a/libraries/evas/src/modules/engines/wayland_egl/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines/gl_common \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@GL_EET_CFLAGS@ \
13@evas_engine_wayland_egl_cflags@
14
15if BUILD_ENGINE_WAYLAND_EGL
16
17WAYLAND_EGL_SOURCES = \
18evas_engine.c \
19evas_wl_main.c
20
21WAYLAND_EGL_LIBADD = @FREETYPE_LIBS@ @GL_EET_LIBS@ @EINA_LIBS@ @evas_engine_wayland_egl_libs@ @dlopen_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
22
23includes_HEADERS = Evas_Engine_Wayland_Egl.h
24includesdir = $(includedir)/evas-@VMAJ@
25
26if !EVAS_STATIC_BUILD_WAYLAND_EGL
27
28pkgdir = $(libdir)/evas/modules/engines/wayland_egl/$(MODULE_ARCH)
29pkg_LTLIBRARIES = module.la
30
31module_la_SOURCES = $(WAYLAND_EGL_SOURCES)
32module_la_LIBADD = $(WAYLAND_EGL_LIBADD) $(top_builddir)/src/lib/libevas.la
33module_la_LDFLAGS = -no-undefined -module -avoid-version
34module_la_LIBTOOLFLAGS = --tag=disable-static
35
36
37else
38
39noinst_LTLIBRARIES = libevas_engine_wayland_egl.la
40
41libevas_engine_wayland_egl_la_SOURCES = $(WAYLAND_EGL_SOURCES)
42libevas_engine_wayland_egl_la_LIBADD = $(WAYLAND_EGL_LIBADD)
43
44endif
45endif
46
47EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/wayland_egl/Makefile.in b/libraries/evas/src/modules/engines/wayland_egl/Makefile.in
deleted file mode 100644
index 90aa36b..0000000
--- a/libraries/evas/src/modules/engines/wayland_egl/Makefile.in
+++ /dev/null
@@ -1,816 +0,0 @@
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
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/wayland_egl
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84@BUILD_ENGINE_WAYLAND_EGL_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
85@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_TRUE@libevas_engine_wayland_egl_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_wayland_egl_la_SOURCES_DIST = evas_engine.c \
87 evas_wl_main.c
88@BUILD_ENGINE_WAYLAND_EGL_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_WAYLAND_EGL_TRUE@ evas_wl_main.lo
90@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_TRUE@am_libevas_engine_wayland_egl_la_OBJECTS = $(am__objects_1)
91libevas_engine_wayland_egl_la_OBJECTS = \
92 $(am_libevas_engine_wayland_egl_la_OBJECTS)
93AM_V_lt = $(am__v_lt_$(V))
94am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
95am__v_lt_0 = --silent
96@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_TRUE@am_libevas_engine_wayland_egl_la_rpath =
97@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
98@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@ $(top_builddir)/src/lib/libevas.la
99am__module_la_SOURCES_DIST = evas_engine.c evas_wl_main.c
100@BUILD_ENGINE_WAYLAND_EGL_TRUE@am__objects_2 = \
101@BUILD_ENGINE_WAYLAND_EGL_TRUE@ module_la-evas_engine.lo \
102@BUILD_ENGINE_WAYLAND_EGL_TRUE@ module_la-evas_wl_main.lo
103@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@am_module_la_OBJECTS = $(am__objects_2)
104module_la_OBJECTS = $(am_module_la_OBJECTS)
105module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
106 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
107 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
108@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@am_module_la_rpath = -rpath \
109@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@ $(pkgdir)
110DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
111depcomp = $(SHELL) $(top_srcdir)/depcomp
112am__depfiles_maybe = depfiles
113am__mv = mv -f
114COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
115 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
116LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
117 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
118 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
119 $(AM_CFLAGS) $(CFLAGS)
120AM_V_CC = $(am__v_CC_$(V))
121am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
122am__v_CC_0 = @echo " CC " $@;
123AM_V_at = $(am__v_at_$(V))
124am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
125am__v_at_0 = @
126CCLD = $(CC)
127LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
128 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
129 $(AM_LDFLAGS) $(LDFLAGS) -o $@
130AM_V_CCLD = $(am__v_CCLD_$(V))
131am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
132am__v_CCLD_0 = @echo " CCLD " $@;
133AM_V_GEN = $(am__v_GEN_$(V))
134am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
135am__v_GEN_0 = @echo " GEN " $@;
136SOURCES = $(libevas_engine_wayland_egl_la_SOURCES) \
137 $(module_la_SOURCES)
138DIST_SOURCES = $(am__libevas_engine_wayland_egl_la_SOURCES_DIST) \
139 $(am__module_la_SOURCES_DIST)
140am__includes_HEADERS_DIST = Evas_Engine_Wayland_Egl.h
141HEADERS = $(includes_HEADERS)
142ETAGS = etags
143CTAGS = ctags
144DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
145ACLOCAL = @ACLOCAL@
146ALLOCA = @ALLOCA@
147AMTAR = @AMTAR@
148AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
149AR = @AR@
150AS = @AS@
151AUTOCONF = @AUTOCONF@
152AUTOHEADER = @AUTOHEADER@
153AUTOMAKE = @AUTOMAKE@
154AWK = @AWK@
155CC = @CC@
156CCDEPMODE = @CCDEPMODE@
157CFLAGS = @CFLAGS@
158CHECK_CFLAGS = @CHECK_CFLAGS@
159CHECK_LIBS = @CHECK_LIBS@
160CPP = @CPP@
161CPPFLAGS = @CPPFLAGS@
162CXX = @CXX@
163CXXCPP = @CXXCPP@
164CXXDEPMODE = @CXXDEPMODE@
165CXXFLAGS = @CXXFLAGS@
166CYGPATH_W = @CYGPATH_W@
167DEFS = @DEFS@
168DEPDIR = @DEPDIR@
169DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
170DIRECTFB_LIBS = @DIRECTFB_LIBS@
171DLLTOOL = @DLLTOOL@
172DSYMUTIL = @DSYMUTIL@
173DUMPBIN = @DUMPBIN@
174ECHO_C = @ECHO_C@
175ECHO_N = @ECHO_N@
176ECHO_T = @ECHO_T@
177ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
178ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
179EDB_CFLAGS = @EDB_CFLAGS@
180EDB_LIBS = @EDB_LIBS@
181EDJE_CFLAGS = @EDJE_CFLAGS@
182EDJE_LIBS = @EDJE_LIBS@
183EET_CFLAGS = @EET_CFLAGS@
184EET_LIBS = @EET_LIBS@
185EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
186EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
187EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
188EGREP = @EGREP@
189EINA_CFLAGS = @EINA_CFLAGS@
190EINA_LIBS = @EINA_LIBS@
191EVAS_CFLAGS = @EVAS_CFLAGS@
192EVAS_LIBS = @EVAS_LIBS@
193EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
194EVIL_CFLAGS = @EVIL_CFLAGS@
195EVIL_LIBS = @EVIL_LIBS@
196EXEEXT = @EXEEXT@
197EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
198EXOTIC_LIBS = @EXOTIC_LIBS@
199FGREP = @FGREP@
200FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
201FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
202FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
203FREETYPE_LIBS = @FREETYPE_LIBS@
204FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
205FRIBIDI_LIBS = @FRIBIDI_LIBS@
206GL_EET_CFLAGS = @GL_EET_CFLAGS@
207GL_EET_LIBS = @GL_EET_LIBS@
208GREP = @GREP@
209HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
210HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
211INSTALL = @INSTALL@
212INSTALL_DATA = @INSTALL_DATA@
213INSTALL_PROGRAM = @INSTALL_PROGRAM@
214INSTALL_SCRIPT = @INSTALL_SCRIPT@
215INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
216LD = @LD@
217LDFLAGS = @LDFLAGS@
218LIBOBJS = @LIBOBJS@
219LIBS = @LIBS@
220LIBTOOL = @LIBTOOL@
221LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
222LINEBREAK_LIBS = @LINEBREAK_LIBS@
223LIPO = @LIPO@
224LN_S = @LN_S@
225LTLIBOBJS = @LTLIBOBJS@
226MAKEINFO = @MAKEINFO@
227MKDIR_P = @MKDIR_P@
228MODULE_ARCH = @MODULE_ARCH@
229NM = @NM@
230NMEDIT = @NMEDIT@
231OBJC = @OBJC@
232OBJCDEPMODE = @OBJCDEPMODE@
233OBJCFLAGS = @OBJCFLAGS@
234OBJDUMP = @OBJDUMP@
235OBJEXT = @OBJEXT@
236OTOOL = @OTOOL@
237OTOOL64 = @OTOOL64@
238PACKAGE = @PACKAGE@
239PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
240PACKAGE_NAME = @PACKAGE_NAME@
241PACKAGE_STRING = @PACKAGE_STRING@
242PACKAGE_TARNAME = @PACKAGE_TARNAME@
243PACKAGE_URL = @PACKAGE_URL@
244PACKAGE_VERSION = @PACKAGE_VERSION@
245PATH_SEPARATOR = @PATH_SEPARATOR@
246PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
247PIXMAN_LIBS = @PIXMAN_LIBS@
248PKG_CONFIG = @PKG_CONFIG@
249PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
250PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
251PNG_CFLAGS = @PNG_CFLAGS@
252PNG_LIBS = @PNG_LIBS@
253RANLIB = @RANLIB@
254SDL_CFLAGS = @SDL_CFLAGS@
255SDL_LIBS = @SDL_LIBS@
256SED = @SED@
257SET_MAKE = @SET_MAKE@
258SHELL = @SHELL@
259SHM_OPEN_LINK = @SHM_OPEN_LINK@
260STRIP = @STRIP@
261SVG_CFLAGS = @SVG_CFLAGS@
262SVG_LIBS = @SVG_LIBS@
263VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
264VALGRIND_LIBS = @VALGRIND_LIBS@
265VERSION = @VERSION@
266VMAJ = @VMAJ@
267WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
268WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
269XCB_CFLAGS = @XCB_CFLAGS@
270XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
271XCB_GL_LIBS = @XCB_GL_LIBS@
272XCB_LIBS = @XCB_LIBS@
273XEXT_CFLAGS = @XEXT_CFLAGS@
274XEXT_LIBS = @XEXT_LIBS@
275XMKMF = @XMKMF@
276X_CFLAGS = @X_CFLAGS@
277X_EXTRA_LIBS = @X_EXTRA_LIBS@
278X_LIBS = @X_LIBS@
279X_PRE_LIBS = @X_PRE_LIBS@
280abs_builddir = @abs_builddir@
281abs_srcdir = @abs_srcdir@
282abs_top_builddir = @abs_top_builddir@
283abs_top_srcdir = @abs_top_srcdir@
284ac_ct_CC = @ac_ct_CC@
285ac_ct_CXX = @ac_ct_CXX@
286ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
287ac_ct_OBJC = @ac_ct_OBJC@
288altivec_cflags = @altivec_cflags@
289am__include = @am__include@
290am__leading_dot = @am__leading_dot@
291am__quote = @am__quote@
292am__tar = @am__tar@
293am__untar = @am__untar@
294bindir = @bindir@
295build = @build@
296build_alias = @build_alias@
297build_cpu = @build_cpu@
298build_os = @build_os@
299build_vendor = @build_vendor@
300builddir = @builddir@
301datadir = @datadir@
302datarootdir = @datarootdir@
303dlopen_libs = @dlopen_libs@
304docdir = @docdir@
305dvidir = @dvidir@
306edje_cc = @edje_cc@
307efl_doxygen = @efl_doxygen@
308efl_have_doxygen = @efl_have_doxygen@
309evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
310evas_engine_buffer_libs = @evas_engine_buffer_libs@
311evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
312evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
313evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
314evas_engine_directfb_libs = @evas_engine_directfb_libs@
315evas_engine_fb_cflags = @evas_engine_fb_cflags@
316evas_engine_fb_libs = @evas_engine_fb_libs@
317evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
318evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
319evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
320evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
321evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
322evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
323evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
324evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
325evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
326evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
327evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
328evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
329evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
330evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
331evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
332evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
333evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
334evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
335evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
336evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
337evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
338evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
339evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
340evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
341evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
342evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
343evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
344evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
345evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
346evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
347evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
348evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
349evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
350evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
351evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
352evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
353evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
354evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
355evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
356evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
357evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
358evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
359evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
360evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
361evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
362evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
363evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
364evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
365evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
366evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
367evas_image_loader_png_libs = @evas_image_loader_png_libs@
368evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
369evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
370evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
371evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
372evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
373evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
374evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
375evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
376evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
377evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
378evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
379evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
380exec_prefix = @exec_prefix@
381have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
382have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
383have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
384have_evas_engine_software_x11 = @have_evas_engine_software_x11@
385have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
386have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
387have_lcov = @have_lcov@
388host = @host@
389host_alias = @host_alias@
390host_cpu = @host_cpu@
391host_os = @host_os@
392host_vendor = @host_vendor@
393htmldir = @htmldir@
394includedir = @includedir@
395infodir = @infodir@
396install_sh = @install_sh@
397libdir = @libdir@
398libexecdir = @libexecdir@
399localedir = @localedir@
400localstatedir = @localstatedir@
401lt_ECHO = @lt_ECHO@
402lt_enable_auto_import = @lt_enable_auto_import@
403mandir = @mandir@
404mkdir_p = @mkdir_p@
405oldincludedir = @oldincludedir@
406pdfdir = @pdfdir@
407pkgconfig_requires_private = @pkgconfig_requires_private@
408prefix = @prefix@
409program_transform_name = @program_transform_name@
410psdir = @psdir@
411pthread_cflags = @pthread_cflags@
412pthread_libs = @pthread_libs@
413release_info = @release_info@
414requirement_evas = @requirement_evas@
415sbindir = @sbindir@
416sharedstatedir = @sharedstatedir@
417srcdir = @srcdir@
418sysconfdir = @sysconfdir@
419target_alias = @target_alias@
420top_build_prefix = @top_build_prefix@
421top_builddir = @top_builddir@
422top_srcdir = @top_srcdir@
423version_info = @version_info@
424MAINTAINERCLEANFILES = Makefile.in
425AM_CPPFLAGS = \
426-I. \
427-I$(top_srcdir)/src/lib \
428-I$(top_srcdir)/src/lib/include \
429-I$(top_srcdir)/src/modules/engines/gl_common \
430@FREETYPE_CFLAGS@ \
431@PIXMAN_CFLAGS@ \
432@EINA_CFLAGS@ \
433@GL_EET_CFLAGS@ \
434@evas_engine_wayland_egl_cflags@
435
436@BUILD_ENGINE_WAYLAND_EGL_TRUE@WAYLAND_EGL_SOURCES = \
437@BUILD_ENGINE_WAYLAND_EGL_TRUE@evas_engine.c \
438@BUILD_ENGINE_WAYLAND_EGL_TRUE@evas_wl_main.c
439
440@BUILD_ENGINE_WAYLAND_EGL_TRUE@WAYLAND_EGL_LIBADD = @FREETYPE_LIBS@ @GL_EET_LIBS@ @EINA_LIBS@ @evas_engine_wayland_egl_libs@ @dlopen_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
441@BUILD_ENGINE_WAYLAND_EGL_TRUE@includes_HEADERS = Evas_Engine_Wayland_Egl.h
442@BUILD_ENGINE_WAYLAND_EGL_TRUE@includesdir = $(includedir)/evas-@VMAJ@
443@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@pkgdir = $(libdir)/evas/modules/engines/wayland_egl/$(MODULE_ARCH)
444@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@pkg_LTLIBRARIES = module.la
445@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@module_la_SOURCES = $(WAYLAND_EGL_SOURCES)
446@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@module_la_LIBADD = $(WAYLAND_EGL_LIBADD) $(top_builddir)/src/lib/libevas.la
447@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@module_la_LDFLAGS = -no-undefined -module -avoid-version
448@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
449@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_TRUE@noinst_LTLIBRARIES = libevas_engine_wayland_egl.la
450@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_TRUE@libevas_engine_wayland_egl_la_SOURCES = $(WAYLAND_EGL_SOURCES)
451@BUILD_ENGINE_WAYLAND_EGL_TRUE@@EVAS_STATIC_BUILD_WAYLAND_EGL_TRUE@libevas_engine_wayland_egl_la_LIBADD = $(WAYLAND_EGL_LIBADD)
452EXTRA_DIST = evas_engine.h
453all: all-am
454
455.SUFFIXES:
456.SUFFIXES: .c .lo .o .obj
457$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
458 @for dep in $?; do \
459 case '$(am__configure_deps)' in \
460 *$$dep*) \
461 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
462 && { if test -f $@; then exit 0; else break; fi; }; \
463 exit 1;; \
464 esac; \
465 done; \
466 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/wayland_egl/Makefile'; \
467 $(am__cd) $(top_srcdir) && \
468 $(AUTOMAKE) --gnu src/modules/engines/wayland_egl/Makefile
469.PRECIOUS: Makefile
470Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
471 @case '$?' in \
472 *config.status*) \
473 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
474 *) \
475 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
476 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
477 esac;
478
479$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
480 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
481
482$(top_srcdir)/configure: $(am__configure_deps)
483 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
484$(ACLOCAL_M4): $(am__aclocal_m4_deps)
485 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
486$(am__aclocal_m4_deps):
487
488clean-noinstLTLIBRARIES:
489 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
490 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
491 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
492 test "$$dir" != "$$p" || dir=.; \
493 echo "rm -f \"$${dir}/so_locations\""; \
494 rm -f "$${dir}/so_locations"; \
495 done
496install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
497 @$(NORMAL_INSTALL)
498 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
499 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
500 list2=; for p in $$list; do \
501 if test -f $$p; then \
502 list2="$$list2 $$p"; \
503 else :; fi; \
504 done; \
505 test -z "$$list2" || { \
506 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
507 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
508 }
509
510uninstall-pkgLTLIBRARIES:
511 @$(NORMAL_UNINSTALL)
512 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
513 for p in $$list; do \
514 $(am__strip_dir) \
515 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
516 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
517 done
518
519clean-pkgLTLIBRARIES:
520 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
521 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
522 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
523 test "$$dir" != "$$p" || dir=.; \
524 echo "rm -f \"$${dir}/so_locations\""; \
525 rm -f "$${dir}/so_locations"; \
526 done
527libevas_engine_wayland_egl.la: $(libevas_engine_wayland_egl_la_OBJECTS) $(libevas_engine_wayland_egl_la_DEPENDENCIES)
528 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_wayland_egl_la_rpath) $(libevas_engine_wayland_egl_la_OBJECTS) $(libevas_engine_wayland_egl_la_LIBADD) $(LIBS)
529module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
530 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
531
532mostlyclean-compile:
533 -rm -f *.$(OBJEXT)
534
535distclean-compile:
536 -rm -f *.tab.c
537
538@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
539@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_wl_main.Plo@am__quote@
540@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
541@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_wl_main.Plo@am__quote@
542
543.c.o:
544@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
545@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
546@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
547@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
548@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
549@am__fastdepCC_FALSE@ $(COMPILE) -c $<
550
551.c.obj:
552@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
553@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
554@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
555@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
556@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
557@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
558
559.c.lo:
560@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
561@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
562@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
563@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
564@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
565@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
566
567module_la-evas_engine.lo: evas_engine.c
568@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
569@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
570@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
571@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
572@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
573@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
574
575module_la-evas_wl_main.lo: evas_wl_main.c
576@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_wl_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_wl_main.Tpo -c -o module_la-evas_wl_main.lo `test -f 'evas_wl_main.c' || echo '$(srcdir)/'`evas_wl_main.c
577@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_wl_main.Tpo $(DEPDIR)/module_la-evas_wl_main.Plo
578@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
579@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_wl_main.c' object='module_la-evas_wl_main.lo' libtool=yes @AMDEPBACKSLASH@
580@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
581@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_wl_main.lo `test -f 'evas_wl_main.c' || echo '$(srcdir)/'`evas_wl_main.c
582
583mostlyclean-libtool:
584 -rm -f *.lo
585
586clean-libtool:
587 -rm -rf .libs _libs
588install-includesHEADERS: $(includes_HEADERS)
589 @$(NORMAL_INSTALL)
590 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
591 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
592 for p in $$list; do \
593 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
594 echo "$$d$$p"; \
595 done | $(am__base_list) | \
596 while read files; do \
597 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
598 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
599 done
600
601uninstall-includesHEADERS:
602 @$(NORMAL_UNINSTALL)
603 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
604 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
605 test -n "$$files" || exit 0; \
606 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
607 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
608
609ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
610 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
611 unique=`for i in $$list; do \
612 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
613 done | \
614 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
615 END { if (nonempty) { for (i in files) print i; }; }'`; \
616 mkid -fID $$unique
617tags: TAGS
618
619TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
620 $(TAGS_FILES) $(LISP)
621 set x; \
622 here=`pwd`; \
623 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
624 unique=`for i in $$list; do \
625 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
626 done | \
627 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
628 END { if (nonempty) { for (i in files) print i; }; }'`; \
629 shift; \
630 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
631 test -n "$$unique" || unique=$$empty_fix; \
632 if test $$# -gt 0; then \
633 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
634 "$$@" $$unique; \
635 else \
636 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
637 $$unique; \
638 fi; \
639 fi
640ctags: CTAGS
641CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
642 $(TAGS_FILES) $(LISP)
643 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
644 unique=`for i in $$list; do \
645 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
646 done | \
647 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
648 END { if (nonempty) { for (i in files) print i; }; }'`; \
649 test -z "$(CTAGS_ARGS)$$unique" \
650 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
651 $$unique
652
653GTAGS:
654 here=`$(am__cd) $(top_builddir) && pwd` \
655 && $(am__cd) $(top_srcdir) \
656 && gtags -i $(GTAGS_ARGS) "$$here"
657
658distclean-tags:
659 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
660
661distdir: $(DISTFILES)
662 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
663 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
664 list='$(DISTFILES)'; \
665 dist_files=`for file in $$list; do echo $$file; done | \
666 sed -e "s|^$$srcdirstrip/||;t" \
667 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
668 case $$dist_files in \
669 */*) $(MKDIR_P) `echo "$$dist_files" | \
670 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
671 sort -u` ;; \
672 esac; \
673 for file in $$dist_files; do \
674 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
675 if test -d $$d/$$file; then \
676 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
677 if test -d "$(distdir)/$$file"; then \
678 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
679 fi; \
680 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
681 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
682 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
683 fi; \
684 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
685 else \
686 test -f "$(distdir)/$$file" \
687 || cp -p $$d/$$file "$(distdir)/$$file" \
688 || exit 1; \
689 fi; \
690 done
691check-am: all-am
692check: check-am
693all-am: Makefile $(LTLIBRARIES) $(HEADERS)
694installdirs:
695 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
696 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
697 done
698install: install-am
699install-exec: install-exec-am
700install-data: install-data-am
701uninstall: uninstall-am
702
703install-am: all-am
704 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
705
706installcheck: installcheck-am
707install-strip:
708 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
709 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
710 `test -z '$(STRIP)' || \
711 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
712mostlyclean-generic:
713
714clean-generic:
715
716distclean-generic:
717 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
718 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
719
720maintainer-clean-generic:
721 @echo "This command is intended for maintainers to use"
722 @echo "it deletes files that may require special tools to rebuild."
723 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
724clean: clean-am
725
726clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
727 clean-pkgLTLIBRARIES mostlyclean-am
728
729distclean: distclean-am
730 -rm -rf ./$(DEPDIR)
731 -rm -f Makefile
732distclean-am: clean-am distclean-compile distclean-generic \
733 distclean-tags
734
735dvi: dvi-am
736
737dvi-am:
738
739html: html-am
740
741html-am:
742
743info: info-am
744
745info-am:
746
747install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
748
749install-dvi: install-dvi-am
750
751install-dvi-am:
752
753install-exec-am:
754
755install-html: install-html-am
756
757install-html-am:
758
759install-info: install-info-am
760
761install-info-am:
762
763install-man:
764
765install-pdf: install-pdf-am
766
767install-pdf-am:
768
769install-ps: install-ps-am
770
771install-ps-am:
772
773installcheck-am:
774
775maintainer-clean: maintainer-clean-am
776 -rm -rf ./$(DEPDIR)
777 -rm -f Makefile
778maintainer-clean-am: distclean-am maintainer-clean-generic
779
780mostlyclean: mostlyclean-am
781
782mostlyclean-am: mostlyclean-compile mostlyclean-generic \
783 mostlyclean-libtool
784
785pdf: pdf-am
786
787pdf-am:
788
789ps: ps-am
790
791ps-am:
792
793uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
794
795.MAKE: install-am install-strip
796
797.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
798 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
799 ctags distclean distclean-compile distclean-generic \
800 distclean-libtool distclean-tags distdir dvi dvi-am html \
801 html-am info info-am install install-am install-data \
802 install-data-am install-dvi install-dvi-am install-exec \
803 install-exec-am install-html install-html-am \
804 install-includesHEADERS install-info install-info-am \
805 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
806 install-ps install-ps-am install-strip installcheck \
807 installcheck-am installdirs maintainer-clean \
808 maintainer-clean-generic mostlyclean mostlyclean-compile \
809 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
810 tags uninstall uninstall-am uninstall-includesHEADERS \
811 uninstall-pkgLTLIBRARIES
812
813
814# Tell versions [3.59,3.63) of GNU make to not export all variables.
815# Otherwise a system limit (for SysV at least) may be exceeded.
816.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/wayland_egl/evas_engine.c b/libraries/evas/src/modules/engines/wayland_egl/evas_engine.c
deleted file mode 100644
index 4f5102e..0000000
--- a/libraries/evas/src/modules/engines/wayland_egl/evas_engine.c
+++ /dev/null
@@ -1,3032 +0,0 @@
1#include "evas_common.h" /* Also includes international specific stuff */
2#include "evas_engine.h"
3
4#ifdef HAVE_DLSYM
5# include <dlfcn.h> /* dlopen,dlclose,etc */
6#else
7# error gl_x11 should not get compiled if dlsym is not found on the system!
8#endif
9
10#define EVAS_GL_NO_GL_H_CHECK 1
11#include "Evas_GL.h"
12
13typedef struct _Render_Engine Render_Engine;
14typedef struct _Render_Engine_GL_Surface Render_Engine_GL_Surface;
15typedef struct _Render_Engine_GL_Context Render_Engine_GL_Context;
16typedef struct _Render_Engine_GL_Resource Render_Engine_GL_Resource;
17typedef struct _Extension_Entry Extension_Entry;
18
19struct _Render_Engine
20{
21 Evas_GL_Wl_Window *win;
22 Evas_Engine_Info_Wayland_Egl *info;
23 Evas *evas;
24 Tilebuf *tb;
25 int end;
26 int w, h;
27 int vsync;
28};
29
30struct _Render_Engine_GL_Surface
31{
32 int initialized;
33 int fbo_attached;
34 int w, h;
35 int depth_bits;
36 int stencil_bits;
37
38 // Render target texture/buffers
39 GLuint rt_tex;
40 GLint rt_internal_fmt;
41 GLenum rt_fmt;
42 GLuint rb_depth;
43 GLenum rb_depth_fmt;
44 GLuint rb_stencil;
45 GLenum rb_stencil_fmt;
46
47 Render_Engine_GL_Context *current_ctx;
48};
49
50struct _Render_Engine_GL_Context
51{
52 int initialized;
53 EGLContext context;
54 GLuint context_fbo;
55 GLuint current_fbo;
56
57 Render_Engine_GL_Surface *current_sfc;
58};
59
60// Resources used per thread
61struct _Render_Engine_GL_Resource
62{
63 // Resource context/surface per Thread in TLS for evasgl use
64 EGLContext context;
65 EGLSurface surface;
66};
67
68// Extension Handling
69struct _Extension_Entry
70{
71 const char *name;
72 const char *real_name;
73 int supported;
74};
75
76static int initted = 0;
77static int gl_wins = 0;
78static Render_Engine_GL_Context *current_evgl_ctx;
79static Render_Engine *current_engine;
80
81static char _gl_ext_string[1024];
82static char _evasgl_ext_string[1024];
83
84// Resource context/surface per Thread in TLS for evasgl use
85static Eina_TLS resource_key;
86static Eina_List *resource_list;
87LK(resource_lock);
88
89typedef void (*_eng_fn) (void);
90typedef _eng_fn (*glsym_func_eng_fn) ();
91typedef void (*glsym_func_void) ();
92typedef void *(*glsym_func_void_ptr) ();
93typedef int (*glsym_func_int) ();
94typedef unsigned int (*glsym_func_uint) ();
95typedef unsigned char (*glsym_func_uchar) ();
96typedef unsigned char *(*glsym_func_uchar_ptr) ();
97typedef const char *(*glsym_func_const_char_ptr) ();
98
99#ifndef EGL_NATIVE_PIXMAP_KHR
100# define EGL_NATIVE_PIXMAP_KHR 0x30b0
101#endif
102_eng_fn (*glsym_eglGetProcAddress) (const char *a) = NULL;
103void (*glsym_eglBindTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
104void (*glsym_eglReleaseTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
105void *(*glsym_eglCreateImage) (EGLDisplay a, EGLContext b, EGLenum c, EGLClientBuffer d, const int *e) = NULL;
106void (*glsym_eglDestroyImage) (EGLDisplay a, void *b) = NULL;
107void (*glsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL;
108void (*glsym_glEGLImageTargetRenderbufferStorageOES) (int a, void *b) = NULL;
109void *(*glsym_eglMapImageSEC) (void *a, void *b) = NULL;
110unsigned int (*glsym_eglUnmapImageSEC) (void *a, void *b) = NULL;
111const char *(*glsym_eglQueryString) (EGLDisplay a, int name) = NULL;
112
113unsigned int (*glsym_eglLockSurface) (EGLDisplay a, EGLSurface b, const int *attrib_list) = NULL;
114unsigned int (*glsym_eglUnlockSurface) (EGLDisplay a, EGLSurface b) = NULL;
115
116// GLES2 Extensions
117void (*glsym_glGetProgramBinaryOES) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary) = NULL;
118void (*glsym_glProgramBinaryOES) (GLuint program, GLenum binaryFormat, const void *binary, GLint length) = NULL;
119void* (*glsym_glMapBufferOES) (GLenum target, GLenum access) = NULL;
120unsigned char (*glsym_glUnmapBufferOES) (GLenum target) = NULL;
121void (*glsym_glGetBufferPointervOES) (GLenum target, GLenum pname, void** params) = NULL;
122void (*glsym_glTexImage3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) = NULL;
123void (*glsym_glTexSubImage3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) = NULL;
124void (*glsym_glCopyTexSubImage3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) = NULL;
125void (*glsym_glCompressedTexImage3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data) = NULL;
126void (*glsym_glCompressedTexSubImage3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) = NULL;
127void (*glsym_glFramebufferTexture3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) = NULL;
128void (*glsym_glGetPerfMonitorGroupsAMD) (GLint* numGroups, GLsizei groupsSize, GLuint* groups) = NULL;
129void (*glsym_glGetPerfMonitorCountersAMD) (GLuint group, GLint* numCounters, GLint* maxActiveCounters, GLsizei counterSize, GLuint* counters) = NULL;
130void (*glsym_glGetPerfMonitorGroupStringAMD) (GLuint group, GLsizei bufSize, GLsizei* length, char* groupString) = NULL;
131void (*glsym_glGetPerfMonitorCounterStringAMD) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, char* counterString) = NULL;
132void (*glsym_glGetPerfMonitorCounterInfoAMD) (GLuint group, GLuint counter, GLenum pname, void* data) = NULL;
133void (*glsym_glGenPerfMonitorsAMD) (GLsizei n, GLuint* monitors) = NULL;
134void (*glsym_glDeletePerfMonitorsAMD) (GLsizei n, GLuint* monitors) = NULL;
135void (*glsym_glSelectPerfMonitorCountersAMD) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* countersList) = NULL;
136void (*glsym_glBeginPerfMonitorAMD) (GLuint monitor) = NULL;
137void (*glsym_glEndPerfMonitorAMD) (GLuint monitor) = NULL;
138void (*glsym_glGetPerfMonitorCounterDataAMD) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint* bytesWritten) = NULL;
139void (*glsym_glDiscardFramebufferEXT) (GLenum target, GLsizei numAttachments, const GLenum* attachments) = NULL;
140void (*glsym_glMultiDrawArraysEXT) (GLenum mode, GLint* first, GLsizei* count, GLsizei primcount) = NULL;
141void (*glsym_glMultiDrawElementsEXT) (GLenum mode, const GLsizei* count, GLenum type, const GLvoid** indices, GLsizei primcount) = NULL;
142void (*glsym_glDeleteFencesNV) (GLsizei n, const GLuint* fences) = NULL;
143void (*glsym_glGenFencesNV) (GLsizei n, GLuint* fences) = NULL;
144unsigned char (*glsym_glIsFenceNV) (GLuint fence) = NULL;
145unsigned char (*glsym_glTestFenceNV) (GLuint fence) = NULL;
146void (*glsym_glGetFenceivNV) (GLuint fence, GLenum pname, GLint* params) = NULL;
147void (*glsym_glFinishFenceNV) (GLuint fence) = NULL;
148void (*glsym_glSetFenceNV) (GLuint, GLenum) = NULL;
149void (*glsym_glGetDriverControlsQCOM) (GLint* num, GLsizei size, GLuint* driverControls) = NULL;
150void (*glsym_glGetDriverControlStringQCOM) (GLuint driverControl, GLsizei bufSize, GLsizei* length, char* driverControlString) = NULL;
151void (*glsym_glEnableDriverControlQCOM) (GLuint driverControl) = NULL;
152void (*glsym_glDisableDriverControlQCOM) (GLuint driverControl) = NULL;
153void (*glsym_glExtGetTexturesQCOM) (GLuint* textures, GLint maxTextures, GLint* numTextures) = NULL;
154void (*glsym_glExtGetBuffersQCOM) (GLuint* buffers, GLint maxBuffers, GLint* numBuffers) = NULL;
155void (*glsym_glExtGetRenderbuffersQCOM) (GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers) = NULL;
156void (*glsym_glExtGetFramebuffersQCOM) (GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers) = NULL;
157void (*glsym_glExtGetTexLevelParameterivQCOM) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params) = NULL;
158void (*glsym_glExtTexObjectStateOverrideiQCOM) (GLenum target, GLenum pname, GLint param) = NULL;
159void (*glsym_glExtGetTexSubImageQCOM) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void* texels) = NULL;
160void (*glsym_glExtGetBufferPointervQCOM) (GLenum target, void** params) = NULL;
161void (*glsym_glExtGetShadersQCOM) (GLuint* shaders, GLint maxShaders, GLint* numShaders) = NULL;
162void (*glsym_glExtGetProgramsQCOM) (GLuint* programs, GLint maxPrograms, GLint* numPrograms) = NULL;
163unsigned char (*glsym_glExtIsProgramBinaryQCOM) (GLuint program) = NULL;
164void (*glsym_glExtGetProgramBinarySourceQCOM) (GLuint program, GLenum shadertype, char* source, GLint* length) = NULL;
165
166
167//------ GLES 2.0 Extensions supported in EvasGL -----//
168static Extension_Entry _gl_ext_entries[] = {
169 //--- Function Extensions ---//
170 { "GL_OES_get_program_binary", "get_program_binary", 0 },
171 { "GL_OES_mapbuffer", "mapbuffer", 0 },
172 { "GL_OES_texture_3D", "texture_3D", 0 },
173 { "AMD_performance_monitor", "AMD_performance_monitor", 0 },
174 { "GL_EXT_discard_framebuffer", "discard_framebuffer", 0 },
175 { "GL_EXT_multi_draw_arrays", "multi_draw_arrays", 0 },
176 { "GL_NV_fence", "NV_fence", 0 },
177 { "GL_QCOM_driver_control", "QCOM_driver_control", 0 },
178 { "GL_QCOM_extended_get", "QCOM_extended_get", 0 },
179 { "GL_QCOM_extended_get2", "QCOM_extended_get2", 0 },
180
181 //--- Define Extensions ---//
182 { "GL_OES_compressed_ETC1_RGB8_texture", "compressed_ETC1_RGB8_texture", 0 },
183 { "GL_OES_compressed_paletted_texture", "compressed_paletted_texture", 0 },
184 { "GL_OES_depth24", "depth24", 0 },
185 { "GL_OES_depth32", "depth32", 0 },
186 { "GL_OES_EvasGL_image", "EGL_image", 0 },
187 { "GL_OES_packed_depth_stencil", "packed_depth_stencil", 0 },
188 { "GL_OES_rgb8_rgba8", "rgb8_rgba8", 0 },
189 { "GL_OES_standard_derivatives", "standard_derivatives", 0 },
190 { "GL_OES_stencil1", "stencil1", 0 },
191 { "GL_OES_stencil4", "stencil4", 0 },
192 { "GL_OES_texture_float", "texture_float", 0 },
193 { "GL_OES_texture_half_float", "texture_half_float", 0 },
194 { "GL_OES_texture_half_float_linear", "texture_half_float_linear", 0 },
195 { "GL_OES_texture_npot", "texture_npot", 0 },
196 { "GL_OES_vertex_half_float", "vertex_half_float", 0 },
197 { "GL_OES_vertex_type_10_10_10_2", "vertex_type_10_10_10_2", 0 },
198 { "GL_AMD_compressed_3DC_texture", "compressed_3DC_texture", 0 },
199 { "GL_AMD_compressed_ATC_texture", "compressed_ATC_texture", 0 },
200 { "GL_AMD_program_binary_Z400", "program_binary_Z400", 0 },
201 { "GL_EXT_blend_minmax", "blend_minmax", 0 },
202 { "GL_EXT_read_format_bgra", "read_format_bgra", 0 },
203 { "GL_EXT_texture_filter_anisotropic", "texture_filter_anisotrophic", 0 },
204 { "GL_EXT_texture_format_BGRA8888", "texture_format_BGRA8888", 0 },
205 { "GL_EXT_texture_type_2_10_10_10_REV", "texture_type_2_10_10_10_rev", 0 },
206 { "GL_IMG_program_binary", "IMG_program_binary", 0 },
207 { "GL_IMG_read_format", "IMG_read_format", 0 },
208 { "GL_IMG_shader_binary", "IMG_shader_binary", 0 },
209 { "GL_IMG_texture_compression_pvrtc", "IMG_texture_compression_pvrtc", 0 },
210 { "GL_QCOM_perfmon_global_mode", "QCOM_perfmon_global_mode", 0 },
211 { "GL_QCOM_writeonly_rendering", "QCOM_writeonly_rendering", 0 },
212 { NULL, NULL, 0}
213};
214
215//------ Extensions supported in EvasGL -----//
216static Extension_Entry _evasgl_ext_entries[] = {
217 { "EvasGL_KHR_image", "EGL_KHR_image", 0 },
218 { "EvasGL_KHR_vg_parent_image", "EGL_KHR_vg_parent_image", 0 },
219 { "EvasGL_KHR_gl_texture_2D_image", "EGL_KHR_gl_texture_2D_image", 0 },
220 { "EvasGL_KHR_gl_texture_cubemap_image", "EGL_KHR_gl_texture_cubemap_image", 0 },
221 { "EvasGL_KHR_gl_texture_3D_image", "EGL_KHR_gl_texture_3D_image", 0 },
222 { "EvasGL_KHR_gl_renderbuffer_image", "EGL_KHR_gl_renderbuffer_image", 0 },
223 { NULL, NULL, 0 }
224};
225
226static void
227_sym_init(void)
228{
229 static int done = 0;
230
231 if (done) return;
232
233#define FINDSYM(dst, sym, typ) \
234 if ((!dst) && (glsym_eglGetProcAddress)) dst = (typ)glsym_eglGetProcAddress(sym); \
235 if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym)
236
237 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddress", glsym_func_eng_fn);
238 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressEXT", glsym_func_eng_fn);
239 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressARB", glsym_func_eng_fn);
240 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressKHR", glsym_func_eng_fn);
241
242 FINDSYM(glsym_eglBindTexImage, "eglBindTexImage", glsym_func_void);
243 FINDSYM(glsym_eglBindTexImage, "eglBindTexImageEXT", glsym_func_void);
244 FINDSYM(glsym_eglBindTexImage, "eglBindTexImageARB", glsym_func_void);
245 FINDSYM(glsym_eglBindTexImage, "eglBindTexImageKHR", glsym_func_void);
246
247 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImage", glsym_func_void);
248 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageEXT", glsym_func_void);
249 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageARB", glsym_func_void);
250 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageKHR", glsym_func_void);
251
252 FINDSYM(glsym_eglCreateImage, "eglCreateImage", glsym_func_void_ptr);
253 FINDSYM(glsym_eglCreateImage, "eglCreateImageEXT", glsym_func_void_ptr);
254 FINDSYM(glsym_eglCreateImage, "eglCreateImageARB", glsym_func_void_ptr);
255 FINDSYM(glsym_eglCreateImage, "eglCreateImageKHR", glsym_func_void_ptr);
256
257 FINDSYM(glsym_eglDestroyImage, "eglDestroyImage", glsym_func_void);
258 FINDSYM(glsym_eglDestroyImage, "eglDestroyImageEXT", glsym_func_void);
259 FINDSYM(glsym_eglDestroyImage, "eglDestroyImageARB", glsym_func_void);
260 FINDSYM(glsym_eglDestroyImage, "eglDestroyImageKHR", glsym_func_void);
261
262 FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", glsym_func_void);
263
264 FINDSYM(glsym_glEGLImageTargetRenderbufferStorageOES, "glEGLImageTargetRenderbufferStorageOES", glsym_func_void);
265
266 FINDSYM(glsym_eglMapImageSEC, "eglMapImageSEC", glsym_func_void_ptr);
267 FINDSYM(glsym_eglUnmapImageSEC, "eglUnmapImageSEC", glsym_func_uint);
268
269 FINDSYM(glsym_eglQueryString, "eglQueryString", glsym_func_const_char_ptr);
270
271 FINDSYM(glsym_eglLockSurface, "eglLockSurface", glsym_func_uint);
272 FINDSYM(glsym_eglLockSurface, "eglLockSurfaceEXT", glsym_func_uint);
273 FINDSYM(glsym_eglLockSurface, "eglLockSurfaceARB", glsym_func_uint);
274 FINDSYM(glsym_eglLockSurface, "eglLockSurfaceKHR", glsym_func_uint);
275
276 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurface", glsym_func_uint);
277 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurfaceEXT", glsym_func_uint);
278 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurfaceARB", glsym_func_uint);
279 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurfaceKHR", glsym_func_uint);
280
281 //----------- GLES 2.0 Extensions ------------//
282 // If the symbol's not found, they get set to NULL
283 // If one of the functions in the extension exists, the extension in supported
284 /* GL_OES_get_program_binary */
285 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinary", glsym_func_void);
286 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinaryEXT", glsym_func_void);
287 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinaryARB", glsym_func_void);
288 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinaryOES", glsym_func_void);
289
290 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinary", glsym_func_void);
291 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinaryEXT", glsym_func_void);
292 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinaryARB", glsym_func_void);
293 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinaryOES", glsym_func_void);
294
295 // Check the first function to see if the extension is supported...
296 if (glsym_glGetProgramBinaryOES) _gl_ext_entries[0].supported = 1;
297
298 /* GL_OES_mapbuffer */
299 FINDSYM(glsym_glMapBufferOES, "glMapBuffer", glsym_func_void_ptr);
300 FINDSYM(glsym_glMapBufferOES, "glMapBufferEXT", glsym_func_void_ptr);
301 FINDSYM(glsym_glMapBufferOES, "glMapBufferARB", glsym_func_void_ptr);
302 FINDSYM(glsym_glMapBufferOES, "glMapBufferOES", glsym_func_void_ptr);
303
304 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBuffer", glsym_func_uchar);
305 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBufferEXT", glsym_func_uchar);
306 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBufferARB", glsym_func_uchar);
307 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBufferOES", glsym_func_uchar);
308
309 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointerv", glsym_func_void);
310 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointervEXT", glsym_func_void);
311 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointervARB", glsym_func_void);
312 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointervOES", glsym_func_void);
313
314 if (glsym_glMapBufferOES) _gl_ext_entries[1].supported = 1;
315
316 /* GL_OES_texture_3D */
317 FINDSYM(glsym_glTexImage3DOES, "glTexImage3D", glsym_func_void);
318 FINDSYM(glsym_glTexImage3DOES, "glTexImage3DEXT", glsym_func_void);
319 FINDSYM(glsym_glTexImage3DOES, "glTexImage3DARB", glsym_func_void);
320 FINDSYM(glsym_glTexImage3DOES, "glTexImage3DOES", glsym_func_void);
321
322 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3D", glsym_func_void);
323 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3DEXT", glsym_func_void);
324 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3DARB", glsym_func_void);
325 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3DOES", glsym_func_void);
326
327 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3D", glsym_func_void);
328 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3DARB", glsym_func_void);
329 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3DEXT", glsym_func_void);
330 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3DOES", glsym_func_void);
331
332 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3D", glsym_func_void);
333 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3DARB", glsym_func_void);
334 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3DEXT", glsym_func_void);
335 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3DOES", glsym_func_void);
336
337 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3D", glsym_func_void);
338 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3DARB", glsym_func_void);
339 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3DEXT", glsym_func_void);
340 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3DOES", glsym_func_void);
341
342 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3D", glsym_func_void);
343 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3DARB", glsym_func_void);
344 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3DEXT", glsym_func_void);
345 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3DOES", glsym_func_void);
346
347 if (glsym_glTexSubImage3DOES) _gl_ext_entries[2].supported = 1;
348
349 /* AMD_performance_monitor */
350 FINDSYM(glsym_glGetPerfMonitorGroupsAMD, "glGetPerfMonitorGroupsAMD", glsym_func_void);
351 FINDSYM(glsym_glGetPerfMonitorCountersAMD, "glGetPerfMonitorCountersAMD", glsym_func_void);
352 FINDSYM(glsym_glGetPerfMonitorGroupStringAMD, "glGetPerfMonitorGroupStringAMD", glsym_func_void);
353 FINDSYM(glsym_glGetPerfMonitorCounterStringAMD, "glGetPerfMonitorCounterStringAMD", glsym_func_void);
354 FINDSYM(glsym_glGetPerfMonitorCounterInfoAMD, "glGetPerfMonitorCounterInfoAMD", glsym_func_void);
355 FINDSYM(glsym_glGenPerfMonitorsAMD, "glGenPerfMonitorsAMD", glsym_func_void);
356 FINDSYM(glsym_glDeletePerfMonitorsAMD, "glDeletePerfMonitorsAMD", glsym_func_void);
357 FINDSYM(glsym_glSelectPerfMonitorCountersAMD, "glSelectPerfMonitorCountersAMD", glsym_func_void);
358 FINDSYM(glsym_glBeginPerfMonitorAMD, "glBeginPerfMonitorAMD", glsym_func_void);
359 FINDSYM(glsym_glEndPerfMonitorAMD, "glEndPerfMonitorAMD", glsym_func_void);
360 FINDSYM(glsym_glGetPerfMonitorCounterDataAMD, "glGetPerfMonitorCounterDataAMD", glsym_func_void);
361
362 if (glsym_glGetPerfMonitorGroupsAMD) _gl_ext_entries[3].supported = 1;
363
364 /* GL_EXT_discard_framebuffer */
365 FINDSYM(glsym_glDiscardFramebufferEXT, "glDiscardFramebuffer", glsym_func_void);
366 FINDSYM(glsym_glDiscardFramebufferEXT, "glDiscardFramebufferARB", glsym_func_void);
367 FINDSYM(glsym_glDiscardFramebufferEXT, "glDiscardFramebufferEXT", glsym_func_void);
368
369 if (glsym_glDiscardFramebufferEXT) _gl_ext_entries[4].supported = 1;
370
371 /* GL_EXT_multi_draw_arrays */
372 FINDSYM(glsym_glMultiDrawArraysEXT, "glMultiDrawArrays", glsym_func_void);
373 FINDSYM(glsym_glMultiDrawArraysEXT, "glMultiDrawArraysARB", glsym_func_void);
374 FINDSYM(glsym_glMultiDrawArraysEXT, "glMultiDrawArraysEXT", glsym_func_void);
375
376 FINDSYM(glsym_glMultiDrawElementsEXT, "glMultiDrawElements", glsym_func_void);
377 FINDSYM(glsym_glMultiDrawElementsEXT, "glMultiDrawElementsARB", glsym_func_void);
378 FINDSYM(glsym_glMultiDrawElementsEXT, "glMultiDrawElementsEXT", glsym_func_void);
379
380 if (glsym_glMultiDrawArraysEXT) _gl_ext_entries[5].supported = 1;
381
382 /* GL_NV_fence */
383 FINDSYM(glsym_glDeleteFencesNV, "glDeleteFencesNV", glsym_func_void);
384 FINDSYM(glsym_glGenFencesNV, "glGenFencesNV", glsym_func_void);
385 FINDSYM(glsym_glIsFenceNV, "glIsFenceNV", glsym_func_uchar);
386 FINDSYM(glsym_glTestFenceNV, "glTestFenceNV", glsym_func_uchar);
387 FINDSYM(glsym_glGetFenceivNV, "glGetFenceivNV", glsym_func_void);
388 FINDSYM(glsym_glFinishFenceNV, "glFinishFenceNV", glsym_func_void);
389 FINDSYM(glsym_glSetFenceNV, "glSetFenceNV", glsym_func_void);
390
391 if (glsym_glDeleteFencesNV) _gl_ext_entries[6].supported = 1;
392
393 /* GL_QCOM_driver_control */
394 FINDSYM(glsym_glGetDriverControlsQCOM, "glGetDriverControlsQCOM", glsym_func_void);
395 FINDSYM(glsym_glGetDriverControlStringQCOM, "glGetDriverControlStringQCOM", glsym_func_void);
396 FINDSYM(glsym_glEnableDriverControlQCOM, "glEnableDriverControlQCOM", glsym_func_void);
397 FINDSYM(glsym_glDisableDriverControlQCOM, "glDisableDriverControlQCOM", glsym_func_void);
398
399 if (glsym_glGetDriverControlsQCOM) _gl_ext_entries[7].supported = 1;
400
401 /* GL_QCOM_extended_get */
402 FINDSYM(glsym_glExtGetTexturesQCOM, "glExtGetTexturesQCOM", glsym_func_void);
403 FINDSYM(glsym_glExtGetBuffersQCOM, "glExtGetBuffersQCOM", glsym_func_void);
404 FINDSYM(glsym_glExtGetRenderbuffersQCOM, "glExtGetRenderbuffersQCOM", glsym_func_void);
405 FINDSYM(glsym_glExtGetFramebuffersQCOM, "glExtGetFramebuffersQCOM", glsym_func_void);
406 FINDSYM(glsym_glExtGetTexLevelParameterivQCOM, "glExtGetTexLevelParameterivQCOM", glsym_func_void);
407 FINDSYM(glsym_glExtTexObjectStateOverrideiQCOM, "glExtTexObjectStateOverrideiQCOM", glsym_func_void);
408 FINDSYM(glsym_glExtGetTexSubImageQCOM, "glExtGetTexSubImageQCOM", glsym_func_void);
409 FINDSYM(glsym_glExtGetBufferPointervQCOM, "glExtGetBufferPointervQCOM", glsym_func_void);
410
411 if (glsym_glExtGetTexturesQCOM) _gl_ext_entries[8].supported = 1;
412
413 /* GL_QCOM_extended_get2 */
414 FINDSYM(glsym_glExtGetShadersQCOM, "glExtGetShadersQCOM", glsym_func_void);
415 FINDSYM(glsym_glExtGetProgramsQCOM, "glExtGetProgramsQCOM", glsym_func_void);
416 FINDSYM(glsym_glExtIsProgramBinaryQCOM, "glExtIsProgramBinaryQCOM", glsym_func_uchar);
417 FINDSYM(glsym_glExtGetProgramBinarySourceQCOM, "glExtGetProgramBinarySourceQCOM", glsym_func_void);
418
419 if (glsym_glExtGetShadersQCOM) _gl_ext_entries[9].supported = 1;
420}
421
422static void
423_extensions_init(Render_Engine *re)
424{
425 int i;
426 const char *glexts, *evasglexts;
427
428 memset(_gl_ext_string, 0, 1024);
429 memset(_evasgl_ext_string, 0, 1024);
430
431 // GLES 2.0 Extensions
432 glexts = (const char*)glGetString(GL_EXTENSIONS);
433
434 DBG("--------GLES 2.0 Extensions--------");
435 for (i = 0; _gl_ext_entries[i].name != NULL; i++)
436 {
437 if ( (strstr(glexts, _gl_ext_entries[i].name) != NULL) ||
438 (strstr(glexts, _gl_ext_entries[i].real_name) != NULL) )
439 {
440 _gl_ext_entries[i].supported = 1;
441 strcat(_gl_ext_string, _gl_ext_entries[i].name);
442 strcat(_gl_ext_string, " ");
443 DBG("\t%s", _gl_ext_entries[i].name);
444 }
445
446 }
447 DBG(" ");
448
449 // EGL Extensions
450 evasglexts = glsym_eglQueryString(re->win->egl_disp, EGL_EXTENSIONS);
451
452 DBG("--------EvasGL Extensions----------");
453 for (i = 0; _evasgl_ext_entries[i].name != NULL; i++)
454 {
455 if ( (strstr(evasglexts, _evasgl_ext_entries[i].name) != NULL) ||
456 (strstr(evasglexts, _evasgl_ext_entries[i].real_name) != NULL) )
457 {
458 _evasgl_ext_entries[i].supported = 1;
459 strcat(_evasgl_ext_string, _evasgl_ext_entries[i].name);
460 strcat(_evasgl_ext_string, " ");
461 DBG("\t%s", _evasgl_ext_entries[i].name);
462 }
463 }
464 DBG(" ");
465}
466
467int _evas_engine_wl_egl_log_dom = -1;
468
469/* function tables - filled in later (func and parent func) */
470static Evas_Func func, pfunc;
471
472/* Function table for GL APIs */
473static Evas_GL_API gl_funcs;
474
475static void *
476eng_info(Evas *e)
477{
478 Evas_Engine_Info_Wayland_Egl *info;
479
480 info = calloc(1, sizeof(Evas_Engine_Info_Wayland_Egl));
481 info->magic.magic = rand();
482 info->func.best_depth_get = eng_best_depth_get;
483 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
484 return info;
485 e = NULL;
486}
487
488static void
489eng_info_free(Evas *e __UNUSED__, void *info)
490{
491 Evas_Engine_Info_Wayland_Egl *in;
492// dont free! why bother? its not worth it
493// eina_log_domain_unregister(_evas_engine_GL_X11_log_dom);
494 in = (Evas_Engine_Info_Wayland_Egl *)info;
495 free(in);
496}
497
498static int
499_re_wincheck(Render_Engine *re)
500{
501 if (!re) return 0;
502 if (re->win->surf) return 1;
503 eng_window_resurf(re->win);
504 if (!re->win->surf)
505 {
506 ERR("GL engine can't re-create window surface!");
507 }
508 return 0;
509}
510
511static void
512_re_winfree(Render_Engine *re)
513{
514 if (!re->win->surf) return;
515 eng_window_unsurf(re->win);
516}
517
518static Render_Engine_GL_Resource *
519_create_internal_glue_resources(void *data)
520{
521 Render_Engine *re;
522 Render_Engine_GL_Resource *rsc;
523
524 if (!(re = (Render_Engine *)data)) return NULL;
525
526 rsc = calloc(1, sizeof(Render_Engine_GL_Resource));
527 if (!rsc) return NULL;
528
529 // EGL
530 int context_attrs[3];
531 context_attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
532 context_attrs[1] = 2;
533 context_attrs[2] = EGL_NONE;
534
535 // Create resource surface for EGL
536 rsc->surface =
537 eglCreateWindowSurface(re->win->egl_disp, re->win->egl_config,
538 (EGLNativeWindowType)re->win->win, NULL);
539 if (!rsc->surface)
540 {
541 ERR("Creating internal resource surface failed.");
542 free(rsc);
543 return NULL;
544 }
545
546 // Create a resource context for EGL
547 rsc->context =
548 eglCreateContext(re->win->egl_disp, re->win->egl_config,
549 re->win->egl_context[0], context_attrs);
550 if (!rsc->context)
551 {
552 ERR("Internal Resource Context Creations Failed.");
553 free(rsc);
554 return NULL;
555 }
556
557 // Add to the resource resource list for cleanup
558 LKL(resource_lock);
559 resource_list = eina_list_prepend(resource_list, rsc);
560 LKU(resource_lock);
561
562 // Set the resource in TLS
563 if (eina_tls_set(resource_key, (void*)rsc) == EINA_FALSE)
564 {
565 ERR("Failed setting TLS Resource");
566 free(rsc);
567 return NULL;
568 }
569
570 return rsc;
571}
572
573static int
574_destroy_internal_glue_resources(void *data)
575{
576 Render_Engine *re = (Render_Engine *)data;
577 Eina_List *l;
578 Render_Engine_GL_Resource *rsc;
579
580 // EGL
581 // Delete the Resources
582 LKL(resource_lock);
583 EINA_LIST_FOREACH(resource_list, l, rsc)
584 {
585 if (rsc->surface) eglDestroySurface(re->win->egl_disp, rsc->surface);
586 if (rsc->context) eglDestroyContext(re->win->egl_disp, rsc->context);
587 free(rsc);
588 }
589 eina_list_free(resource_list);
590 LKU(resource_lock);
591
592 // Destroy TLS
593 eina_tls_free(resource_key);
594
595 return 1;
596}
597
598static int
599eng_setup(Evas *e, void *in)
600{
601 Render_Engine *re;
602 Evas_Engine_Info_Wayland_Egl *info;
603
604 info = (Evas_Engine_Info_Wayland_Egl *)in;
605 if (!e->engine.data.output)
606 {
607 re = calloc(1, sizeof(Render_Engine));
608 if (!re) return 0;
609 re->info = info;
610 re->evas = e;
611 e->engine.data.output = re;
612 re->w = e->output.w;
613 re->h = e->output.h;
614
615 re->win = eng_window_new(re->info->info.display,
616 re->info->info.surface,
617 re->info->info.screen,
618 re->info->info.depth, re->w, re->h,
619 re->info->indirect,
620 re->info->info.destination_alpha,
621 re->info->info.rotation);
622 if (!re->win)
623 {
624 free(re);
625 e->engine.data.output = NULL;
626 return 0;
627 }
628
629 gl_wins++;
630 if (!initted)
631 {
632 evas_common_cpu_init();
633 evas_common_blend_init();
634 evas_common_image_init();
635 evas_common_convert_init();
636 evas_common_scale_init();
637 evas_common_rectangle_init();
638 evas_common_polygon_init();
639 evas_common_line_init();
640 evas_common_font_init();
641 evas_common_draw_init();
642 evas_common_tilebuf_init();
643
644 // Initialize TLS
645 if (eina_tls_new(&resource_key) == EINA_FALSE)
646 ERR("Error creating tls key");
647
648 DBG("TLS KEY create... %d", resource_key);
649
650 initted = 1;
651 }
652 }
653 else
654 {
655 if (!(re = e->engine.data.output)) return 0;
656 if (_re_wincheck(re))
657 {
658 if ((re->info->info.display != re->win->disp) ||
659 (re->info->info.surface != re->win->surface) ||
660 (re->info->info.screen != re->win->screen) ||
661 (re->info->info.depth != re->win->depth) ||
662 (re->info->info.destination_alpha != re->win->alpha) ||
663 (re->info->info.rotation != re->win->rot))
664 {
665 int inc = 0;
666
667 /* if we already have a window surface, check for NULL input surface.
668 * this will mean we are hiding the window and should destroy
669 * things properly */
670 if ((re->win->surface) && (re->info->info.surface = NULL))
671 {
672 if (re->win)
673 {
674 eng_window_free(re->win);
675 gl_wins--;
676 }
677 free(re);
678 e->engine.data.output = NULL;
679 return 0;
680 }
681
682 if (re->win)
683 {
684 re->win->gl_context->references++;
685 eng_window_free(re->win);
686 inc = 1;
687 gl_wins--;
688 }
689 re->w = e->output.w;
690 re->h = e->output.h;
691 re->win = eng_window_new(re->info->info.display,
692 re->info->info.surface,
693 re->info->info.screen,
694 re->info->info.depth,
695 re->w, re->h,
696 re->info->indirect,
697 re->info->info.destination_alpha,
698 re->info->info.rotation);
699 eng_window_use(re->win);
700 if (re->win) gl_wins++;
701 if ((re->win) && (inc))
702 re->win->gl_context->references--;
703 }
704 else if ((re->win->w != e->output.w) ||
705 (re->win->h != e->output.h))
706 {
707 re->w = e->output.w;
708 re->h = e->output.h;
709 re->win->w = e->output.w;
710 re->win->h = e->output.h;
711 eng_window_use(re->win);
712 evas_gl_common_context_resize(re->win->gl_context,
713 re->win->w, re->win->h,
714 re->win->rot);
715 }
716 }
717 }
718
719 if (!re->win)
720 {
721 free(re);
722 e->engine.data.output = NULL;
723 return 0;
724 }
725
726 if (!e->engine.data.output)
727 {
728 if (re->win)
729 {
730 eng_window_free(re->win);
731 gl_wins--;
732 }
733 free(re);
734 e->engine.data.output = NULL;
735 return 0;
736 }
737 re->tb = evas_common_tilebuf_new(re->win->w, re->win->h);
738 if (!re->tb)
739 {
740 if (re->win)
741 {
742 eng_window_free(re->win);
743 gl_wins--;
744 }
745 free(re);
746 e->engine.data.output = NULL;
747 return 0;
748 }
749 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
750
751 if (!e->engine.data.context)
752 {
753 e->engine.data.context =
754 e->engine.func->context_new(e->engine.data.output);
755 }
756
757 eng_window_use(re->win);
758
759 re->vsync = 0;
760 _sym_init();
761 _extensions_init(re);
762
763 // This is used in extensions. Not pretty but can't get display otherwise.
764 current_engine = re;
765
766 return 1;
767}
768
769static void
770eng_output_free(void *data)
771{
772 Render_Engine *re;
773
774 re = (Render_Engine *)data;
775
776 if (re)
777 {
778#if 0
779 // Destroy the resource surface
780 // Only required for EGL case
781 if (re->surface)
782 eglDestroySurface(re->win->egl_disp, re->surface);
783
784 // Destroy the resource context
785 _destroy_internal_context(re, context);
786#endif
787 if (re->win)
788 {
789 if ((initted == 1) && (gl_wins == 1))
790 _destroy_internal_glue_resources(re);
791 eng_window_free(re->win);
792 gl_wins--;
793 }
794 evas_common_tilebuf_free(re->tb);
795 free(re);
796 }
797 if ((initted == 1) && (gl_wins == 0))
798 {
799 evas_common_image_shutdown();
800 evas_common_font_shutdown();
801 initted = 0;
802 }
803}
804
805static void
806eng_output_resize(void *data, int w, int h)
807{
808 Render_Engine *re;
809
810 re = (Render_Engine *)data;
811 re->win->w = w;
812 re->win->h = h;
813 eng_window_use(re->win);
814
815 if (re->win->win)
816 wl_egl_window_resize(re->win->win, w, h, 0, 0);
817
818 evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
819 evas_common_tilebuf_free(re->tb);
820 re->tb = evas_common_tilebuf_new(w, h);
821 if (re->tb)
822 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
823}
824
825static void
826eng_output_tile_size_set(void *data, int w, int h)
827{
828 Render_Engine *re;
829
830 re = (Render_Engine *)data;
831 evas_common_tilebuf_set_tile_size(re->tb, w, h);
832}
833
834static void
835eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
836{
837 Render_Engine *re;
838
839 re = (Render_Engine *)data;
840 eng_window_use(re->win);
841 evas_gl_common_context_resize(re->win->gl_context, re->win->w, re->win->h, re->win->rot);
842 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
843
844 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, re->win->w, re->win->h);
845 if ((w <= 0) || (h <= 0)) return;
846 if (!re->win->draw.redraw)
847 {
848#if 1
849 re->win->draw.x1 = x;
850 re->win->draw.y1 = y;
851 re->win->draw.x2 = x + w - 1;
852 re->win->draw.y2 = y + h - 1;
853#else
854 re->win->draw.x1 = 0;
855 re->win->draw.y1 = 0;
856 re->win->draw.x2 = re->win->w - 1;
857 re->win->draw.y2 = re->win->h - 1;
858#endif
859 }
860 else
861 {
862 if (x < re->win->draw.x1) re->win->draw.x1 = x;
863 if (y < re->win->draw.y1) re->win->draw.y1 = y;
864 if ((x + w - 1) > re->win->draw.x2) re->win->draw.x2 = x + w - 1;
865 if ((y + h - 1) > re->win->draw.y2) re->win->draw.y2 = y + h - 1;
866 }
867 re->win->draw.redraw = 1;
868}
869
870static void
871eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
872{
873 Render_Engine *re;
874
875 re = (Render_Engine *)data;
876 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
877}
878
879static void
880eng_output_redraws_clear(void *data)
881{
882 Render_Engine *re;
883
884 re = (Render_Engine *)data;
885 evas_common_tilebuf_clear(re->tb);
886/* re->win->draw.redraw = 0;*/
887// INF("GL: finish update cycle!");
888}
889
890/* vsync games - not for now though */
891#define VSYNC_TO_SCREEN 1
892
893static void *
894eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
895{
896 Render_Engine *re;
897 Tilebuf_Rect *rects;
898
899 re = (Render_Engine *)data;
900 /* get the upate rect surface - return engine data as dummy */
901 rects = evas_common_tilebuf_get_render_rects(re->tb);
902 if (rects)
903 {
904 evas_common_tilebuf_free_render_rects(rects);
905 evas_common_tilebuf_clear(re->tb);
906 eng_window_use(re->win);
907 if (!_re_wincheck(re)) return NULL;
908 evas_gl_common_context_flush(re->win->gl_context);
909 evas_gl_common_context_newframe(re->win->gl_context);
910 if (x) *x = 0;
911 if (y) *y = 0;
912 if (w) *w = re->win->w;
913 if (h) *h = re->win->h;
914 if (cx) *cx = 0;
915 if (cy) *cy = 0;
916 if (cw) *cw = re->win->w;
917 if (ch) *ch = re->win->h;
918 return re->win->gl_context->def_surface;
919 }
920 return NULL;
921}
922
923//#define FRAMECOUNT 1
924
925#ifdef FRAMECOUNT
926static double
927get_time(void)
928{
929 struct timeval timev;
930
931 gettimeofday(&timev, NULL);
932 return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
933}
934#endif
935
936static int safe_native = -1;
937
938static void
939eng_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
940{
941 Render_Engine *re;
942#ifdef FRAMECOUNT
943 static double pt = 0.0;
944 double ta, tb;
945#endif
946
947 re = (Render_Engine *)data;
948 /* put back update surface.. in this case just unflag redraw */
949 if (!_re_wincheck(re)) return;
950 re->win->draw.redraw = 0;
951 re->win->draw.drew = 1;
952 evas_gl_common_context_flush(re->win->gl_context);
953 if (safe_native == -1)
954 {
955 const char *s;
956
957 s = getenv("EVAS_GL_SAFE_NATIVE");
958 safe_native = 0;
959 if (s)
960 safe_native = atoi(s);
961 else
962 {
963 s = (const char *)glGetString(GL_RENDERER);
964 if (s)
965 {
966 if (strstr(s, "PowerVR SGX 540") || strstr(s, "Mali-400 MP"))
967 safe_native = 1;
968 }
969 }
970 }
971 // this is needed to make sure all previous rendering is flushed to
972 // buffers/surfaces
973# ifdef FRAMECOUNT
974 double t0 = get_time();
975 ta = t0 - pt;
976 pt = t0;
977# endif
978 // previous rendering should be done and swapped
979 if (!safe_native) eglWaitNative(EGL_CORE_NATIVE_ENGINE);
980# ifdef FRAMECOUNT
981 double t1 = get_time();
982 tb = t1 - t0;
983 printf("... %1.5f -> %1.5f | ", ta, tb);
984# endif
985 if (eglGetError() != EGL_SUCCESS)
986 {
987 printf("Error: eglWaitNative(EGL_CORE_NATIVE_ENGINE) fail.\n");
988 }
989}
990
991static void
992eng_output_flush(void *data)
993{
994 Render_Engine *re;
995
996 re = (Render_Engine *)data;
997 if (!_re_wincheck(re)) return;
998 if (!re->win->draw.drew) return;
999//x// printf("frame -> flush\n");
1000 re->win->draw.drew = 0;
1001 eng_window_use(re->win);
1002
1003# ifdef FRAMECOUNT
1004 double t0 = get_time();
1005# endif
1006
1007 if (!re->vsync)
1008 {
1009 if (re->info->vsync) eglSwapInterval(re->win->egl_disp, 1);
1010 else eglSwapInterval(re->win->egl_disp, 0);
1011 re->vsync = 1;
1012 }
1013
1014 if (re->info->callback.pre_swap)
1015 re->info->callback.pre_swap(re->info->callback.data, re->evas);
1016
1017 eglSwapBuffers(re->win->egl_disp, re->win->egl_surface[0]);
1018 if (!safe_native) eglWaitGL();
1019
1020 if (re->info->callback.post_swap)
1021 re->info->callback.post_swap(re->info->callback.data, re->evas);
1022
1023 if (eglGetError() != EGL_SUCCESS)
1024 printf("Error: eglSwapBuffers() fail.\n");
1025
1026# ifdef FRAMECOUNT
1027 double t1 = get_time();
1028 printf("%1.5f\n", t1 - t0);
1029# endif
1030}
1031
1032static void
1033eng_output_idle_flush(void *data)
1034{
1035 Render_Engine *re;
1036
1037 re = (Render_Engine *)data;
1038}
1039
1040static void
1041eng_output_dump(void *data)
1042{
1043 Render_Engine *re;
1044
1045 re = (Render_Engine *)data;
1046 evas_common_image_image_all_unload();
1047 evas_common_font_font_all_unload();
1048 evas_gl_common_image_all_unload(re->win->gl_context);
1049 _re_winfree(re);
1050}
1051
1052static void
1053eng_context_cutout_add(void *data __UNUSED__, void *context, int x, int y, int w, int h)
1054{
1055// Render_Engine *re;
1056//
1057// re = (Render_Engine *)data;
1058// re->win->gl_context->dc = context;
1059 evas_common_draw_context_add_cutout(context, x, y, w, h);
1060}
1061
1062static void
1063eng_context_cutout_clear(void *data __UNUSED__, void *context)
1064{
1065// Render_Engine *re;
1066//
1067// re = (Render_Engine *)data;
1068// re->win->gl_context->dc = context;
1069 evas_common_draw_context_clear_cutouts(context);
1070}
1071
1072static void
1073eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
1074{
1075 Render_Engine *re;
1076
1077 re = (Render_Engine *)data;
1078 eng_window_use(re->win);
1079 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1080 re->win->gl_context->dc = context;
1081 evas_gl_common_rect_draw(re->win->gl_context, x, y, w, h);
1082}
1083
1084static void
1085eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
1086{
1087 Render_Engine *re;
1088
1089 re = (Render_Engine *)data;
1090 eng_window_use(re->win);
1091 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1092 re->win->gl_context->dc = context;
1093 evas_gl_common_line_draw(re->win->gl_context, x1, y1, x2, y2);
1094}
1095
1096static void *
1097eng_polygon_point_add(void *data, void *context __UNUSED__, void *polygon, int x, int y)
1098{
1099 Render_Engine *re;
1100
1101 re = (Render_Engine *)data;
1102 return evas_gl_common_poly_point_add(polygon, x, y);
1103}
1104
1105static void *
1106eng_polygon_points_clear(void *data, void *context __UNUSED__, void *polygon)
1107{
1108 Render_Engine *re;
1109
1110 re = (Render_Engine *)data;
1111 return evas_gl_common_poly_points_clear(polygon);
1112}
1113
1114static void
1115eng_polygon_draw(void *data, void *context, void *surface __UNUSED__, void *polygon, int x, int y)
1116{
1117 Render_Engine *re;
1118
1119 re = (Render_Engine *)data;
1120 eng_window_use(re->win);
1121 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1122 re->win->gl_context->dc = context;
1123 evas_gl_common_poly_draw(re->win->gl_context, polygon, x, y);
1124}
1125
1126static int
1127eng_image_alpha_get(void *data __UNUSED__, void *image)
1128{
1129// Render_Engine *re;
1130 Evas_GL_Image *im;
1131
1132// re = (Render_Engine *)data;
1133 if (!image) return 1;
1134 im = image;
1135 return im->alpha;
1136}
1137
1138static int
1139eng_image_colorspace_get(void *data __UNUSED__, void *image)
1140{
1141// Render_Engine *re;
1142 Evas_GL_Image *im;
1143
1144// re = (Render_Engine *)data;
1145 if (!image) return EVAS_COLORSPACE_ARGB8888;
1146 im = image;
1147 return im->cs.space;
1148}
1149
1150static void
1151eng_image_mask_create(void *data __UNUSED__, void *image)
1152{
1153 Evas_GL_Image *im;
1154
1155 if (!image) return;
1156 im = image;
1157 if (!im->im->image.data)
1158 evas_cache_image_load_data(&im->im->cache_entry);
1159 if (!im->tex)
1160 im->tex = evas_gl_common_texture_new(im->gc, im->im);
1161}
1162
1163
1164static void *
1165eng_image_alpha_set(void *data, void *image, int has_alpha)
1166{
1167 Render_Engine *re;
1168 Evas_GL_Image *im;
1169
1170 re = (Render_Engine *)data;
1171 if (!image) return NULL;
1172 im = image;
1173 if (im->alpha == has_alpha) return image;
1174 if (im->native.data)
1175 {
1176 im->alpha = has_alpha;
1177 return image;
1178 }
1179 eng_window_use(re->win);
1180 if ((im->tex) && (im->tex->pt->dyn.img))
1181 {
1182 im->alpha = has_alpha;
1183 im->tex->alpha = im->alpha;
1184 return image;
1185 }
1186 /* FIXME: can move to gl_common */
1187 if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
1188 if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image;
1189 else if ((!has_alpha) && (!im->im->cache_entry.flags.alpha)) return image;
1190 if (im->references > 1)
1191 {
1192 Evas_GL_Image *im_new;
1193
1194 im_new = evas_gl_common_image_new_from_copied_data
1195 (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
1196 im->im->image.data,
1197 eng_image_alpha_get(data, image),
1198 eng_image_colorspace_get(data, image));
1199 if (!im_new) return im;
1200 evas_gl_common_image_free(im);
1201 im = im_new;
1202 }
1203 else
1204 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
1205 return evas_gl_common_image_alpha_set(im, has_alpha ? 1 : 0);
1206// im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
1207// return image;
1208}
1209
1210static void *
1211eng_image_border_set(void *data __UNUSED__, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
1212{
1213// Render_Engine *re;
1214//
1215// re = (Render_Engine *)data;
1216 return image;
1217}
1218
1219static void
1220eng_image_border_get(void *data __UNUSED__, void *image __UNUSED__, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
1221{
1222// Render_Engine *re;
1223//
1224// re = (Render_Engine *)data;
1225}
1226
1227static char *
1228eng_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
1229{
1230// Render_Engine *re;
1231 Evas_GL_Image *im;
1232
1233// re = (Render_Engine *)data;
1234 if (!image) return NULL;
1235 im = image;
1236 if (!im->im) return NULL;
1237 return im->im->info.comment;
1238}
1239
1240static char *
1241eng_image_format_get(void *data __UNUSED__, void *image)
1242{
1243// Render_Engine *re;
1244 Evas_GL_Image *im;
1245
1246// re = (Render_Engine *)data;
1247 im = image;
1248 return NULL;
1249}
1250
1251static void
1252eng_image_colorspace_set(void *data, void *image, int cspace)
1253{
1254 Render_Engine *re;
1255 Evas_GL_Image *im;
1256
1257 re = (Render_Engine *)data;
1258 if (!image) return;
1259 im = image;
1260 if (im->native.data) return;
1261 /* FIXME: can move to gl_common */
1262 if (im->cs.space == cspace) return;
1263 eng_window_use(re->win);
1264 evas_cache_image_colorspace(&im->im->cache_entry, cspace);
1265 switch (cspace)
1266 {
1267 case EVAS_COLORSPACE_ARGB8888:
1268 if (im->cs.data)
1269 {
1270 if (!im->cs.no_free) free(im->cs.data);
1271 im->cs.data = NULL;
1272 im->cs.no_free = 0;
1273 }
1274 break;
1275 case EVAS_COLORSPACE_YCBCR422P601_PL:
1276 case EVAS_COLORSPACE_YCBCR422P709_PL:
1277 case EVAS_COLORSPACE_YCBCR422601_PL:
1278 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
1279 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
1280 if (im->tex) evas_gl_common_texture_free(im->tex);
1281 im->tex = NULL;
1282 if (im->cs.data)
1283 {
1284 if (!im->cs.no_free) free(im->cs.data);
1285 }
1286 if (im->im->cache_entry.h > 0)
1287 im->cs.data =
1288 calloc(1, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
1289 else
1290 im->cs.data = NULL;
1291 im->cs.no_free = 0;
1292 break;
1293 default:
1294 abort();
1295 break;
1296 }
1297 im->cs.space = cspace;
1298}
1299
1300/////////////////////////////////////////////////////////////////////////
1301//
1302//
1303typedef struct _Native Native;
1304
1305struct _Native
1306{
1307 Evas_Native_Surface ns;
1308 struct wl_egl_pixmap *pixmap;
1309
1310 void *egl_surface;
1311};
1312
1313// FIXME: this is enabled so updates happen - but its SLOOOOOOOOOOOOOOOW
1314// (i am sure this is the reason) not to mention seemingly superfluous. but
1315// i need to enable it for it to work on fglrx at least. havent tried nvidia.
1316//
1317// why is this the case? does anyone know? has anyone tried it on other gfx
1318// drivers?
1319//
1320//#define GLX_TEX_PIXMAP_RECREATE 1
1321
1322static void *
1323eng_image_native_set(void *data, void *image, void *native)
1324{
1325 Render_Engine *re = (Render_Engine *)data;
1326 Evas_Native_Surface *ns = native;
1327 Evas_GL_Image *im = image, *im2 = NULL;
1328 Native *n = NULL;
1329
1330 if (!im)
1331 {
1332 if ((!ns) && (ns->type == EVAS_NATIVE_SURFACE_OPENGL))
1333 {
1334 im = evas_gl_common_image_new_from_data(re->win->gl_context,
1335 ns->data.opengl.w,
1336 ns->data.opengl.h,
1337 NULL, 1,
1338 EVAS_COLORSPACE_ARGB8888);
1339 }
1340 else
1341 return NULL;
1342 }
1343
1344 if (ns)
1345 {
1346 if (im->native.data) return im;
1347 }
1348 if ((!ns) && (!im->native.data)) return im;
1349
1350 eng_window_use(re->win);
1351
1352 if (im->native.data)
1353 {
1354 if (im->native.func.free)
1355 im->native.func.free(im->native.func.data, im);
1356 evas_gl_common_image_native_disable(im);
1357 }
1358
1359 if (!ns) return im;
1360
1361 if (im2 == im) return im;
1362 if (im2)
1363 {
1364 n = im2->native.data;
1365 if (n)
1366 {
1367 evas_gl_common_image_ref(im2);
1368 evas_gl_common_image_free(im);
1369 return im2;
1370 }
1371 }
1372
1373 im2 = evas_gl_common_image_new_from_data(re->win->gl_context,
1374 im->w, im->h, NULL, im->alpha,
1375 EVAS_COLORSPACE_ARGB8888);
1376 evas_gl_common_image_free(im);
1377 im = im2;
1378
1379 return im;
1380}
1381
1382static void *
1383eng_image_native_get(void *data __UNUSED__, void *image)
1384{
1385 Evas_GL_Image *im;
1386 Native *n;
1387
1388 if (!(im = image)) return NULL;
1389 if (!(n = im->native.data)) return NULL;
1390 return &(n->ns);
1391}
1392
1393#if 0 // filtering disabled
1394static void
1395eng_image_draw_filtered(void *data, void *context, void *surface,
1396 void *image, Evas_Filter_Info *filter)
1397{
1398 Render_Engine *re = data;
1399
1400 if (!image) return;
1401 eng_window_use(re->win);
1402 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1403 re->win->gl_context->dc = context;
1404
1405 evas_gl_common_filter_draw(re->win->gl_context, image, filter);
1406}
1407
1408static Filtered_Image *
1409eng_image_filtered_get(void *im, uint8_t *key, size_t keylen)
1410{
1411 return evas_gl_common_image_filtered_get(im, key, keylen);
1412}
1413
1414static Filtered_Image *
1415eng_image_filtered_save(void *im, void *fim, uint8_t *key, size_t keylen)
1416{
1417 return evas_gl_common_image_filtered_save(im, fim, key, keylen);
1418}
1419
1420static void
1421eng_image_filtered_free(void *im, Filtered_Image *fim)
1422{
1423 evas_gl_common_image_filtered_free(im, fim);
1424}
1425#endif
1426
1427static void *
1428eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
1429{
1430 Render_Engine *re;
1431
1432 re = (Render_Engine *)data;
1433 *error = EVAS_LOAD_ERROR_NONE;
1434 eng_window_use(re->win);
1435 return evas_gl_common_image_load(re->win->gl_context, file, key, lo, error);
1436}
1437
1438static void *
1439eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
1440{
1441 Render_Engine *re;
1442
1443 re = (Render_Engine *)data;
1444 eng_window_use(re->win);
1445 return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, image_data, alpha, cspace);
1446}
1447
1448static void *
1449eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
1450{
1451 Render_Engine *re;
1452
1453 re = (Render_Engine *)data;
1454 eng_window_use(re->win);
1455 return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, image_data, alpha, cspace);
1456}
1457
1458static void
1459eng_image_free(void *data, void *image)
1460{
1461 Render_Engine *re;
1462
1463 re = (Render_Engine *)data;
1464 if (!image) return;
1465 eng_window_use(re->win);
1466 evas_gl_common_image_free(image);
1467}
1468
1469static void
1470eng_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
1471{
1472 if (!image)
1473 {
1474 *w = 0;
1475 *h = 0;
1476 return;
1477 }
1478 if (w) *w = ((Evas_GL_Image *)image)->w;
1479 if (h) *h = ((Evas_GL_Image *)image)->h;
1480}
1481
1482static void *
1483eng_image_size_set(void *data, void *image, int w, int h)
1484{
1485 Render_Engine *re;
1486 Evas_GL_Image *im = image;
1487 Evas_GL_Image *im_old;
1488
1489 re = (Render_Engine *)data;
1490 if (!im) return NULL;
1491 if (im->native.data)
1492 {
1493 im->w = w;
1494 im->h = h;
1495 return image;
1496 }
1497 eng_window_use(re->win);
1498 if ((im->tex) && (im->tex->pt->dyn.img))
1499 {
1500 evas_gl_common_texture_free(im->tex);
1501 im->tex = NULL;
1502 im->w = w;
1503 im->h = h;
1504 im->tex = evas_gl_common_texture_dynamic_new(im->gc, im);
1505 return image;
1506 }
1507 im_old = image;
1508
1509 switch (eng_image_colorspace_get(data, image))
1510 {
1511 case EVAS_COLORSPACE_YCBCR422P601_PL:
1512 case EVAS_COLORSPACE_YCBCR422P709_PL:
1513 case EVAS_COLORSPACE_YCBCR422601_PL:
1514 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
1515 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
1516 w &= ~0x1;
1517 break;
1518 }
1519
1520 if ((im_old) &&
1521 ((int)im_old->im->cache_entry.w == w) &&
1522 ((int)im_old->im->cache_entry.h == h))
1523 return image;
1524 if (im_old)
1525 {
1526 im = evas_gl_common_image_new(re->win->gl_context, w, h,
1527 eng_image_alpha_get(data, image),
1528 eng_image_colorspace_get(data, image));
1529 /*
1530 evas_common_load_image_data_from_file(im_old->im);
1531 if (im_old->im->image->data)
1532 {
1533 evas_common_blit_rectangle(im_old->im, im->im, 0, 0, w, h, 0, 0);
1534 evas_common_cpu_end_opt();
1535 }
1536 */
1537 evas_gl_common_image_free(im_old);
1538 }
1539 else
1540 im = evas_gl_common_image_new(re->win->gl_context, w, h, 1, EVAS_COLORSPACE_ARGB8888);
1541 return im;
1542}
1543
1544static void *
1545eng_image_dirty_region(void *data, void *image, int x, int y, int w, int h)
1546{
1547 Render_Engine *re;
1548 Evas_GL_Image *im = image;
1549
1550 re = (Render_Engine *)data;
1551 if (!image) return NULL;
1552 if (im->native.data) return image;
1553 eng_window_use(re->win);
1554 evas_gl_common_image_dirty(image, x, y, w, h);
1555 return image;
1556}
1557
1558static void *
1559eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, int *err)
1560{
1561 Render_Engine *re;
1562 Evas_GL_Image *im;
1563 int error;
1564
1565 re = (Render_Engine *)data;
1566 if (!image)
1567 {
1568 *image_data = NULL;
1569 if (err) *err = EVAS_LOAD_ERROR_GENERIC;
1570 return NULL;
1571 }
1572 im = image;
1573 if (im->native.data)
1574 {
1575 *image_data = NULL;
1576 if (err) *err = EVAS_LOAD_ERROR_NONE;
1577 return im;
1578 }
1579
1580 eng_window_use(re->win);
1581
1582 if ((im->tex) && (im->tex->pt) && (im->tex->pt->dyn.img) && (im->cs.space == EVAS_COLORSPACE_ARGB8888))
1583 {
1584 if (im->tex->pt->dyn.checked_out > 0)
1585 {
1586 im->tex->pt->dyn.checked_out++;
1587 *image_data = im->tex->pt->dyn.data;
1588 if (err) *err = EVAS_LOAD_ERROR_NONE;
1589 return im;
1590 }
1591 *image_data = im->tex->pt->dyn.data = glsym_eglMapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img);
1592
1593 if (!im->tex->pt->dyn.data)
1594 {
1595 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
1596 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1597 return im;
1598 }
1599 im->tex->pt->dyn.checked_out++;
1600
1601 if (err) *err = EVAS_LOAD_ERROR_NONE;
1602 return im;
1603 }
1604
1605 /* Engine can fail to create texture after cache drop like eng_image_content_hint_set function,
1606 so it is need to add code which check im->im's NULL value*/
1607
1608 if (!im->im)
1609 {
1610 *image_data = NULL;
1611 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
1612 return NULL;
1613 }
1614
1615 error = evas_cache_image_load_data(&im->im->cache_entry);
1616 switch (im->cs.space)
1617 {
1618 case EVAS_COLORSPACE_ARGB8888:
1619 if (to_write)
1620 {
1621 if (im->references > 1)
1622 {
1623 Evas_GL_Image *im_new;
1624
1625 im_new = evas_gl_common_image_new_from_copied_data
1626 (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
1627 im->im->image.data,
1628 eng_image_alpha_get(data, image),
1629 eng_image_colorspace_get(data, image));
1630 if (!im_new)
1631 {
1632 *image_data = NULL;
1633 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
1634 return NULL;
1635 }
1636 evas_gl_common_image_free(im);
1637 im = im_new;
1638 }
1639 else
1640 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
1641 }
1642 *image_data = im->im->image.data;
1643 break;
1644 case EVAS_COLORSPACE_YCBCR422P601_PL:
1645 case EVAS_COLORSPACE_YCBCR422P709_PL:
1646 case EVAS_COLORSPACE_YCBCR422601_PL:
1647 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
1648 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
1649 *image_data = im->cs.data;
1650 break;
1651 default:
1652 abort();
1653 break;
1654 }
1655 if (err) *err = error;
1656 return im;
1657}
1658
1659static void *
1660eng_image_data_put(void *data, void *image, DATA32 *image_data)
1661{
1662 Render_Engine *re;
1663 Evas_GL_Image *im, *im2;
1664
1665 re = (Render_Engine *)data;
1666 if (!image) return NULL;
1667 im = image;
1668 if (im->native.data) return image;
1669 eng_window_use(re->win);
1670 if ((im->tex) && (im->tex->pt)
1671 && (im->tex->pt->dyn.data)
1672 && (im->cs.space == EVAS_COLORSPACE_ARGB8888))
1673 {
1674 int w, h;
1675
1676 if (im->tex->pt->dyn.data == image_data)
1677 {
1678 im->tex->pt->dyn.checked_out--;
1679 if (im->tex->pt->dyn.checked_out == 0)
1680 glsym_eglUnmapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img);
1681 return image;
1682 }
1683
1684 w = im->im->cache_entry.w;
1685 h = im->im->cache_entry.h;
1686 im2 = eng_image_new_from_data(data, w, h, image_data,
1687 eng_image_alpha_get(data, image),
1688 eng_image_colorspace_get(data, image));
1689 if (!im2) return im;
1690 evas_gl_common_image_free(im);
1691 im = im2;
1692 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
1693 return im;
1694 }
1695 switch (im->cs.space)
1696 {
1697 case EVAS_COLORSPACE_ARGB8888:
1698 if (image_data != im->im->image.data)
1699 {
1700 int w, h;
1701
1702 w = im->im->cache_entry.w;
1703 h = im->im->cache_entry.h;
1704 im2 = eng_image_new_from_data(data, w, h, image_data,
1705 eng_image_alpha_get(data, image),
1706 eng_image_colorspace_get(data, image));
1707 if (!im2) return im;
1708 evas_gl_common_image_free(im);
1709 im = im2;
1710 }
1711 break;
1712 case EVAS_COLORSPACE_YCBCR422P601_PL:
1713 case EVAS_COLORSPACE_YCBCR422P709_PL:
1714 case EVAS_COLORSPACE_YCBCR422601_PL:
1715 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
1716 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
1717 if (image_data != im->cs.data)
1718 {
1719 if (im->cs.data)
1720 {
1721 if (!im->cs.no_free) free(im->cs.data);
1722 }
1723 im->cs.data = image_data;
1724 }
1725 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
1726 break;
1727 default:
1728 abort();
1729 break;
1730 }
1731 return im;
1732}
1733
1734static void
1735eng_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
1736{
1737 Evas_GL_Image *gim = image;
1738 RGBA_Image *im;
1739
1740 if (!gim) return;
1741 if (gim->native.data) return;
1742 im = (RGBA_Image *)gim->im;
1743 if (!im) return;
1744 evas_cache_image_preload_data(&im->cache_entry, target);
1745}
1746
1747static void
1748eng_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
1749{
1750 Evas_GL_Image *gim = image;
1751 RGBA_Image *im;
1752
1753 if (!gim) return;
1754 if (gim->native.data) return;
1755 im = (RGBA_Image *)gim->im;
1756 if (!im) return;
1757 evas_cache_image_preload_cancel(&im->cache_entry, target);
1758}
1759
1760static void
1761eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
1762{
1763 Render_Engine *re;
1764
1765 re = (Render_Engine *)data;
1766 if (!image) return;
1767 eng_window_use(re->win);
1768 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1769 re->win->gl_context->dc = context;
1770 evas_gl_common_image_draw(re->win->gl_context, image,
1771 src_x, src_y, src_w, src_h,
1772 dst_x, dst_y, dst_w, dst_h,
1773 smooth);
1774}
1775
1776static void
1777eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
1778{
1779 if (image) evas_gl_common_image_scale_hint_set(image, hint);
1780}
1781
1782static int
1783eng_image_scale_hint_get(void *data __UNUSED__, void *image)
1784{
1785 Evas_GL_Image *gim = image;
1786 if (!gim) return EVAS_IMAGE_SCALE_HINT_NONE;
1787 return gim->scale_hint;
1788}
1789
1790static void
1791eng_image_map_draw(void *data, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
1792{
1793 Evas_GL_Image *gim = image;
1794 Render_Engine *re;
1795
1796 re = (Render_Engine *)data;
1797 if (!image) return;
1798 eng_window_use(re->win);
1799 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1800 re->win->gl_context->dc = context;
1801 if (npoints != 4)
1802 {
1803 // FIXME: nash - you didn't fix this
1804 abort();
1805 }
1806 if ((p[0].x == p[3].x) &&
1807 (p[1].x == p[2].x) &&
1808 (p[0].y == p[1].y) &&
1809 (p[3].y == p[2].y) &&
1810 (p[0].x <= p[1].x) &&
1811 (p[0].y <= p[2].y) &&
1812 (p[0].u == 0) &&
1813 (p[0].v == 0) &&
1814 (p[1].u == (gim->w << FP)) &&
1815 (p[1].v == 0) &&
1816 (p[2].u == (gim->w << FP)) &&
1817 (p[2].v == (gim->h << FP)) &&
1818 (p[3].u == 0) &&
1819 (p[3].v == (gim->h << FP)) &&
1820 (p[0].col == 0xffffffff) &&
1821 (p[1].col == 0xffffffff) &&
1822 (p[2].col == 0xffffffff) &&
1823 (p[3].col == 0xffffffff))
1824 {
1825 int dx, dy, dw, dh;
1826
1827 dx = p[0].x >> FP;
1828 dy = p[0].y >> FP;
1829 dw = (p[2].x >> FP) - dx;
1830 dh = (p[2].y >> FP) - dy;
1831 eng_image_draw(data, context, surface, image,
1832 0, 0, gim->w, gim->h, dx, dy, dw, dh, smooth);
1833 }
1834 else
1835 {
1836 evas_gl_common_image_map_draw(re->win->gl_context, image, npoints, p,
1837 smooth, level);
1838 }
1839}
1840
1841static void *
1842eng_image_map_surface_new(void *data, int w, int h, int alpha)
1843{
1844 Render_Engine *re;
1845
1846 re = (Render_Engine *)data;
1847 return evas_gl_common_image_surface_new(re->win->gl_context, w, h, alpha);
1848}
1849
1850static void
1851eng_image_map_surface_free(void *data __UNUSED__, void *surface)
1852{
1853 evas_gl_common_image_free(surface);
1854}
1855
1856static void
1857eng_image_content_hint_set(void *data __UNUSED__, void *image, int hint)
1858{
1859 if (image) evas_gl_common_image_content_hint_set(image, hint);
1860}
1861
1862static int
1863eng_image_content_hint_get(void *data __UNUSED__, void *image)
1864{
1865 Evas_GL_Image *gim = image;
1866 if (!gim) return EVAS_IMAGE_CONTENT_HINT_NONE;
1867 return gim->content_hint;
1868}
1869
1870static void
1871eng_image_cache_flush(void *data)
1872{
1873 Render_Engine *re;
1874 int tmp_size;
1875
1876 re = (Render_Engine *)data;
1877
1878 tmp_size = evas_common_image_get_cache();
1879 evas_common_image_set_cache(0);
1880 evas_common_rgba_image_scalecache_flush();
1881 evas_gl_common_image_cache_flush(re->win->gl_context);
1882 evas_common_image_set_cache(tmp_size);
1883}
1884
1885static void
1886eng_image_cache_set(void *data, int bytes)
1887{
1888 Render_Engine *re;
1889
1890 re = (Render_Engine *)data;
1891 evas_common_image_set_cache(bytes);
1892 evas_common_rgba_image_scalecache_size_set(bytes);
1893 evas_gl_common_image_cache_flush(re->win->gl_context);
1894}
1895
1896static int
1897eng_image_cache_get(void *data __UNUSED__)
1898{
1899 return evas_common_image_get_cache();
1900}
1901
1902static void
1903eng_image_stride_get(void *data __UNUSED__, void *image, int *stride)
1904{
1905 Evas_GL_Image *im = image;
1906
1907 if ((im->tex) && (im->tex->pt->dyn.img))
1908 *stride = im->tex->pt->dyn.stride;
1909 else
1910 *stride = im->w * 4;
1911}
1912
1913static void
1914eng_font_draw(void *data, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
1915{
1916 Render_Engine *re;
1917
1918 re = (Render_Engine *)data;
1919 eng_window_use(re->win);
1920 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1921 re->win->gl_context->dc = context;
1922 {
1923 // FIXME: put im into context so we can free it
1924 static RGBA_Image *im = NULL;
1925
1926 if (!im)
1927 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
1928 im->cache_entry.w = re->win->w;
1929 im->cache_entry.h = re->win->h;
1930 evas_common_draw_context_font_ext_set(context,
1931 re->win->gl_context,
1932 evas_gl_font_texture_new,
1933 evas_gl_font_texture_free,
1934 evas_gl_font_texture_draw);
1935 evas_common_font_draw(im, context, (RGBA_Font *) font, x, y,
1936 intl_props);
1937 evas_common_draw_context_font_ext_set(context, NULL, NULL, NULL, NULL);
1938 }
1939}
1940
1941static Eina_Bool
1942eng_canvas_alpha_get(void *data, void *info __UNUSED__)
1943{
1944 Render_Engine *re = (Render_Engine *)data;
1945 return re->win->alpha;
1946}
1947
1948static int
1949_set_internal_config(Render_Engine_GL_Surface *sfc, Evas_GL_Config *cfg)
1950{
1951 // Also initialize pixel format here as well...
1952 switch(cfg->color_format)
1953 {
1954 case EVAS_GL_RGB_888:
1955 sfc->rt_fmt = GL_RGB;
1956 sfc->rt_internal_fmt = GL_RGB;
1957 break;
1958 case EVAS_GL_RGBA_8888:
1959 sfc->rt_fmt = GL_RGBA;
1960 sfc->rt_internal_fmt = GL_RGBA;
1961 break;
1962 default:
1963 ERR("Invalid Color Format!");
1964 return 0;
1965 }
1966
1967 switch(cfg->depth_bits)
1968 {
1969 case EVAS_GL_DEPTH_NONE:
1970 break;
1971 case EVAS_GL_DEPTH_BIT_8:
1972 case EVAS_GL_DEPTH_BIT_16:
1973 case EVAS_GL_DEPTH_BIT_24:
1974 // 24 bit doesn't work... just cover it with 16 for now..
1975 sfc->rb_depth_fmt = GL_DEPTH_COMPONENT16;
1976 break;
1977 case EVAS_GL_DEPTH_BIT_32:
1978 default:
1979 ERR("Unsupported Depth Bits Format!");
1980 return 0;
1981 }
1982
1983 switch(cfg->stencil_bits)
1984 {
1985 case EVAS_GL_STENCIL_NONE:
1986 break;
1987 case EVAS_GL_STENCIL_BIT_1:
1988 case EVAS_GL_STENCIL_BIT_2:
1989 case EVAS_GL_STENCIL_BIT_4:
1990 case EVAS_GL_STENCIL_BIT_8:
1991 sfc->rb_stencil_fmt = GL_STENCIL_INDEX8;
1992 break;
1993 case EVAS_GL_STENCIL_BIT_16:
1994 default:
1995 ERR("Unsupported Stencil Bits Format!");
1996 return 0;
1997 }
1998
1999 // Do Packed Depth24_Stencil8 Later...
2000
2001 return 1;
2002}
2003
2004static int
2005_create_rt_buffers(Render_Engine *data __UNUSED__,
2006 Render_Engine_GL_Surface *sfc)
2007{
2008 // Render Target texture
2009 glGenTextures(1, &sfc->rt_tex );
2010
2011 // Depth RenderBuffer - Create storage here...
2012 if (sfc->depth_bits != EVAS_GL_DEPTH_NONE)
2013 glGenRenderbuffers(1, &sfc->rb_depth);
2014
2015 // Stencil RenderBuffer - Create Storage here...
2016 if (sfc->stencil_bits != EVAS_GL_STENCIL_NONE)
2017 glGenRenderbuffers(1, &sfc->rb_stencil);
2018
2019 return 1;
2020}
2021
2022static int
2023_attach_fbo_surface(Render_Engine *data __UNUSED__,
2024 Render_Engine_GL_Surface *sfc,
2025 Render_Engine_GL_Context *ctx)
2026{
2027 int fb_status;
2028
2029 // Initialize Texture
2030 glBindTexture(GL_TEXTURE_2D, sfc->rt_tex );
2031 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
2032 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
2033 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
2034 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
2035 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sfc->w, sfc->h, 0,
2036 GL_RGBA, GL_UNSIGNED_BYTE, NULL);
2037 glBindTexture(GL_TEXTURE_2D, 0);
2038
2039
2040 // Attach texture to FBO
2041 glBindFramebuffer(GL_FRAMEBUFFER, ctx->context_fbo);
2042 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
2043 GL_TEXTURE_2D, sfc->rt_tex, 0);
2044
2045 // Depth RenderBuffer - Attach it to FBO
2046 if (sfc->depth_bits != EVAS_GL_DEPTH_NONE)
2047 {
2048 glBindRenderbuffer(GL_RENDERBUFFER, sfc->rb_depth);
2049 glRenderbufferStorage(GL_RENDERBUFFER, sfc->rb_depth_fmt,
2050 sfc->w, sfc->h);
2051 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
2052 GL_RENDERBUFFER, sfc->rb_depth);
2053 glBindRenderbuffer(GL_RENDERBUFFER, 0);
2054 }
2055
2056 // Stencil RenderBuffer - Attach it to FBO
2057 if (sfc->stencil_bits != EVAS_GL_STENCIL_NONE)
2058 {
2059 glBindRenderbuffer(GL_RENDERBUFFER, sfc->rb_stencil);
2060 glRenderbufferStorage(GL_RENDERBUFFER, sfc->rb_stencil_fmt,
2061 sfc->w, sfc->h);
2062 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
2063 GL_RENDERBUFFER, sfc->rb_stencil);
2064 glBindRenderbuffer(GL_RENDERBUFFER, 0);
2065 }
2066
2067 // Check FBO for completeness
2068 fb_status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
2069 if (fb_status != GL_FRAMEBUFFER_COMPLETE)
2070 {
2071 ERR("FBO not complete!");
2072 return 0;
2073 }
2074
2075 return 1;
2076}
2077
2078
2079static void *
2080eng_gl_surface_create(void *data, void *config, int w, int h)
2081{
2082 Render_Engine *re;
2083 Render_Engine_GL_Surface *sfc;
2084 Render_Engine_GL_Resource *rsc;
2085 Evas_GL_Config *cfg;
2086 int ret;
2087
2088 sfc = calloc(1, sizeof(Render_Engine_GL_Surface));
2089 if (!sfc) return NULL;
2090
2091 re = (Render_Engine *)data;
2092 cfg = (Evas_GL_Config *)config;
2093
2094 sfc->initialized = 0;
2095 sfc->fbo_attached = 0;
2096 sfc->w = w;
2097 sfc->h = h;
2098 sfc->depth_bits = cfg->depth_bits;
2099 sfc->stencil_bits = cfg->stencil_bits;
2100 sfc->rt_tex = 0;
2101 sfc->rb_depth = 0;
2102 sfc->rb_stencil = 0;
2103
2104 // Set the internal format based on the config
2105 if (!_set_internal_config(sfc, cfg))
2106 {
2107 ERR("Unsupported Format!");
2108 free(sfc);
2109 return NULL;
2110 }
2111
2112 // Create internal resource context if it hasn't been created already
2113 if ((rsc = eina_tls_get(resource_key)) == NULL)
2114 {
2115 if ((rsc = _create_internal_glue_resources(re)) == NULL)
2116 {
2117 ERR("Error creating internal resources.");
2118 free(sfc);
2119 return NULL;
2120 }
2121 }
2122
2123 // I'm using evas's original context to create the render target texture
2124 // This is to prevent awkwardness in using native_surface_get() function
2125 // If the rt texture creation is deferred till the context is created and
2126 // make_current called, the user can't call native_surface_get() right
2127 // after the surface is created. hence this is done here using evas' context.
2128 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
2129 if (!ret)
2130 {
2131 ERR("xxxMakeCurrent() failed!");
2132 free(sfc);
2133 return NULL;
2134 }
2135
2136 // Create Render texture
2137 if (!_create_rt_buffers(re, sfc))
2138 {
2139 ERR("_create_rt_buffers() failed.");
2140 free(sfc);
2141 return NULL;
2142 }
2143
2144 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
2145 if (!ret)
2146 {
2147 ERR("xxxMakeCurrent() failed!");
2148 free(sfc);
2149 return NULL;
2150 }
2151
2152 return sfc;
2153}
2154
2155static int
2156eng_gl_surface_destroy(void *data, void *surface)
2157{
2158 Render_Engine *re;
2159 Render_Engine_GL_Surface *sfc;
2160 Render_Engine_GL_Resource *rsc;
2161 int ret;
2162
2163 re = (Render_Engine *)data;
2164 sfc = (Render_Engine_GL_Surface*)surface;
2165
2166 if (!sfc) return 0;
2167
2168 if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
2169
2170 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
2171 if (!ret)
2172 {
2173 ERR("xxxMakeCurrent() failed!");
2174 return 0;
2175 }
2176
2177 // Delete FBO/RBO and Texture here
2178 if (sfc->rt_tex)
2179 glDeleteTextures(1, &sfc->rt_tex);
2180
2181 if (sfc->rb_depth)
2182 glDeleteRenderbuffers(1, &sfc->rb_depth);
2183
2184 if (sfc->rb_stencil)
2185 glDeleteRenderbuffers(1, &sfc->rb_stencil);
2186
2187 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
2188 if (!ret)
2189 {
2190 ERR("xxxMakeCurrent() failed!");
2191 free(sfc);
2192 return 0;
2193 }
2194
2195 free(sfc);
2196 surface = NULL;
2197
2198 return 1;
2199}
2200
2201static void *
2202eng_gl_context_create(void *data, void *share_context)
2203{
2204 Render_Engine *re;
2205 Render_Engine_GL_Context *ctx;
2206 Render_Engine_GL_Context *share_ctx;
2207 int context_attrs[3];
2208
2209 ctx = calloc(1, sizeof(Render_Engine_GL_Context));
2210
2211 if (!ctx) return NULL;
2212
2213 re = (Render_Engine *)data;
2214 share_ctx = (Render_Engine_GL_Context *)share_context;
2215
2216 // Set the share context to Evas' GL context if share_context is NULL.
2217 // Otherwise set it to the given share_context.
2218
2219 // EGL
2220 context_attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
2221 context_attrs[1] = 2;
2222 context_attrs[2] = EGL_NONE;
2223
2224 if (share_ctx)
2225 {
2226 ctx->context = eglCreateContext(re->win->egl_disp,
2227 re->win->egl_config,
2228 share_ctx->context, // Share Context
2229 context_attrs);
2230 }
2231 else
2232 {
2233 ctx->context = eglCreateContext(re->win->egl_disp,
2234 re->win->egl_config,
2235 re->win->egl_context[0], // Evas' GL Context
2236 context_attrs);
2237 }
2238
2239 if (!ctx->context)
2240 {
2241 ERR("eglCreateContext() fail. code=%#x", eglGetError());
2242 return NULL;
2243 }
2244
2245 ctx->initialized = 0;
2246 ctx->context_fbo = 0;
2247 ctx->current_sfc = NULL;
2248
2249 return ctx;
2250}
2251
2252static int
2253eng_gl_context_destroy(void *data, void *context)
2254{
2255 Render_Engine *re;
2256 Render_Engine_GL_Context *ctx;
2257 Render_Engine_GL_Resource *rsc;
2258 int ret;
2259
2260 re = (Render_Engine *)data;
2261 ctx = (Render_Engine_GL_Context*)context;
2262
2263 if (!ctx) return 0;
2264
2265 if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
2266
2267 // 1. Do a make current with the given context
2268 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface,
2269 rsc->surface, ctx->context);
2270 if (!ret)
2271 {
2272 ERR("xxxMakeCurrent() failed!");
2273 return 0;
2274 }
2275
2276 // 2. Delete the FBO
2277 if (ctx->context_fbo)
2278 glDeleteFramebuffers(1, &ctx->context_fbo);
2279
2280 // 3. Destroy the Context
2281 eglDestroyContext(re->win->egl_disp, ctx->context);
2282
2283 ctx->context = EGL_NO_CONTEXT;
2284
2285 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE,
2286 EGL_NO_SURFACE, EGL_NO_CONTEXT);
2287 if (!ret)
2288 {
2289 ERR("xxxMakeCurrent() failed!");
2290 return 0;
2291 }
2292
2293 free(ctx);
2294 context = NULL;
2295
2296 return 1;
2297}
2298
2299static int
2300eng_gl_make_current(void *data __UNUSED__, void *surface, void *context)
2301{
2302 Render_Engine *re;
2303 Render_Engine_GL_Surface *sfc;
2304 Render_Engine_GL_Context *ctx;
2305 int ret = 0;
2306 Render_Engine_GL_Resource *rsc;
2307
2308 re = (Render_Engine *)data;
2309 sfc = (Render_Engine_GL_Surface*)surface;
2310 ctx = (Render_Engine_GL_Context*)context;
2311
2312 // Unset surface/context
2313 if ((!sfc) || (!ctx))
2314 {
2315 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE,
2316 EGL_NO_SURFACE, EGL_NO_CONTEXT);
2317 if (!ret)
2318 {
2319 ERR("xxxMakeCurrent() failed!");
2320 return 0;
2321 }
2322
2323 if (ctx) ctx->current_sfc = NULL;
2324 if (sfc) sfc->current_ctx = NULL;
2325 current_evgl_ctx = NULL;
2326 return 1;
2327 }
2328
2329 // Do a make current only if it's not already current
2330 if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
2331
2332 if ((eglGetCurrentContext() != ctx->context) ||
2333 (eglGetCurrentSurface(EGL_READ) != rsc->surface) ||
2334 (eglGetCurrentSurface(EGL_DRAW) != rsc->surface) )
2335 {
2336 // Flush remainder of what's in Evas' pipeline
2337 if (re->win) eng_window_use(NULL);
2338
2339 // Do a make current
2340 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface,
2341 rsc->surface, ctx->context);
2342 if (!ret)
2343 {
2344 ERR("xxxMakeCurrent() failed!");
2345 return 0;
2346 }
2347 }
2348
2349 // Create FBO if not already created
2350 if (!ctx->initialized)
2351 {
2352 glGenFramebuffers(1, &ctx->context_fbo);
2353 ctx->initialized = 1;
2354 }
2355
2356 // Attach FBO if it hasn't been attached or if surface changed
2357 if ((!sfc->fbo_attached) || (ctx->current_sfc != sfc))
2358 {
2359 if (!_attach_fbo_surface(re, sfc, ctx))
2360 {
2361 ERR("_attach_fbo_surface() failed.");
2362 return 0;
2363 }
2364
2365 if (ctx->current_fbo)
2366 // Bind to the previously bound buffer
2367 glBindFramebuffer(GL_FRAMEBUFFER, ctx->current_fbo);
2368 else
2369 // Bind FBO
2370 glBindFramebuffer(GL_FRAMEBUFFER, ctx->context_fbo);
2371
2372 sfc->fbo_attached = 1;
2373 }
2374
2375 // Set the current surface/context
2376 ctx->current_sfc = sfc;
2377 sfc->current_ctx = ctx;
2378 current_evgl_ctx = ctx;
2379
2380 return 1;
2381}
2382
2383static void *
2384eng_gl_string_query(void *data __UNUSED__, int name)
2385{
2386 switch(name)
2387 {
2388 case EVAS_GL_EXTENSIONS:
2389 return (void*)_evasgl_ext_string;
2390 default:
2391 return NULL;
2392 };
2393}
2394
2395static void *
2396eng_gl_proc_address_get(void *data __UNUSED__, const char *name)
2397{
2398 if (glsym_eglGetProcAddress) return glsym_eglGetProcAddress(name);
2399 return dlsym(RTLD_DEFAULT, name);
2400}
2401
2402static int
2403eng_gl_native_surface_get(void *data, void *surface, void *native_surface)
2404{
2405 Render_Engine *re;
2406 Render_Engine_GL_Surface *sfc;
2407 Evas_Native_Surface *ns;
2408
2409 re = (Render_Engine *)data;
2410 sfc = (Render_Engine_GL_Surface*)surface;
2411 ns = (Evas_Native_Surface*)native_surface;
2412
2413 ns->type = EVAS_NATIVE_SURFACE_OPENGL;
2414 ns->version = EVAS_NATIVE_SURFACE_VERSION;
2415 ns->data.opengl.texture_id = sfc->rt_tex;
2416 ns->data.opengl.x = 0;
2417 ns->data.opengl.y = 0;
2418 ns->data.opengl.w = sfc->w;
2419 ns->data.opengl.h = sfc->h;
2420
2421 return 1;
2422}
2423
2424
2425static const GLubyte *
2426evgl_glGetString(GLenum name)
2427{
2428 if (name == GL_EXTENSIONS)
2429 return (GLubyte *)_gl_ext_string; //glGetString(GL_EXTENSIONS);
2430 else
2431 return glGetString(name);
2432}
2433
2434static void
2435evgl_glBindFramebuffer(GLenum target, GLuint framebuffer)
2436{
2437 Render_Engine_GL_Context *ctx = current_evgl_ctx;
2438
2439 // Take care of BindFramebuffer 0 issue
2440 if (framebuffer==0)
2441 {
2442 if (ctx)
2443 {
2444 glBindFramebuffer(target, ctx->context_fbo);
2445 ctx->current_fbo = 0;
2446 }
2447 }
2448 else
2449 {
2450 glBindFramebuffer(target, framebuffer);
2451
2452 // Save this for restore when doing make current
2453 if (ctx)
2454 ctx->current_fbo = framebuffer;
2455 }
2456}
2457
2458static void
2459evgl_glBindRenderbuffer(GLenum target, GLuint renderbuffer)
2460{
2461 // Add logic to take care when renderbuffer=0
2462 // On a second thought we don't need this
2463 glBindRenderbuffer(target, renderbuffer);
2464}
2465
2466static void
2467evgl_glClearDepthf(GLclampf depth)
2468{
2469 glClearDepthf(depth);
2470}
2471
2472static void
2473evgl_glDepthRangef(GLclampf zNear, GLclampf zFar)
2474{
2475 glDepthRangef(zNear, zFar);
2476}
2477
2478static void
2479evgl_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
2480{
2481 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
2482}
2483
2484static void
2485evgl_glReleaseShaderCompiler(void)
2486{
2487 glReleaseShaderCompiler();
2488}
2489
2490static void
2491evgl_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
2492{
2493 glShaderBinary(n, shaders, binaryformat, binary, length);
2494}
2495
2496//--------------------------------//
2497//#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2498// EGL Extensions
2499static void *
2500evgl_evasglCreateImage(int target, void* buffer, int *attrib_list)
2501{
2502 if (current_engine)
2503 {
2504 return glsym_eglCreateImage(current_engine->win->egl_disp,
2505 EGL_NO_CONTEXT,
2506 target,
2507 buffer,
2508 attrib_list);
2509 }
2510 else
2511 {
2512 ERR("Invalid Engine... (Can't acccess EGL Display)\n");
2513 return NULL;
2514 }
2515}
2516
2517static void
2518evgl_evasglDestroyImage(EvasGLImage image)
2519{
2520 if (current_engine)
2521 glsym_eglDestroyImage(current_engine->win->egl_disp, image);
2522 else
2523 ERR("Invalid Engine... (Can't acccess EGL Display)\n");
2524}
2525
2526static void
2527evgl_glEvasGLImageTargetTexture2DOES(GLenum target, EvasGLImage image)
2528{
2529 glsym_glEGLImageTargetTexture2DOES(target, image);
2530}
2531
2532static void
2533evgl_glEvasGLImageTargetRenderbufferStorageOES(GLenum target, EvasGLImage image)
2534{
2535 glsym_glEGLImageTargetTexture2DOES(target, image);
2536}
2537
2538//--------------------------------//
2539
2540
2541static void *
2542eng_gl_api_get(void *data)
2543{
2544 Render_Engine *re;
2545
2546 re = (Render_Engine *)data;
2547
2548 gl_funcs.version = EVAS_GL_API_VERSION;
2549
2550#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, )
2551 // GLES 2.0
2552 ORD(glActiveTexture);
2553 ORD(glAttachShader);
2554 ORD(glBindAttribLocation);
2555 ORD(glBindBuffer);
2556 ORD(glBindTexture);
2557 ORD(glBlendColor);
2558 ORD(glBlendEquation);
2559 ORD(glBlendEquationSeparate);
2560 ORD(glBlendFunc);
2561 ORD(glBlendFuncSeparate);
2562 ORD(glBufferData);
2563 ORD(glBufferSubData);
2564 ORD(glCheckFramebufferStatus);
2565 ORD(glClear);
2566 ORD(glClearColor);
2567// ORD(glClearDepthf);
2568 ORD(glClearStencil);
2569 ORD(glColorMask);
2570 ORD(glCompileShader);
2571 ORD(glCompressedTexImage2D);
2572 ORD(glCompressedTexSubImage2D);
2573 ORD(glCopyTexImage2D);
2574 ORD(glCopyTexSubImage2D);
2575 ORD(glCreateProgram);
2576 ORD(glCreateShader);
2577 ORD(glCullFace);
2578 ORD(glDeleteBuffers);
2579 ORD(glDeleteFramebuffers);
2580 ORD(glDeleteProgram);
2581 ORD(glDeleteRenderbuffers);
2582 ORD(glDeleteShader);
2583 ORD(glDeleteTextures);
2584 ORD(glDepthFunc);
2585 ORD(glDepthMask);
2586// ORD(glDepthRangef);
2587 ORD(glDetachShader);
2588 ORD(glDisable);
2589 ORD(glDisableVertexAttribArray);
2590 ORD(glDrawArrays);
2591 ORD(glDrawElements);
2592 ORD(glEnable);
2593 ORD(glEnableVertexAttribArray);
2594 ORD(glFinish);
2595 ORD(glFlush);
2596 ORD(glFramebufferRenderbuffer);
2597 ORD(glFramebufferTexture2D);
2598 ORD(glFrontFace);
2599 ORD(glGenBuffers);
2600 ORD(glGenerateMipmap);
2601 ORD(glGenFramebuffers);
2602 ORD(glGenRenderbuffers);
2603 ORD(glGenTextures);
2604 ORD(glGetActiveAttrib);
2605 ORD(glGetActiveUniform);
2606 ORD(glGetAttachedShaders);
2607 ORD(glGetAttribLocation);
2608 ORD(glGetBooleanv);
2609 ORD(glGetBufferParameteriv);
2610 ORD(glGetError);
2611 ORD(glGetFloatv);
2612 ORD(glGetFramebufferAttachmentParameteriv);
2613 ORD(glGetIntegerv);
2614 ORD(glGetProgramiv);
2615 ORD(glGetProgramInfoLog);
2616 ORD(glGetRenderbufferParameteriv);
2617 ORD(glGetShaderiv);
2618 ORD(glGetShaderInfoLog);
2619// ORD(glGetShaderPrecisionFormat);
2620 ORD(glGetShaderSource);
2621// ORD(glGetString);
2622 ORD(glGetTexParameterfv);
2623 ORD(glGetTexParameteriv);
2624 ORD(glGetUniformfv);
2625 ORD(glGetUniformiv);
2626 ORD(glGetUniformLocation);
2627 ORD(glGetVertexAttribfv);
2628 ORD(glGetVertexAttribiv);
2629 ORD(glGetVertexAttribPointerv);
2630 ORD(glHint);
2631 ORD(glIsBuffer);
2632 ORD(glIsEnabled);
2633 ORD(glIsFramebuffer);
2634 ORD(glIsProgram);
2635 ORD(glIsRenderbuffer);
2636 ORD(glIsShader);
2637 ORD(glIsTexture);
2638 ORD(glLineWidth);
2639 ORD(glLinkProgram);
2640 ORD(glPixelStorei);
2641 ORD(glPolygonOffset);
2642 ORD(glReadPixels);
2643// ORD(glReleaseShaderCompiler);
2644 ORD(glRenderbufferStorage);
2645 ORD(glSampleCoverage);
2646 ORD(glScissor);
2647// ORD(glShaderBinary);
2648 ORD(glShaderSource);
2649 ORD(glStencilFunc);
2650 ORD(glStencilFuncSeparate);
2651 ORD(glStencilMask);
2652 ORD(glStencilMaskSeparate);
2653 ORD(glStencilOp);
2654 ORD(glStencilOpSeparate);
2655 ORD(glTexImage2D);
2656 ORD(glTexParameterf);
2657 ORD(glTexParameterfv);
2658 ORD(glTexParameteri);
2659 ORD(glTexParameteriv);
2660 ORD(glTexSubImage2D);
2661 ORD(glUniform1f);
2662 ORD(glUniform1fv);
2663 ORD(glUniform1i);
2664 ORD(glUniform1iv);
2665 ORD(glUniform2f);
2666 ORD(glUniform2fv);
2667 ORD(glUniform2i);
2668 ORD(glUniform2iv);
2669 ORD(glUniform3f);
2670 ORD(glUniform3fv);
2671 ORD(glUniform3i);
2672 ORD(glUniform3iv);
2673 ORD(glUniform4f);
2674 ORD(glUniform4fv);
2675 ORD(glUniform4i);
2676 ORD(glUniform4iv);
2677 ORD(glUniformMatrix2fv);
2678 ORD(glUniformMatrix3fv);
2679 ORD(glUniformMatrix4fv);
2680 ORD(glUseProgram);
2681 ORD(glValidateProgram);
2682 ORD(glVertexAttrib1f);
2683 ORD(glVertexAttrib1fv);
2684 ORD(glVertexAttrib2f);
2685 ORD(glVertexAttrib2fv);
2686 ORD(glVertexAttrib3f);
2687 ORD(glVertexAttrib3fv);
2688 ORD(glVertexAttrib4f);
2689 ORD(glVertexAttrib4fv);
2690 ORD(glVertexAttribPointer);
2691 ORD(glViewport);
2692#undef ORD
2693
2694#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, glsym_)
2695 // Extensions
2696 ORD(glGetProgramBinaryOES);
2697 ORD(glProgramBinaryOES);
2698 ORD(glMapBufferOES);
2699 ORD(glUnmapBufferOES);
2700 ORD(glGetBufferPointervOES);
2701 ORD(glTexImage3DOES);
2702 ORD(glTexSubImage3DOES);
2703 ORD(glCopyTexSubImage3DOES);
2704 ORD(glCompressedTexImage3DOES);
2705 ORD(glCompressedTexSubImage3DOES);
2706 ORD(glFramebufferTexture3DOES);
2707 ORD(glGetPerfMonitorGroupsAMD);
2708 ORD(glGetPerfMonitorCountersAMD);
2709 ORD(glGetPerfMonitorGroupStringAMD);
2710 ORD(glGetPerfMonitorCounterStringAMD);
2711 ORD(glGetPerfMonitorCounterInfoAMD);
2712 ORD(glGenPerfMonitorsAMD);
2713 ORD(glDeletePerfMonitorsAMD);
2714 ORD(glSelectPerfMonitorCountersAMD);
2715 ORD(glBeginPerfMonitorAMD);
2716 ORD(glEndPerfMonitorAMD);
2717 ORD(glGetPerfMonitorCounterDataAMD);
2718 ORD(glDiscardFramebufferEXT);
2719 ORD(glMultiDrawArraysEXT);
2720 ORD(glMultiDrawElementsEXT);
2721 ORD(glDeleteFencesNV);
2722 ORD(glGenFencesNV);
2723 ORD(glIsFenceNV);
2724 ORD(glTestFenceNV);
2725 ORD(glGetFenceivNV);
2726 ORD(glFinishFenceNV);
2727 ORD(glSetFenceNV);
2728 ORD(glGetDriverControlsQCOM);
2729 ORD(glGetDriverControlStringQCOM);
2730 ORD(glEnableDriverControlQCOM);
2731 ORD(glDisableDriverControlQCOM);
2732 ORD(glExtGetTexturesQCOM);
2733 ORD(glExtGetBuffersQCOM);
2734 ORD(glExtGetRenderbuffersQCOM);
2735 ORD(glExtGetFramebuffersQCOM);
2736 ORD(glExtGetTexLevelParameterivQCOM);
2737 ORD(glExtTexObjectStateOverrideiQCOM);
2738 ORD(glExtGetTexSubImageQCOM);
2739 ORD(glExtGetBufferPointervQCOM);
2740 ORD(glExtGetShadersQCOM);
2741 ORD(glExtGetProgramsQCOM);
2742 ORD(glExtIsProgramBinaryQCOM);
2743 ORD(glExtGetProgramBinarySourceQCOM);
2744#undef ORD
2745
2746// Override functions wrapped by Evas_GL
2747#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, evgl_)
2748 ORD(glBindFramebuffer);
2749 ORD(glBindRenderbuffer);
2750
2751 // GLES2.0 API compat on top of desktop gl
2752 ORD(glClearDepthf);
2753 ORD(glDepthRangef);
2754 ORD(glGetShaderPrecisionFormat);
2755 ORD(glReleaseShaderCompiler);
2756 ORD(glShaderBinary);
2757
2758 ORD(glGetString);
2759
2760 // GLES 2.0 Extensions that needs wrapping
2761 ORD(evasglCreateImage);
2762 ORD(evasglDestroyImage);
2763 ORD(glEvasGLImageTargetTexture2DOES);
2764 ORD(glEvasGLImageTargetRenderbufferStorageOES);
2765
2766#undef ORD
2767
2768 return &gl_funcs;
2769}
2770
2771static int
2772eng_image_load_error_get(void *data __UNUSED__, void *image)
2773{
2774 Evas_GL_Image *im;
2775
2776 if (!image) return EVAS_LOAD_ERROR_NONE;
2777 im = image;
2778 return im->im->cache_entry.load_error;
2779}
2780
2781static Eina_Bool
2782eng_image_animated_get(void *data __UNUSED__, void *image)
2783{
2784 Evas_GL_Image *gim = image;
2785 Image_Entry *im;
2786
2787 if (!gim) return EINA_FALSE;
2788 im = (Image_Entry *)gim->im;
2789 if (!im) return EINA_FALSE;
2790
2791 return im->flags.animated;
2792}
2793
2794static int
2795eng_image_animated_frame_count_get(void *data __UNUSED__, void *image)
2796{
2797 Evas_GL_Image *gim = image;
2798 Image_Entry *im;
2799
2800 if (!gim) return -1;
2801 im = (Image_Entry *)gim->im;
2802 if (!im) return -1;
2803
2804 if (!im->flags.animated) return -1;
2805 return im->frame_count;
2806}
2807
2808static Evas_Image_Animated_Loop_Hint
2809eng_image_animated_loop_type_get(void *data __UNUSED__, void *image)
2810{
2811 Evas_GL_Image *gim = image;
2812 Image_Entry *im;
2813
2814 if (!gim) return EVAS_IMAGE_ANIMATED_HINT_NONE;
2815 im = (Image_Entry *)gim->im;
2816 if (!im) return EVAS_IMAGE_ANIMATED_HINT_NONE;
2817
2818 if (!im->flags.animated) return EVAS_IMAGE_ANIMATED_HINT_NONE;
2819 return im->loop_hint;
2820}
2821
2822static int
2823eng_image_animated_loop_count_get(void *data __UNUSED__, void *image)
2824{
2825 Evas_GL_Image *gim = image;
2826 Image_Entry *im;
2827
2828 if (!gim) return -1;
2829 im = (Image_Entry *)gim->im;
2830 if (!im) return -1;
2831
2832 if (!im->flags.animated) return -1;
2833 return im->loop_count;
2834}
2835
2836static double
2837eng_image_animated_frame_duration_get(void *data __UNUSED__, void *image, int start_frame, int frame_num)
2838{
2839 Evas_GL_Image *gim = image;
2840 Image_Entry *im;
2841
2842 if (!gim) return -1;
2843 im = (Image_Entry *)gim->im;
2844 if (!im) return -1;
2845
2846 if (!im->flags.animated) return -1;
2847 return evas_common_load_rgba_image_frame_duration_from_file(im, start_frame, frame_num);
2848}
2849
2850static Eina_Bool
2851eng_image_animated_frame_set(void *data __UNUSED__, void *image, int frame_index)
2852{
2853 Evas_GL_Image *gim = image;
2854 Image_Entry *im;
2855
2856 if (!gim) return EINA_FALSE;
2857 im = (Image_Entry *)gim->im;
2858 if (!im) return EINA_FALSE;
2859
2860 if (!im->flags.animated) return EINA_FALSE;
2861 if (im->cur_frame == frame_index) return EINA_FALSE;
2862
2863 im->cur_frame = frame_index;
2864 return EINA_TRUE;
2865}
2866
2867static Eina_Bool
2868eng_image_can_region_get(void *data __UNUSED__, void *image)
2869{
2870 Evas_GL_Image *gim = image;
2871 Image_Entry *im;
2872 if (!gim) return EINA_FALSE;
2873 im = (Image_Entry *)gim->im;
2874 if (!im) return EINA_FALSE;
2875 return ((Evas_Image_Load_Func*) im->info.loader)->do_region;
2876}
2877
2878
2879static void
2880eng_image_max_size_get(void *data, int *maxw, int *maxh)
2881{
2882 Render_Engine *re = (Render_Engine *)data;
2883 if (maxw) *maxw = re->win->gl_context->shared->info.max_texture_size;
2884 if (maxh) *maxh = re->win->gl_context->shared->info.max_texture_size;
2885}
2886
2887static int
2888module_open(Evas_Module *em)
2889{
2890 static Eina_Bool xrm_inited = EINA_FALSE;
2891 if (!xrm_inited)
2892 {
2893 xrm_inited = EINA_TRUE;
2894 XrmInitialize();
2895 }
2896
2897 if (!em) return 0;
2898 if (!evas_gl_common_module_open()) return 0;
2899 /* get whatever engine module we inherit from */
2900 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
2901 if (_evas_engine_wl_egl_log_dom < 0)
2902 {
2903 _evas_engine_wl_egl_log_dom =
2904 eina_log_domain_register("evas-gl_x11", EVAS_DEFAULT_LOG_COLOR);
2905 }
2906
2907 if (_evas_engine_wl_egl_log_dom < 0)
2908 {
2909 EINA_LOG_ERR("Can not create a module log domain.");
2910 return 0;
2911 }
2912 /* store it for later use */
2913 func = pfunc;
2914 /* now to override methods */
2915 #define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
2916 ORD(info);
2917 ORD(info_free);
2918 ORD(setup);
2919 ORD(canvas_alpha_get);
2920 ORD(output_free);
2921 ORD(output_resize);
2922 ORD(output_tile_size_set);
2923 ORD(output_redraws_rect_add);
2924 ORD(output_redraws_rect_del);
2925 ORD(output_redraws_clear);
2926 ORD(output_redraws_next_update_get);
2927 ORD(output_redraws_next_update_push);
2928 ORD(context_cutout_add);
2929 ORD(context_cutout_clear);
2930 ORD(output_flush);
2931 ORD(output_idle_flush);
2932 ORD(output_dump);
2933 ORD(rectangle_draw);
2934 ORD(line_draw);
2935 ORD(polygon_point_add);
2936 ORD(polygon_points_clear);
2937 ORD(polygon_draw);
2938
2939 ORD(image_load);
2940 ORD(image_new_from_data);
2941 ORD(image_new_from_copied_data);
2942 ORD(image_free);
2943 ORD(image_size_get);
2944 ORD(image_size_set);
2945 ORD(image_dirty_region);
2946 ORD(image_data_get);
2947 ORD(image_data_put);
2948 ORD(image_data_preload_request);
2949 ORD(image_data_preload_cancel);
2950 ORD(image_alpha_set);
2951 ORD(image_alpha_get);
2952 ORD(image_border_set);
2953 ORD(image_border_get);
2954 ORD(image_draw);
2955 ORD(image_comment_get);
2956 ORD(image_format_get);
2957 ORD(image_colorspace_set);
2958 ORD(image_colorspace_get);
2959 ORD(image_can_region_get);
2960 ORD(image_mask_create);
2961 ORD(image_native_set);
2962 ORD(image_native_get);
2963#if 0 // filtering disabled
2964 ORD(image_draw_filtered);
2965 ORD(image_filtered_get);
2966 ORD(image_filtered_save);
2967 ORD(image_filtered_free);
2968#endif
2969
2970 ORD(font_draw);
2971
2972 ORD(image_scale_hint_set);
2973 ORD(image_scale_hint_get);
2974 ORD(image_stride_get);
2975
2976 ORD(image_map_draw);
2977 ORD(image_map_surface_new);
2978 ORD(image_map_surface_free);
2979
2980 ORD(image_content_hint_set);
2981 ORD(image_content_hint_get);
2982
2983 ORD(image_cache_flush);
2984 ORD(image_cache_set);
2985 ORD(image_cache_get);
2986
2987 ORD(gl_surface_create);
2988 ORD(gl_surface_destroy);
2989 ORD(gl_context_create);
2990 ORD(gl_context_destroy);
2991 ORD(gl_make_current);
2992 ORD(gl_string_query);
2993 ORD(gl_proc_address_get);
2994 ORD(gl_native_surface_get);
2995 ORD(gl_api_get);
2996
2997 ORD(image_load_error_get);
2998
2999 /* now advertise out own api */
3000 ORD(image_animated_get);
3001 ORD(image_animated_frame_count_get);
3002 ORD(image_animated_loop_type_get);
3003 ORD(image_animated_loop_count_get);
3004 ORD(image_animated_frame_duration_get);
3005 ORD(image_animated_frame_set);
3006
3007 ORD(image_max_size_get);
3008
3009 /* now advertise out own api */
3010 em->functions = (void *)(&func);
3011 return 1;
3012}
3013
3014static void
3015module_close(Evas_Module *em __UNUSED__)
3016{
3017 eina_log_domain_unregister(_evas_engine_wl_egl_log_dom);
3018 evas_gl_common_module_close();
3019}
3020
3021static Evas_Module_Api evas_modapi =
3022{
3023 EVAS_MODULE_API_VERSION, "wayland_egl", "none", {module_open, module_close}
3024};
3025
3026EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, gl_x11);
3027
3028#ifndef EVAS_STATIC_BUILD_GL_XLIB
3029EVAS_EINA_MODULE_DEFINE(engine, gl_x11);
3030#endif
3031
3032/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/libraries/evas/src/modules/engines/wayland_egl/evas_engine.h b/libraries/evas/src/modules/engines/wayland_egl/evas_engine.h
deleted file mode 100644
index 204d793..0000000
--- a/libraries/evas/src/modules/engines/wayland_egl/evas_engine.h
+++ /dev/null
@@ -1,82 +0,0 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4#include "config.h"
5#include "evas_common.h"
6#include "evas_private.h"
7#include "evas_gl_common.h"
8#include "Evas.h"
9#include "Evas_Engine_Wayland_Egl.h"
10
11#define GL_GLEXT_PROTOTYPES
12
13#include <EGL/egl.h>
14#include <GLES2/gl2.h>
15#include <GLES2/gl2ext.h>
16#include <wayland-egl.h>
17
18extern int _evas_engine_wl_egl_log_dom;
19#ifdef ERR
20# undef ERR
21#endif
22#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_wl_egl_log_dom, __VA_ARGS__)
23
24#ifdef DBG
25# undef DBG
26#endif
27#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_wl_egl_log_dom, __VA_ARGS__)
28
29#ifdef INF
30# undef INF
31#endif
32#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_wl_egl_log_dom, __VA_ARGS__)
33
34#ifdef WRN
35# undef WRN
36#endif
37#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_wl_egl_log_dom, __VA_ARGS__)
38
39#ifdef CRIT
40# undef CRIT
41#endif
42#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_wl_egl_log_dom, __VA_ARGS__)
43
44typedef struct _Evas_GL_Wl_Window Evas_GL_Wl_Window;
45
46struct _Evas_GL_Wl_Window
47{
48 struct wl_display *disp;
49 struct wl_egl_window *win;
50 struct wl_surface *surface;
51 int w, h;
52 int screen;
53// XVisualInfo *visualinfo;
54// Visual *visual;
55// Colormap colormap;
56 int depth;
57 int alpha;
58 int rot;
59 Evas_Engine_GL_Context *gl_context;
60 struct {
61 int redraw : 1;
62 int drew : 1;
63 int x1, y1, x2, y2;
64 } draw;
65 EGLContext egl_context[1];
66 EGLSurface egl_surface[1];
67 EGLConfig egl_config;
68 EGLDisplay egl_disp;
69 int surf : 1;
70};
71
72Evas_GL_Wl_Window *eng_window_new(struct wl_display *disp, struct wl_surface *surface, int screen,
73 int depth, int w, int h, int indirect,
74 int alpha, int rot);
75void eng_window_free(Evas_GL_Wl_Window *gw);
76void eng_window_use(Evas_GL_Wl_Window *gw);
77void eng_window_unsurf(Evas_GL_Wl_Window *gw);
78void eng_window_resurf(Evas_GL_Wl_Window *gw);
79
80int eng_best_depth_get(Evas_Engine_Info_Wayland_Egl *einfo);
81
82#endif
diff --git a/libraries/evas/src/modules/engines/wayland_egl/evas_wl_main.c b/libraries/evas/src/modules/engines/wayland_egl/evas_wl_main.c
deleted file mode 100644
index 60a2371..0000000
--- a/libraries/evas/src/modules/engines/wayland_egl/evas_wl_main.c
+++ /dev/null
@@ -1,325 +0,0 @@
1#include "evas_engine.h"
2
3static Evas_GL_Wl_Window *_evas_gl_wl_window = NULL;
4
5static EGLContext context = EGL_NO_CONTEXT;
6
7// fixme: something is up/wrong here - dont know what tho...
8//#define NEWGL 1
9
10static int win_count = 0;
11
12Evas_GL_Wl_Window *
13eng_window_new(struct wl_display *disp, struct wl_surface *surface, int screen,
14 int depth, int w, int h, int indirect, int alpha, int rot)
15{
16 Evas_GL_Wl_Window *gw;
17 int context_attrs[3];
18 int config_attrs[40];
19 int major_version, minor_version;
20 int num_config, n = 0;
21 const GLubyte *vendor, *renderer, *version;
22
23 gw = calloc(1, sizeof(Evas_GL_Wl_Window));
24 if (!gw) return NULL;
25
26 win_count++;
27 gw->disp = disp;
28 gw->surface = surface;
29 gw->screen = screen;
30 gw->depth = depth;
31 gw->alpha = alpha;
32 gw->w = w;
33 gw->h = h;
34 gw->rot = rot;
35
36// EGL / GLES
37 context_attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
38 context_attrs[1] = 2;
39 context_attrs[2] = EGL_NONE;
40
41#if defined(GLES_VARIETY_S3C6410)
42 if (gw->visualinfo->depth == 16) // 16bpp
43 {
44 config_attrs[n++] = EGL_SURFACE_TYPE;
45 config_attrs[n++] = EGL_WINDOW_BIT;
46 config_attrs[n++] = EGL_RENDERABLE_TYPE;
47 config_attrs[n++] = EGL_OPENGL_ES2_BIT;
48 config_attrs[n++] = EGL_RED_SIZE;
49 config_attrs[n++] = 5;
50 config_attrs[n++] = EGL_GREEN_SIZE;
51 config_attrs[n++] = 6;
52 config_attrs[n++] = EGL_BLUE_SIZE;
53 config_attrs[n++] = 5;
54 config_attrs[n++] = EGL_DEPTH_SIZE;
55 config_attrs[n++] = 0;
56 config_attrs[n++] = EGL_STENCIL_SIZE;
57 config_attrs[n++] = 0;
58 config_attrs[n++] = EGL_NONE;
59 }
60 else // 24/32bit. no one does 8bpp anymore. and 15bpp... dead
61 {
62 config_attrs[n++] = EGL_SURFACE_TYPE;
63 config_attrs[n++] = EGL_WINDOW_BIT;
64 config_attrs[n++] = EGL_RENDERABLE_TYPE;
65 config_attrs[n++] = EGL_OPENGL_ES2_BIT;
66 config_attrs[n++] = EGL_RED_SIZE;
67 config_attrs[n++] = 8;
68 config_attrs[n++] = EGL_GREEN_SIZE;
69 config_attrs[n++] = 8;
70 config_attrs[n++] = EGL_BLUE_SIZE;
71 config_attrs[n++] = 8;
72 config_attrs[n++] = EGL_DEPTH_SIZE;
73 config_attrs[n++] = 0;
74 config_attrs[n++] = EGL_STENCIL_SIZE;
75 config_attrs[n++] = 0;
76 config_attrs[n++] = EGL_NONE;
77 }
78#elif defined(GLES_VARIETY_SGX)
79 config_attrs[n++] = EGL_SURFACE_TYPE;
80 config_attrs[n++] = EGL_WINDOW_BIT;
81 config_attrs[n++] = EGL_RENDERABLE_TYPE;
82 config_attrs[n++] = EGL_OPENGL_ES2_BIT;
83# if 0
84// FIXME: n900 - omap3 sgx libs break here
85 config_attrs[n++] = EGL_RED_SIZE;
86 config_attrs[n++] = 1;
87 config_attrs[n++] = EGL_GREEN_SIZE;
88 config_attrs[n++] = 1;
89 config_attrs[n++] = EGL_BLUE_SIZE;
90 config_attrs[n++] = 1;
91// FIXME: end n900 breakage
92# endif
93 if (gw->alpha)
94 {
95 config_attrs[n++] = EGL_ALPHA_SIZE;
96 config_attrs[n++] = 1;
97 }
98 else
99 {
100 config_attrs[n++] = EGL_ALPHA_SIZE;
101 config_attrs[n++] = 0;
102 }
103 config_attrs[n++] = EGL_DEPTH_SIZE;
104 config_attrs[n++] = 0;
105 config_attrs[n++] = EGL_STENCIL_SIZE;
106 config_attrs[n++] = 0;
107 config_attrs[n++] = EGL_NONE;
108#endif
109
110 gw->egl_disp = eglGetDisplay((EGLNativeDisplayType)(gw->disp));
111 if (!gw->egl_disp)
112 {
113 ERR("eglGetDisplay() fail. code=%#x", eglGetError());
114 eng_window_free(gw);
115 return NULL;
116 }
117 if (!eglInitialize(gw->egl_disp, &major_version, &minor_version))
118 {
119 ERR("eglInitialize() fail. code=%#x", eglGetError());
120 eng_window_free(gw);
121 return NULL;
122 }
123 eglBindAPI(EGL_OPENGL_ES_API);
124 if (eglGetError() != EGL_SUCCESS)
125 {
126 ERR("eglBindAPI() fail. code=%#x", eglGetError());
127 eng_window_free(gw);
128 return NULL;
129 }
130
131 num_config = 0;
132 if (!eglChooseConfig(gw->egl_disp, config_attrs, &gw->egl_config,
133 1, &num_config) || (num_config != 1))
134 {
135 ERR("eglChooseConfig() fail. code=%#x", eglGetError());
136 eng_window_free(gw);
137 return NULL;
138 }
139
140 gw->win = wl_egl_window_create(gw->surface, gw->w, gw->h);
141
142 gw->egl_surface[0] = eglCreateWindowSurface(gw->egl_disp, gw->egl_config,
143 (EGLNativeWindowType)gw->win,
144 NULL);
145 if (gw->egl_surface[0] == EGL_NO_SURFACE)
146 {
147 ERR("eglCreateWindowSurface() fail for %#x. code=%#x",
148 (unsigned int)gw->win, eglGetError());
149 eng_window_free(gw);
150 return NULL;
151 }
152
153 if (context == EGL_NO_CONTEXT)
154 context = eglCreateContext(gw->egl_disp, gw->egl_config, NULL,
155 context_attrs);
156 gw->egl_context[0] = context;
157 if (gw->egl_context[0] == EGL_NO_CONTEXT)
158 {
159 ERR("eglCreateContext() fail. code=%#x", eglGetError());
160 eng_window_free(gw);
161 return NULL;
162 }
163
164 if (eglMakeCurrent(gw->egl_disp, gw->egl_surface[0], gw->egl_surface[0],
165 gw->egl_context[0]) == EGL_FALSE)
166 {
167 ERR("eglMakeCurrent() fail. code=%#x", eglGetError());
168 eng_window_free(gw);
169 return NULL;
170 }
171
172 vendor = glGetString(GL_VENDOR);
173 renderer = glGetString(GL_RENDERER);
174 version = glGetString(GL_VERSION);
175 if (!vendor) vendor = (unsigned char *)"-UNKNOWN-";
176 if (!renderer) renderer = (unsigned char *)"-UNKNOWN-";
177 if (!version) version = (unsigned char *)"-UNKNOWN-";
178 if (getenv("EVAS_GL_INFO"))
179 {
180 fprintf(stderr, "vendor: %s\n", vendor);
181 fprintf(stderr, "renderer: %s\n", renderer);
182 fprintf(stderr, "version: %s\n", version);
183 }
184
185 gw->gl_context = evas_gl_common_context_new();
186 if (!gw->gl_context)
187 {
188 eng_window_free(gw);
189 return NULL;
190 }
191 gw->gl_context->egldisp = gw->egl_disp;
192 eng_window_use(gw);
193 evas_gl_common_context_resize(gw->gl_context, w, h, rot);
194 gw->surf = 1;
195 return gw;
196 indirect = 0;
197}
198
199void
200eng_window_free(Evas_GL_Wl_Window *gw)
201{
202 int ref = 0;
203
204 win_count--;
205 eng_window_use(gw);
206 if (gw == _evas_gl_wl_window) _evas_gl_wl_window = NULL;
207// if (gw->win) wl_egl_window_destroy(gw->win);
208 if (gw->gl_context)
209 {
210 ref = gw->gl_context->references - 1;
211 evas_gl_common_context_free(gw->gl_context);
212 }
213 if (gw->egl_surface[0] != EGL_NO_SURFACE)
214 eglDestroySurface(gw->egl_disp, gw->egl_surface[0]);
215 eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
216 if (ref == 0)
217 {
218 if (context) eglDestroyContext(gw->egl_disp, context);
219 context = EGL_NO_CONTEXT;
220 /* NB: This is causing an unknown hang when we run elm apps as
221 * wayland clients inside the weston compositor */
222 /* eglTerminate(gw->egl_disp); */
223 eglReleaseThread();
224 }
225 free(gw);
226}
227
228void
229eng_window_use(Evas_GL_Wl_Window *gw)
230{
231 Eina_Bool force_use = EINA_FALSE;
232
233 if (_evas_gl_wl_window)
234 {
235 if ((eglGetCurrentContext() !=
236 _evas_gl_wl_window->egl_context[0]) ||
237 (eglGetCurrentSurface(EGL_READ) !=
238 _evas_gl_wl_window->egl_surface[0]) ||
239 (eglGetCurrentSurface(EGL_DRAW) !=
240 _evas_gl_wl_window->egl_surface[0]))
241 force_use = EINA_TRUE;
242 }
243 if ((_evas_gl_wl_window != gw) || (force_use))
244 {
245 if (_evas_gl_wl_window)
246 {
247 evas_gl_common_context_use(_evas_gl_wl_window->gl_context);
248 evas_gl_common_context_flush(_evas_gl_wl_window->gl_context);
249 }
250 _evas_gl_wl_window = gw;
251 if (gw)
252 {
253 // EGL / GLES
254 if (gw->egl_surface[0] != EGL_NO_SURFACE)
255 {
256 if (eglMakeCurrent(gw->egl_disp, gw->egl_surface[0],
257 gw->egl_surface[0],
258 gw->egl_context[0]) == EGL_FALSE)
259 {
260 ERR("eglMakeCurrent() failed!");
261 }
262 }
263 }
264 }
265 if (gw) evas_gl_common_context_use(gw->gl_context);
266}
267
268void
269eng_window_unsurf(Evas_GL_Wl_Window *gw)
270{
271 if (!gw->surf) return;
272 if (!getenv("EVAS_GL_WIN_RESURF")) return;
273 if (getenv("EVAS_GL_INFO")) printf("unsurf %p\n", gw);
274
275 if (_evas_gl_wl_window)
276 evas_gl_common_context_flush(_evas_gl_wl_window->gl_context);
277 if (_evas_gl_wl_window == gw)
278 {
279 eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
280 if (gw->egl_surface[0] != EGL_NO_SURFACE)
281 eglDestroySurface(gw->egl_disp, gw->egl_surface[0]);
282 gw->egl_surface[0] = EGL_NO_SURFACE;
283 _evas_gl_wl_window = NULL;
284 }
285 gw->surf = 0;
286}
287
288void
289eng_window_resurf(Evas_GL_Wl_Window *gw)
290{
291 if (gw->surf) return;
292 if (getenv("EVAS_GL_INFO")) printf("resurf %p\n", gw);
293
294 gw->egl_surface[0] =
295 eglCreateWindowSurface(gw->egl_disp, gw->egl_config,
296 (EGLNativeWindowType)gw->win, NULL);
297
298 if (gw->egl_surface[0] == EGL_NO_SURFACE)
299 {
300 ERR("eglCreateWindowSurface() fail for %#x. code=%#x",
301 (unsigned int)gw->win, eglGetError());
302 return;
303 }
304 if (eglMakeCurrent(gw->egl_disp, gw->egl_surface[0], gw->egl_surface[0],
305 gw->egl_context[0]) == EGL_FALSE)
306 {
307 ERR("eglMakeCurrent() failed!");
308 }
309 gw->surf = 1;
310}
311
312int
313eng_best_depth_get(Evas_Engine_Info_Wayland_Egl *einfo)
314{
315 if (!einfo) return 0;
316 if (!einfo->info.display) return 0;
317 return 32;
318 /* if (!_evas_gl_x11_vi) eng_best_visual_get(einfo); */
319 /* if (!_evas_gl_x11_vi) return 0; */
320 /* if (einfo->info.destination_alpha) */
321 /* { */
322 /* if (_evas_gl_x11_rgba_vi) return _evas_gl_x11_rgba_vi->depth; */
323 /* } */
324 /* return _evas_gl_x11_vi->depth; */
325}