Compare commits

...

45 Commits

Author SHA1 Message Date
Cedric BAIL 698c213823 eina: populate memory in the right limit. 2016-09-19 15:25:11 -07:00
Cedric BAIL 9e7acfc697 Revert "Set the name for table, box items"
This reverts commit 6f7608befd.

Item in table and box do not need names as they have an index. This
is breaking ABI for edje application that rely on getting the index
properly when a signal is emitted. To be precise, this did break
elemines.
2016-04-19 14:04:31 -07:00
Mike Blumenkrantz 739322e40a ecore_evas-x11: unset withdrawn flag when showing the ecore evas
while the window map event seemed like a reasonable place to unset
the withdrawn state at the time, studies and further tests have proven
that the direct show callback is even more reasonable and effective

ref T2745
2015-10-01 11:22:13 -07:00
Mike Blumenkrantz 478aaaf0d7 ecore_evas-x11: unset withdrawn state when window is mapped
according to ICCCM 4.1.4:
Newly created top-level windows are in the Withdrawn state.
Once the window has been provided with suitable properties,
the client is free to change its state...
...
Only the client can effect a transition into or out of the Withdrawn state

given that no external force can (according to spec) transition a
window out of the withdrawn state, this must be done at a reasonable
point. mapping the window seems like a reasonable point to me.

fix T2745
ref 5954289c6c

@fix
2015-10-01 11:22:13 -07:00
Stefan Schmidt 911df242ab release: Update NEWS and bump version for 1.13.3 release 2015-05-13 15:16:34 +02:00
Jean-Philippe Andre 22e210e5ae Evas filters: Fix glReadPixels usage for EGL
This is a simplified version of the patch in master:

commit 7a614c80f3
Author: Jean-Philippe Andre <jp.andre@samsung.com>
Date:   Wed May 13 10:16:17 2015 +0900

    Evas filters: Fix glReadPixels usage for EGL

    EGL might very well not support RGBA read mode, so we
    need to check for it first.

    Also remove some error logs (see previous commit), and useless
    initialization of the Evas GL engine.

    @fix
2015-05-13 10:48:43 +09:00
Mike Blumenkrantz a1ea4a417f ecore-x: use async pointer grab mode in ecore_x_window_key_grab()
using a sync grab here causes the device to be frozen in the xserver,
preventing any event processing on the device until the grab ends. it also
prevents new grabs, such as the ones which would be created by xkill when
launched from a keybinding; this means that as long as the grabbed key is
held, the pointer is effectively dead to the world.

I attempted to find the reason for using sync pointer grabs here,
but the original commit message was:

  aaaahmmm.. no.. this.. oops

see https://git.enlightenment.org/legacy/ecore.git/commit/?id=f62faeae288fc8211d5f97b43d3b81de87db0942

fix T2228
2015-04-30 12:24:30 -04:00
Vincent Torri e55a3f1af8 Eina: fix eina_file_split on Windows and update unit test
@fix

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2015-04-29 15:28:14 +09:00
Jean-Philippe Andre 2e6e14dd73 Edje embryo: Fix invalid check for get_state_val (text str)
@fix
2015-04-29 13:39:43 +09:00
Jaehwan Kim 8f397d559a evas_text: fix default return value.
@fix
2015-04-23 22:12:32 +09:00
Jaehwan Kim ffdd54df34 ecore_timer: fix the default return value.
When this function fails to get the interval value, it should return -1.0.
Currently, the value can be integer(-1.0 has an Error).
Maybe it should be fixed.

@fix
2015-04-23 18:36:53 +09:00
Sohyun Kim 20edf12595 Evas textblock: remove freed item from the line list
@fix
2015-04-17 09:29:36 +01:00
Jean-Philippe Andre dcde3208fc Evas GL: Fallback to indirect rendering if mul_col != 0xFFFFFFFF
@fix
2015-04-14 21:32:46 +09:00
Tom Hacohen 885058bca0 Evas object: verify the parent is valid and fail if not.
It seems like before the switch to Eo, all the object_*_add functions
had magic checks that only allowed non NULL Evas pointers to be passed.
Since we switched to Eo we apparently missed the early failure we used
to have, and we instead fail later. This patch should fix that.

Thanks to jaehwan for reporting.

@fix
2015-04-13 13:54:41 +01:00
Jaehwan Kim 11a60bd059 evas_object_box: add MAGIC_CHECK when it is added.
@fix
2015-04-13 14:25:02 +09:00
Jean-Philippe Andre 76bb86f42c Evas image: Return proper path even with mmap
Since we're using a union (u.{f,file} we can't just
return u.file when the file was set as an mmap source.

@fix
2015-04-10 16:54:34 +09:00
Dongyeon Kim 7258e0d468 Evas GL: Add missing dlopen for GLX 1.x version
Summary:
For GLX backend, we should dlopen libGL.so*
@fix

Test Plan: Evas GL 1.x test cases

Reviewers: cedric, jpeg

Reviewed By: jpeg

Subscribers: mythri, mer.kim, wonsik, cedric

Differential Revision: https://phab.enlightenment.org/D2322
2015-04-10 16:54:28 +09:00
Dongyeon Kim e729f21f0f Evas GL: reset current surface to NULL when it is destroyed
Summary:
Hopefully this will fix some of the multiple windows issues for elm glview but not all.
@fix

Test Plan: elementary glview tests

Reviewers: cedric, jpeg

Reviewed By: jpeg

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2317
2015-04-10 16:54:21 +09:00
Jean-Philippe Andre 2d2ad94bc0 eina: Add NULL check for eina_threadqueue_free
@fix
2015-04-10 11:35:35 +09:00
Jaeun Choi 342e6fcd53 eina: eina_unicode_utf8_next_get should return 0
when one of the parameters is NULL to avoid null pointer access.
it also corresponds to the description in doc.

@fix
2015-04-08 21:40:05 +09:00
Stefan Schmidt 99abdc5ca4 release: Update NEWS and bump version for 1.13.2 release 2015-04-01 16:34:26 +02:00
ChunEon Park a22e1a2b9f ecore_idler: + null check.
like timer, animator we do check the idler validation
and prevert crash there just in user misusage case.

@fix
2015-03-25 14:46:59 +09:00
Vincent Torri 3521cd1fc2 evil: fix access to a file mapping object
Patch from Jorge Luis Zapatta (turran), a bit modified
by me

@fix

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-03-24 23:14:10 +01:00
Cedric BAIL 3ab85b3106 evas: fix use after free.
Thanks to Thanatermesis for tracking this in T2135.
2015-03-24 23:11:25 +01:00
ChunEon Park bb30fb6aea evas: prevent crash.
if user delete the interceptor in the interceptor callback,
the interceptors would be NULL.
So we need to check whether it's valid or not.

@fix
2015-03-23 22:02:27 +09:00
Jaeun Choi 7319f3fee3 eina: safety check for NULL pointer
data should not be NULL. it is used as the source of memcpy.

@fix
2015-03-19 16:55:14 +09:00
Youngbok Shin e1bcd5ccae evas/clip: If the clipper is image or has color, clipped area should be redrawn.
Summary:
If the clipper is image or has color, it affects to its clipees.
Even if we unset the clipper or change the clipper to another object,
it seems the clipper is not changed.

Test Plan:
Make two clipper objects and one clipee object.
And make clip the clipee according to following example

ex) Clipee object -> inner_clipper -> clipper

evas_object_clip_set(clipee, inner_clipper);
evas_object_clip_set(inner_clipper, clipper);

After checking the result and hide inner_clipper.

evas_object_clip_set(clipee, clipper);
evas_object_hide(inner_clipper);

See the result.

Reviewers: raster, cedric, Hermet, jpeg

Subscribers: woohyun, cedric

Differential Revision: https://phab.enlightenment.org/D2112

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>

Note: Technically we should not check the color of the fact that
      the clipper is a mask and not a simple rect. But because of
      real-life performance issues, damage_add was disabled so we're
      trying to keep the perf in most cases while being correct in
      cases where the clipper is visually important.

@fix (following hermet's advice)
2015-03-17 18:15:17 +09:00
Sung-Taek Hong f83f490e84 edje: correct order of functions
Summary:
_edje_object_part_text_raw_set() has to locate before
_edje_user_define_string().

 - _edje_user_define_string takes one of its parameters
   rp->typedata.text->text, and this is set
   by _edje_object_part_text_raw_set().

Signed-off-by: Sung-Taek Hong <sth253.hong@samsung.com>

Reviewers: cedric, seoz

Subscribers: seoz, cedric

Differential Revision: https://phab.enlightenment.org/D2118
2015-03-10 16:33:43 +09:00
Jean-Philippe Andre ed2402f168 Evas GL: Fix list of extensions with GLESv1
EGL/EvasGL extensions are also valid with GLESv1.
This means evasglCreateImage could be used.

@fix
2015-03-05 21:01:24 +09:00
ChunEon Park fec7492062 ecore/ecore_audio: fix timer control logically wrong.
@fix
2015-03-01 18:02:53 +09:00
Mike Blumenkrantz c1b26bccd4 ecore-wl fullscreen state is based on either window type or attribute
fixes fullscreen state detection when being set to fullscreen by the compositor

@fix
2015-02-27 09:50:29 -05:00
Stefan Schmidt 16e098df2d release: Update NEWS and bump version for 1.13.1 release 2015-02-26 13:26:59 +01:00
Carsten Haitzler 02cda8633e eina + ecore - fix main loop thread id tracking on fork
if you fork and even if you do ecore_fork_reset() a thread calling
ecore_main_loop_thread_safe_call_async(0 for example eill end up
resetting the mainloop thread id to itself (a non mainlopo thread) via
calling eina_main_loop_is() since pid changed. there is little point
in doing this so remove the pid tracking from eina and ensure mainloop
thread id is updated in ecore's fork reset.

@fix
2015-02-26 19:52:07 +09:00
Jean-Philippe Andre 2d3025e553 Evas GL: Fix leak of surfaces with GLES 1.1
When destroying a GLES 1.1 surface, it is necessary to also
destroy and remove the main surface from the list.

This issue probably never really showed up because people
don't:
- use GLES 1.1
- constantly create & destroy new Evas GL surfaces
- but mostly no one cares about 1.1 anymore :)

@fix
2015-02-25 15:07:25 +09:00
Minkyoung Kim 70d9ed501b Evas GL:Add evasgl extension macro '_EVASGL_EXT_DRVNAME_PRIVATE'.
Summary:
To distinguish supported extension name from not supported.
This patch can be solution to the problem, glGetString() returns non-supported extention name.

Test Plan: Local tests

Reviewers: raster, jpeg, Hermet, cedric

Subscribers: cedric, spacegrapher, wonsik

Differential Revision: https://phab.enlightenment.org/D1981

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2015-02-24 14:05:34 +09:00
mythri.venugopal 4e4e42f700 Evas GL: Fix issues in gles extensions initialisation
Summary:
Fix 1- If extension is not listed in GL_EXTENSIONS, do not try
to get the function address of the extension functions.
Fix 2- For GL_EXT_robustness, for GLESv1 version, do not try to
export glGetnUniformXXX functions.

Reviewers: jpeg

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D1965

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2015-02-24 14:05:29 +09:00
Mike Blumenkrantz 7e09afa5c3 ee-win32 probably might compile now
<vtorri> bad Mike !
<vtorri> the name of the function is not good, so compilation fails on Windows
<vtorri> remove 'object' in the name of the definition of the function :)

@fix
2015-02-12 16:23:07 -05:00
Stefan Schmidt b58b4f6c3f ecore/drm: Fix libinput >= 0.8 check
We need #if here as LIBINPUT_HIGHER_08 will be either 0 or 1

@fix
2015-02-12 18:39:30 +01:00
Stefan Schmidt 80d5f02276 edje_cc: Avoid segfault when strcmp NULL items
Martin reported a porblem with one of the SHR project edc files after an upgrade
to 1.13. The segfault itself is easy enough to fix here but I think there might
be other problems with the edc after this segfault is gone. We will see.

Fixes T2106
2015-02-12 18:29:26 +01:00
Chris Michael 8ba1498361 ecore-drm: Fix bad German formatting ;)
Summary: No functional changes, just formatting

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2015-02-12 18:19:27 +01:00
Stefan Schmidt 18262f8930 ecore/drm: Add support for changed libinput API since 0.8
We check for libinput 06 or higher. In version 0.8 they got an API break
(hopefully the last one before 1.0) which we did not support so far. I have
seen libinput 0.9 used on gentoo and newer ubuntu systems so we should
definitely support them.

Adding a LIBINPUT_HIGHER_08 define to check for this. So far we have only one
location where we need it. Once there is a libinput 1.0 we should remove the
support for older versions.

http://lists.freedesktop.org/archives/wayland-devel/2015-January/019383.html
2015-02-12 18:19:27 +01:00
Mike Blumenkrantz 141c27b852 ecore-drm should not use sscanf when getting logind vt
this should be more robust for when something like "/dev/tty4" is passed

@fix
2015-02-10 16:25:50 -05:00
Jean-Philippe Andre 4ac337c0b1 Evas masking: Force BLEND mode in case of image masking (GL)
This fixes some cases where the image has no alpha and COPY mode
is used, but a mask is also applied. In that case, masking
takes precedence and BLEND mode is used.

@fix
2015-02-10 18:28:27 +09:00
Jean-Philippe Andre 6f980e7350 Evas masking: Fix potential issues with map & masking
These bugs have not been observed but the code logic did not
make sense.

@fix
2015-02-10 11:41:10 +09:00
Jean-Philippe Andre 6458b1782e Evas masking: Fix some garbage pixels with the SW engine
A rare case of garbage data would happen if smooth scaling
was called with a mask and 1:1 scaling. Use the proper
render_op to COPY for the first pass.

@fix
2015-02-10 11:41:09 +09:00
41 changed files with 374 additions and 132 deletions

50
NEWS
View File

@ -1,7 +1,55 @@
==========
EFL 1.13.0
EFL 1.13.3
==========
Changes since 1.13.2:
---------------------
Fixes:
* eina: eina_unicode_utf8_next_get should return 0 when one of the parameters is NULL to avoid null pointer access. it also corresponds to the description in doc.
* eina: Add NULL check for eina_threadqueue_free
* Evas GL: reset current surface to NULL when it is destroyed
* Evas GL: Add missing dlopen for GLX 1.x version
* Evas image: Return proper path even with mmap
* evas_object_box: add MAGIC_CHECK when it is added.
* Evas object: verify the parent is valid and fail if not.
* Evas GL: Fallback to indirect rendering if mul_col != 0xFFFFFFFF
* Evas textblock: remove freed item from the line list
* ecore_timer: fix the default return value.
* evas_text: fix default return value.
* Edje embryo: Fix invalid check for get_state_val (text str)
* Eina: fix eina_file_split on Windows and update unit test
* Evas filters: Fix glReadPixels usage for EGL
Changes since 1.13.1:
---------------------
Fixes:
* ecore-wl fullscreen state is based on either window type or attribute
* ecore/ecore_audio: fix timer control logically wrong.
* Evas GL: Fix list of extensions with GLESv1
* evas/clip: If the clipper is image or has color, clipped area should be redrawn.
* eina: safety check for NULL pointer
* evas: prevent crash.
* evil: fix access to a file mapping object
* ecore_idler: + null check.
Changes since 1.13.0:
---------------------
Fixes:
* Evas masking: Fix some garbage pixels with the SW engine
* Evas masking: Fix potential issues with map & masking
* Evas masking: Force BLEND mode in case of image masking (GL)
* ecore-drm should not use sscanf when getting logind vt
* ecore/drm: Fix libinput >= 0.8 check
* ee-win32 probably might compile now
* Evas GL: Fix leak of surfaces with GLES 1.1
* eina + ecore - fix main loop thread id tracking on fork
Changes since 1.12.0:
---------------------

View File

@ -1,4 +1,4 @@
EFL_VERSION([1], [13], [0], [release])
EFL_VERSION([1], [13], [3], [release])
AC_INIT([efl], [efl_version], [enlightenment-devel@lists.sourceforge.net])
AC_PREREQ([2.60])
@ -3057,6 +3057,7 @@ AM_CONDITIONAL([HAVE_EEZE_TIZEN], [test "x${want_tizen}" = "xyes"])
#### Ecore_Drm
have_libinput_new="no"
EFL_LIB_START_OPTIONAL([Ecore_Drm], [test "${want_drm}" = "yes"])
### Additional options to configure
@ -3080,6 +3081,20 @@ EFL_INTERNAL_DEPEND_PKG([ECORE_DRM], [eina])
EFL_DEPEND_PKG([ECORE_DRM], [DRM], [libdrm >= 2.4 xkbcommon >= 0.3.0 gbm])
EFL_DEPEND_PKG([ECORE_DRM], [LIBINPUT], [libinput >= 0.6.0])
# API change from 0.7 to 0.8. So we define this to support both for now.
PKG_CHECK_EXISTS([libinput >= 0.8.0],
[have_libinput_new="yes"],
[have_libinput_new="no"])
AC_MSG_CHECKING([Use new libinput API (newer than 0.8.0)])
AC_MSG_RESULT([${have_libinput_new}])
if test "x${have_libinput_new}" = "xyes";then
AC_DEFINE_UNQUOTED([LIBINPUT_HIGHER_08], [1], [libinput version >= 0.8])
fi
if test "x${have_libinput_new}" = "xno";then
AC_DEFINE_UNQUOTED([LIBINPUT_HIGHER_08], [0], [libinput version >= 0.8])
fi
EFL_EVAL_PKGS([ECORE_DRM])
### Checks for header files

View File

@ -386,7 +386,7 @@ check_source_links(Edje_Part_Collection *pc, Edje_Part *ep, Eet_File *ef, Eina_L
EINA_LIST_FOREACH(edje_collections, l, pc_source)
{
/* Find sourced group */
if (strcmp(ep->source, pc_source->part) == 0)
if (ep->source && pc_source->part && strcmp(ep->source, pc_source->part) == 0)
{
/* Go through every part to find parts with type GROUP */
for (i = 0; i < pc_source->parts_count; ++i)
@ -418,16 +418,9 @@ static void
check_packed_items(Edje_Part_Collection *pc, Edje_Part *ep, Eet_File *ef)
{
unsigned int i;
char *def_name;
for (i = 0; i < ep->items_count; ++i)
{
if (!ep->items[i]->name)
{
def_name = alloca(strlen("item_") + strlen("0xFFFFFFFFFFFFFFFF") + 1);
sprintf(def_name, "item_%p", def_name);
ep->items[i]->name = strdup(def_name);
}
if (ep->items[i]->type == EDJE_PART_TYPE_GROUP && !ep->items[i]->source)
error_and_abort(ef, "Collection %i: missing source on packed item "
"of type GROUP in part \"%s\"",

View File

@ -486,6 +486,7 @@ ecore_fork_reset(void)
Eina_List *l, *ln;
Ecore_Fork_Cb *fcb;
eina_main_loop_define();
eina_lock_take(&_thread_safety);
ecore_pipe_del(_thread_call);

View File

@ -87,6 +87,7 @@ static void *
_ecore_idler_del(Ecore_Idler *obj)
{
Ecore_Idler_Data *idler = eo_data_scope_get(obj, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN_VAL(idler, NULL);
EINA_SAFETY_ON_TRUE_RETURN_VAL(idler->delete_me, NULL);
idler->delete_me = 1;
idlers_delete_me = 1;

View File

@ -19,7 +19,7 @@ class Ecore.Timer (Eo.Base)
/*@ Get the interval the timer ticks on. */
}
values {
double in; /*@ The new interval in seconds */
double in(-1); /*@ The new interval in seconds */
}
}
pending {

View File

@ -129,7 +129,7 @@ _ecore_time_wrapper(void *data)
pa_time_event *event = (pa_time_event *)data;
event->callback(event->mainloop, event, &event->tv, event->userdata);
event->timer = NULL;
return ECORE_CALLBACK_CANCEL;
}
@ -182,7 +182,7 @@ _ecore_pa_time_restart(pa_time_event *event, const struct timeval *tv)
}
interval = (tv->tv_sec - now.tv_sec) + (tv->tv_usec - now.tv_usec) / 1000;
if (event->timer)
if (!event->timer)
{
event->timer = ecore_timer_add(interval, _ecore_time_wrapper, event);
}

View File

@ -503,7 +503,6 @@ _device_handle_axis(struct libinput_device *device, struct libinput_event_pointe
if (!(ev = calloc(1, sizeof(Ecore_Event_Mouse_Wheel)))) return;
axis = libinput_event_pointer_get_axis(event);
timestamp = libinput_event_pointer_get_time(event);
ev->window = (Ecore_Window)input->dev->window;
@ -522,8 +521,22 @@ _device_handle_axis(struct libinput_device *device, struct libinput_event_pointe
ev->root.x = ev->x;
ev->root.y = ev->y;
#if LIBINPUT_HIGHER_08
axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL;
if (libinput_event_pointer_has_axis(event, axis))
ev->z = libinput_event_pointer_get_axis_value(event, axis);
axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL;
if (libinput_event_pointer_has_axis(event, axis))
{
ev->direction = 1;
ev->z = libinput_event_pointer_get_axis_value(event, axis);
}
#else
axis = libinput_event_pointer_get_axis(event);
if (axis == LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL) ev->direction = 1;
ev->z = libinput_event_pointer_get_axis_value(event);
#endif
ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
}

View File

@ -1,4 +1,5 @@
#include "ecore_drm_private.h"
#include <ctype.h>
#ifndef KDSKBMUTE
# define KDSKBMUTE 0x4B51
@ -11,7 +12,7 @@ static inline Eina_Bool
_ecore_drm_logind_vt_get(Ecore_Drm_Device *dev)
{
int ret;
char *tty;
char *tty, *p;
ret = sd_session_get_tty(dev->session, &tty);
if (ret < 0)
@ -20,12 +21,18 @@ _ecore_drm_logind_vt_get(Ecore_Drm_Device *dev)
return EINA_FALSE;
}
ret = sscanf(tty, "tty%u", &dev->vt);
p = strchr(tty, 't');
dev->vt = UINT_MAX;
if (p)
{
while (p[0] && (!isdigit(p[0])))
p++;
if (p[0])
dev->vt = strtoul(p, NULL, 10);
}
free(tty);
if (ret != 1) return EINA_FALSE;
return EINA_TRUE;
return dev->vt != UINT_MAX;
}
#endif

View File

@ -558,10 +558,7 @@ ecore_wl_window_fullscreen_get(Ecore_Wl_Window *win)
if (!win) return EINA_FALSE;
if (win->type == ECORE_WL_WINDOW_TYPE_FULLSCREEN)
return EINA_TRUE;
return EINA_FALSE;
return win->fullscreen || (win->type == ECORE_WL_WINDOW_TYPE_FULLSCREEN);
}
EAPI void

View File

@ -1957,7 +1957,7 @@ ecore_x_window_key_grab(Ecore_X_Window win,
for (i = 0; i < 8; i++)
xcb_grab_key(_ecore_xcb_conn, 0, win, m | locks[i],
keycode, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_ASYNC);
keycode, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);
_ecore_xcb_key_grabs_num++;
t = realloc(_ecore_xcb_key_grabs,
_ecore_xcb_key_grabs_num * sizeof(Ecore_X_Window));

View File

@ -1892,7 +1892,7 @@ _ecore_x_window_key_grab_internal(Ecore_X_Window win,
for (i = 0; i < 8; i++)
{
XGrabKey(_ecore_x_disp, keycode, m | locks[i],
win, False, GrabModeSync, GrabModeAsync);
win, False, GrabModeAsync, GrabModeAsync);
if (_ecore_xlib_sync) ecore_x_sync();
}
}

View File

@ -2784,8 +2784,8 @@ _edje_embryo_fn_get_state_val(Embryo_Program *ep, Embryo_Cell *params)
{
Edje_Part_Description_Text *text;
if (rp->part->type == EDJE_PART_TYPE_TEXT
|| rp->part->type == EDJE_PART_TYPE_TEXTBLOCK)
if ((rp->part->type != EDJE_PART_TYPE_TEXT) &&
(rp->part->type != EDJE_PART_TYPE_TEXTBLOCK))
return 0;
CHKPARAM(4);

View File

@ -1240,6 +1240,7 @@ EOLIAN Eina_Bool
_edje_object_part_text_set(Eo *obj, Edje *ed, const char *part, const char *text)
{
Edje_Real_Part *rp;
Eina_Bool int_ret;
if ((!ed) || (!part)) return EINA_FALSE;
rp = _edje_real_part_recursive_get(&ed, part);
@ -1251,8 +1252,9 @@ _edje_object_part_text_set(Eo *obj, Edje *ed, const char *part, const char *text
{
return EINA_TRUE;
}
int_ret = _edje_object_part_text_raw_set(ed, obj, rp, part, text);
_edje_user_define_string(ed, part, rp->typedata.text->text);
return _edje_object_part_text_raw_set(ed, obj, rp, part, text);
return int_ret;
}
EOLIAN const char*

View File

@ -333,12 +333,14 @@ _eina_file_map_populate(char *map, unsigned int size, Eina_Bool hugetlb)
unsigned int i;
unsigned int s;
if (size == 0) return 0;
s = hugetlb ? EINA_HUGE_PAGE : EINA_SMALL_PAGE;
for (i = 0; i < size; i += s)
r ^= map[i];
r ^= map[size];
r ^= map[size - 1];
return r;
}

View File

@ -370,6 +370,8 @@ eina_file_virtualize(const char *virtual_name, const void *data, unsigned long l
const char *tmpname = "/dev/mem/virtual\\/%16x";
int slen;
EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
// Generate an almost uniq filename based on current nsec time.
if (_eina_time_get(&tp)) return NULL;
ti = _eina_time_convert(&tp);

View File

@ -387,6 +387,16 @@ _eina_file_map_close(Eina_File_Map *map)
free(map);
}
static char *
_eina_file_sep_find(char *s)
{
for (; *s != '\0'; ++s)
if ((*s == '\\') || (*s == '/'))
return s;
return NULL;
}
/**
* @endcond
*/
@ -521,28 +531,17 @@ eina_file_split(char *path)
if (!ea)
return NULL;
current = path;
while (*current)
for (current = _eina_file_sep_find(path);
current;
path = current + 1, current = _eina_file_sep_find(path))
{
if ((*current == '\\') || (*current == '/'))
{
if (((*current == '\\') && (current[1] == '\\')) ||
((*current == '/') && (current[1] == '/')))
{
*current = '\0';
goto next_char;
}
length = current - path;
length = current - path;
if (length <= 0)
goto next_char;
if (length <= 0)
continue;
eina_array_push(ea, path);
*current = '\0';
path = current + 1;
}
next_char:
current++;
eina_array_push(ea, path);
*current = '\0';
}
if (*path != '\0')

View File

@ -35,6 +35,8 @@ eina_unicode_utf8_next_get(const char *buf, int *iindex)
Eina_Unicode r;
unsigned char d;
if (!buf || !iindex) return 0;
ind = *iindex;
/* if this char is the null terminator, exit */

View File

@ -108,7 +108,6 @@ EAPI DWORD _eina_main_loop;
# else
EAPI pthread_t _eina_main_loop;
# endif
static pid_t _eina_pid;
#endif
#ifdef MT
@ -285,7 +284,6 @@ eina_init(void)
# else
_eina_main_loop = pthread_self();
# endif
_eina_pid = getpid();
#endif
#ifdef EINA_HAVE_DEBUG_THREADS
@ -425,35 +423,9 @@ EAPI Eina_Bool
eina_main_loop_is(void)
{
#ifdef EFL_HAVE_THREADS
pid_t pid;
# ifdef _WIN32
if (_eina_main_loop == GetCurrentThreadId())
if (pthread_equal(_eina_main_loop, pthread_self()))
return EINA_TRUE;
# else
if (pthread_equal(_eina_main_loop, pthread_self()))
return EINA_TRUE;
# endif
pid = getpid();
# ifdef _WIN32
if (pid != _eina_pid)
{
_eina_pid = pid;
_eina_main_loop = GetCurrentThreadId();
return EINA_TRUE;
}
#else
if (pid != _eina_pid)
{
/* This is in case of a fork, but don't like the solution */
_eina_pid = pid;
_eina_main_loop = pthread_self();
return EINA_TRUE;
}
#endif
#endif
return EINA_FALSE;
}
@ -462,7 +434,6 @@ EAPI void
eina_main_loop_define(void)
{
#ifdef EFL_HAVE_THREADS
_eina_pid = getpid();
# ifdef _WIN32
_eina_main_loop = GetCurrentThreadId();
# else

View File

@ -365,6 +365,8 @@ eina_thread_queue_new(void)
EAPI void
eina_thread_queue_free(Eina_Thread_Queue *thq)
{
if (!thq) return;
#ifndef ATOMIC
eina_spinlock_free(&(thq->lock_pending));
#endif

View File

@ -289,8 +289,13 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write, cur);
/* i know this was to handle a case where a clip stops having children and
* becomes a solid colored box - no one ever does that... they hide the clip
* so dont add damages
if ((obj->cur->clipper->cur) && (obj->cur->clipper->cur->visible))
* so dont add damages.
* But, if the clipper could affect color to its clipees,
* the clipped area should be redrawn. */
if (((obj->cur->clipper->cur) && (obj->cur->clipper->cur->visible)) &&
(((obj->cur->clipper->cur->color.r != 255) || (obj->cur->clipper->cur->color.g != 255) ||
(obj->cur->clipper->cur->color.b != 255) || (obj->cur->clipper->cur->color.a != 255)) ||
(obj->cur->clipper->mask->is_mask)))
{
if (obj->cur->clipper->layer)
{
@ -302,7 +307,7 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
obj->cur->clipper->cur->geometry.h);
}
}
*/
_evas_object_clip_mask_unset(obj->cur->clipper);
}
evas_object_change(obj->cur->clipper->object, obj->cur->clipper);
@ -411,8 +416,13 @@ _evas_object_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write, cur);
/* i know this was to handle a case where a clip stops having children and
* becomes a solid colored box - no one ever does that... they hide the clip
* so dont add damages
if ((obj->cur->clipper->cur) && (obj->cur->clipper->cur->visible))
* so dont add damages.
* But, if the clipper could affect color to its clipees,
* the clipped area should be redrawn. */
if (((obj->cur->clipper->cur) && (obj->cur->clipper->cur->visible)) &&
(((obj->cur->clipper->cur->color.r != 255) || (obj->cur->clipper->cur->color.g != 255) ||
(obj->cur->clipper->cur->color.b != 255) || (obj->cur->clipper->cur->color.a != 255)) ||
(obj->cur->clipper->mask->is_mask)))
{
if (obj->cur->clipper->layer)
{
@ -424,7 +434,7 @@ _evas_object_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
obj->cur->clipper->cur->geometry.h);
}
}
*/
_evas_object_clip_mask_unset(obj->cur->clipper);
}
evas_object_change(obj->cur->clipper->object, obj->cur->clipper);

View File

@ -455,6 +455,9 @@ _evas_box_evas_object_smart_calculate(Eo *o, Evas_Object_Box_Data *priv)
EAPI Evas_Object *
evas_object_box_add(Evas *evas)
{
MAGIC_CHECK(evas, Evas, MAGIC_EVAS);
return NULL;
MAGIC_CHECK_END();
Evas_Object *obj = eo_add(MY_CLASS, evas);
return obj;
}

View File

@ -598,7 +598,13 @@ _evas_image_efl_file_file_set(Eo *eo_obj, Evas_Image_Data *o, const char *file,
EOLIAN static void
_evas_image_efl_file_file_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, const char **file, const char **key)
{
if (file) *file = o->cur->u.file;
if (file)
{
if (o->cur->mmaped_source)
*file = eina_file_filename_get(o->cur->u.f);
else
*file = o->cur->u.file;
}
if (key) *key = o->cur->key;
}
@ -2777,6 +2783,10 @@ evas_process_dirty_pixels(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj,
(obj->cur->color.g == 255) &&
(obj->cur->color.b == 255) &&
(obj->cur->color.a == 255) &&
(obj->cur->cache.clip.r == 255) &&
(obj->cur->cache.clip.g == 255) &&
(obj->cur->cache.clip.b == 255) &&
(obj->cur->cache.clip.a == 255) &&
(!obj->map->cur.map))
) && (!direct_force_off) )
{

View File

@ -58,7 +58,7 @@ evas_object_intercept_cleanup(Evas_Object *eo_obj)
ret = !!(obj->interceptors->Type.func); \
if (ret) \
obj->interceptors->Type.func(obj->interceptors->Type.data, eo_obj); \
obj->interceptors->Type.intercepted = EINA_FALSE; \
if (obj->interceptors) obj->interceptors->Type.intercepted = EINA_FALSE; \
return ret; \
}

View File

@ -85,11 +85,15 @@ _init_cow(void)
EOLIAN static void
_evas_object_eo_base_constructor(Eo *eo_obj, Evas_Object_Protected_Data *obj)
{
Eo *parent = NULL;
eo_do_super(eo_obj, MY_CLASS, eo_constructor());
eo_do(eo_obj, evas_obj_type_set(MY_CLASS_NAME));
eo_manual_free_set(eo_obj, EINA_TRUE);
if (!obj || !_init_cow())
eo_do(eo_obj, parent = eo_parent_get());
if (!obj || !_init_cow() || !eo_isa(parent, EVAS_COMMON_INTERFACE_INTERFACE))
{
eo_error_set(eo_obj);
return;

View File

@ -842,7 +842,7 @@ _item_free(const Evas_Object *eo_obj, Evas_Object_Textblock_Line *ln, Evas_Objec
if (ln)
{
ln->items = (Evas_Object_Textblock_Item *) eina_inlist_remove(
EINA_INLIST_GET(ln->items), EINA_INLIST_GET(ln->items));
EINA_INLIST_GET(ln->items), EINA_INLIST_GET(it));
}
free(it);
}

View File

@ -320,7 +320,7 @@ class Evas.Text (Evas.Object, Efl.Text, Efl.Text_Properties)
methods {
last_up_to_pos @const {
/*@ Returns the logical position of the last char in the text up to the pos given. this is NOT the position of the last char because of the possibility of RTL in the text. */
return: int;
return: int(-1);
params {
@in Evas_Coord x; /*@ in */
@in Evas_Coord y; /*@ in */

View File

@ -114,7 +114,7 @@ FUNC_NAME(RGBA_Image *src, RGBA_Image *dst,
{
func = evas_common_gfx_func_composite_pixel_mask_span_get(sa, ssa, da, cw, render_op);
if (mul_col != 0xffffffff)
func2 = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, mul_col, da, cw, render_op);
func2 = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, mul_col, da, cw, EVAS_RENDER_COPY);
}
if (sa || anti_alias) src->cache_entry.flags.alpha = EINA_TRUE;
}
@ -185,7 +185,7 @@ FUNC_NAME_DO(RGBA_Image *src, RGBA_Image *dst,
{
buf = alloca(cw * sizeof(DATA32));
if (ms->havea) sa = 1;
if (mask_ie)
if (!mask_ie)
{
if (mul_col != 0xffffffff)
func = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, dc->mul.col, da, cw, dc->render_op);
@ -196,7 +196,7 @@ FUNC_NAME_DO(RGBA_Image *src, RGBA_Image *dst,
{
func = evas_common_gfx_func_composite_pixel_mask_span_get(sa, ssa, da, cw, dc->render_op);
if (mul_col != 0xffffffff)
func2 = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, dc->mul.col, da, cw, dc->render_op);
func2 = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, dc->mul.col, da, cw, EVAS_RENDER_COPY);
}
if (sa || anti_alias) src->cache_entry.flags.alpha = EINA_TRUE;
}

View File

@ -479,7 +479,7 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst,
{
func = evas_common_gfx_func_composite_pixel_mask_span_get(src->cache_entry.flags.alpha, src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, dst_clip_w, dc->render_op);
if (dc->mul.use)
func2 = evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha, src->cache_entry.flags.alpha_sparse, dc->mul.col, dst->cache_entry.flags.alpha, dst_clip_w, dc->render_op);
func2 = evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha, src->cache_entry.flags.alpha_sparse, dc->mul.col, dst->cache_entry.flags.alpha, dst_clip_w, EVAS_RENDER_COPY);
}
if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h))

View File

@ -103,7 +103,7 @@ mmap(void *addr EVIL_UNUSED,
if (protect & (PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_READ))
acs = FILE_MAP_EXECUTE;
#endif
else if ((protect & (PAGE_READWRITE | PAGE_READONLY)) == (PAGE_READWRITE | PAGE_READONLY))
else if (protect & (PAGE_READWRITE | PAGE_READONLY))
acs = FILE_MAP_READ;
else
{

View File

@ -823,7 +823,7 @@ _ecore_evas_object_cursor_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
}
static void
_ecore_evas_win32_object_cursor_unset(Ecore_Evas *ee)
_ecore_evas_win32_cursor_unset(Ecore_Evas *ee)
{
evas_object_event_callback_del_full(ee->prop.cursor.object, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
}

View File

@ -1640,11 +1640,6 @@ _ecore_evas_x_event_window_show(void *data EINA_UNUSED, int type EINA_UNUSED, vo
}
if ((first_map_bug) && (!strcmp(ee->driver, "opengl_x11")))
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
if (ee->prop.override)
{
ee->prop.withdrawn = EINA_FALSE;
if (ee->func.fn_state_change) ee->func.fn_state_change(ee);
}
if (ee->visible) return ECORE_CALLBACK_PASS_ON;
// if (ee->visible) return ECORE_CALLBACK_DONE;
// printf("SHOW EVENT %p\n", ee);
@ -2863,6 +2858,12 @@ _ecore_evas_x_show(Ecore_Evas *ee)
ecore_x_window_show(ee->prop.window);
if (ee->prop.fullscreen)
ecore_x_window_focus(ee->prop.window);
if (ee->prop.withdrawn)
{
ee->prop.withdrawn = EINA_FALSE;
if (ee->func.fn_state_change) ee->func.fn_state_change(ee);
_ecore_evas_x_hints_update(ee);
}
}
static void

View File

@ -28,11 +28,14 @@ typedef _getproc_fn (*fp_getproc)(const char *);
#define _EVASGL_EXT_BEGIN(name)
#define _EVASGL_EXT_END()
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
ret (*gl_ext_sym_##name) param = NULL; \
ret (*gles1_ext_sym_##name) param = NULL;
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@ -43,9 +46,12 @@ typedef _getproc_fn (*fp_getproc)(const char *);
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
/////////////////////////////////////////////////////////////////////////////////////////////////////
@ -60,9 +66,14 @@ typedef _getproc_fn (*fp_getproc)(const char *);
int _gles1_ext_support_##name = 0;
#define _EVASGL_EXT_END()
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name) \
int _gl_ext_support_func_##name = 0; \
int _gles1_ext_support_func_##name = 0;
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@ -73,9 +84,12 @@ typedef _getproc_fn (*fp_getproc)(const char *);
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
/////////////////////////////////////////////////////////////////////////////////////////////////////
@ -349,17 +363,24 @@ re->info->info.screen);
#define _EVASGL_EXT_DRVNAME(name) \
if (_EVASGL_EXT_CHECK_SUPPORT(#name)) *ext_support = 1;
#define _EVASGL_EXT_DRVNAME_PRIVATE(name) \
if (_EVASGL_EXT_CHECK_SUPPORT(#name)) { *ext_support = 1; _gl_ext_support_func_##name = 1; }
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname) \
if (_EVASGL_EXT_CHECK_SUPPORT(deskname)) *ext_support = 1;
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
{ \
ret (**drvfunc)param = &gl_ext_sym_##name;
ret (**drvfunc)param = &gl_ext_sym_##name; \
if (*ext_support == 1) \
{
#define _EVASGL_EXT_FUNCTION_END() \
} \
if ((*drvfunc) == NULL) _EVASGL_EXT_DISCARD_SUPPORT(); \
}
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name) \
if ((*drvfunc) == NULL) *drvfunc = name;
@ -386,13 +407,20 @@ re->info->info.screen);
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
#undef GETPROCADDR
/////////////////////////////////////////////////////////////////////////////////////////////////////
_gl_ext_string[0] = 0x00; //NULL;
_gl_ext_string_official[0] = 0x00;
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Extension HEADER
@ -408,15 +436,23 @@ re->info->info.screen);
#define _EVASGL_EXT_END()
#define _EVASGL_EXT_CHECK_SUPPORT(name)
#define _EVASGL_EXT_DISCARD_SUPPORT()
#define _EVASGL_EXT_DRVNAME_PRINT(name) \
{ \
strncat(_gl_ext_string, name" ", MAX_EXTENSION_STRING_BUFFER); \
if ((strncmp(name, "GL", 2) == 0) && (strstr(_gl_ext_string_official, name) == NULL)) \
strncat(_gl_ext_string_official, name" ", MAX_EXTENSION_STRING_BUFFER); \
}
#define _EVASGL_EXT_DRVNAME(name) \
if (_curext_supported) \
{ \
strncat(_gl_ext_string, #name" ", MAX_EXTENSION_STRING_BUFFER); \
strncat(_gl_ext_string_official, #name" ", MAX_EXTENSION_STRING_BUFFER); \
}
if (_curext_supported) \
_EVASGL_EXT_DRVNAME_PRINT(#name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name) \
if (_curext_supported && _gl_ext_support_func_##name) \
_EVASGL_EXT_DRVNAME_PRINT(#name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@ -426,10 +462,14 @@ re->info->info.screen);
#undef _EVASGL_EXT_DISCARD_SUPPORT
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME_PRINT
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
/////////////////////////////////////////////////////////////////////////////////////////////////////
@ -463,10 +503,13 @@ evgl_api_ext_get(Evas_GL_API *gl_funcs)
#define _EVASGL_EXT_END() \
}
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
ORD(name);
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_PRIVATE_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
@ -483,9 +526,12 @@ evgl_api_ext_get(Evas_GL_API *gl_funcs)
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN
#undef _EVASGL_EXT_FUNCTION_PRIVATE_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
@ -504,7 +550,7 @@ _evgl_api_gles1_ext_init(void)
#ifdef GL_GLES
int _curext_supported = 0;
Evas_GL_API *gles1_funcs;
const char *gles1_exts;
const char *gles1_exts, *eglexts;
EVGL_Resource *rsc;
EGLint context_version;
EGLDisplay dpy = EGLDISPLAY_GET();
@ -559,6 +605,13 @@ _evgl_api_gles1_ext_init(void)
_gles1_ext_string[0] = '\0';
eglexts = eglQueryString(dpy, EGL_EXTENSIONS);
if (!eglexts)
{
ERR("eglQueryString(EGL_EXTENSIONS) returned NULL!");
eglexts = "";
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Scanning supported extensions, sets the variables
/////////////////////////////////////////////////////////////////////////////////////////////////////
@ -576,7 +629,7 @@ _evgl_api_gles1_ext_init(void)
}
#define _EVASGL_EXT_CHECK_SUPPORT(name) \
(strstr(gles1_exts, name) != NULL)
((strstr(gles1_exts, name) != NULL) || (strstr(eglexts, name) != NULL))
#define _EVASGL_EXT_DISCARD_SUPPORT() \
*ext_support = 0;
@ -584,17 +637,26 @@ _evgl_api_gles1_ext_init(void)
#define _EVASGL_EXT_DRVNAME(name) \
if (_EVASGL_EXT_CHECK_SUPPORT(#name)) *ext_support = 1;
#define _EVASGL_EXT_DRVNAME_PRIVATE(name) \
if (_EVASGL_EXT_CHECK_SUPPORT(#name)) { *ext_support = 1; _gles1_ext_support_func_##name = 1; }
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname) \
if (_EVASGL_EXT_CHECK_SUPPORT(deskname)) *ext_support = 1;
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
{ \
ret (**drvfunc)param = &gles1_ext_sym_##name;
ret (**drvfunc)param = &gles1_ext_sym_##name; \
if (*ext_support == 1) \
{
#define _EVASGL_EXT_FUNCTION_END() \
} \
if ((*drvfunc) == NULL) _EVASGL_EXT_DISCARD_SUPPORT(); \
}
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN() \
if (EINA_FALSE) \
{
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END() \
}
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name) \
if ((*drvfunc) == NULL) *drvfunc = name;
@ -623,9 +685,12 @@ _evgl_api_gles1_ext_init(void)
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
#undef GETPROCADDR
@ -641,10 +706,22 @@ _evgl_api_gles1_ext_init(void)
#define _EVASGL_EXT_END()
#define _EVASGL_EXT_CHECK_SUPPORT(name)
#define _EVASGL_EXT_DISCARD_SUPPORT()
#define _EVASGL_EXT_DRVNAME(name) if (_curext_supported) strcat(_gles1_ext_string, #name" ");
#define _EVASGL_EXT_DRVNAME_PRINT(name) \
{ \
if ((strncmp(name, "GL", 2) == 0) && (strstr(_gles1_ext_string, name) == NULL)) \
strcat(_gles1_ext_string, name" "); \
}
#define _EVASGL_EXT_DRVNAME(name) \
if (_curext_supported) \
_EVASGL_EXT_DRVNAME_PRINT(#name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name) \
if (_curext_supported && _gles1_ext_support_func_##name) \
_EVASGL_EXT_DRVNAME_PRINT(#name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@ -654,10 +731,14 @@ _evgl_api_gles1_ext_init(void)
#undef _EVASGL_EXT_DISCARD_SUPPORT
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME_PRINT
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
@ -705,10 +786,13 @@ evgl_api_gles1_ext_get(Evas_GL_API *gl_funcs)
#define _EVASGL_EXT_END() \
}
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
ORD(name);
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_PRIVATE_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
@ -724,9 +808,12 @@ evgl_api_gles1_ext_get(Evas_GL_API *gl_funcs)
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN
#undef _EVASGL_EXT_FUNCTION_PRIVATE_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC

View File

@ -24,9 +24,12 @@
#define _EVASGL_EXT_BEGIN(name)
#define _EVASGL_EXT_END()
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) extern ret (*gl_ext_sym_##name) param;
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@ -37,9 +40,12 @@
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
/////////////////////////////////////////////////////////////////////////////////////////////////////
@ -54,9 +60,12 @@
#define _EVASGL_EXT_BEGIN(name) extern int _gl_ext_support_##name;
#define _EVASGL_EXT_END()
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_END()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@ -67,9 +76,12 @@
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_DESKTOP
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN
#undef _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END
#undef _EVASGL_EXT_FUNCTION_DRVFUNC
#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
/////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -14,6 +14,7 @@
// Driver extensions to wrap (name : SPEC extension name)
#define _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE(name)
#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
// These functions will be exported to 'EVAS extension function'.
@ -29,6 +30,12 @@
// End of the extension function block
#define _EVASGL_EXT_FUNCTION_PRIVATE_END()
// These functions will not be considered for export for GLESv1
// Begin of the glesv1 bypass function block
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
// End of the glesv1 bypass function block
#define _EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
// Driver extension functions to wrap (name : SPEC extension function name)
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
@ -38,6 +45,11 @@
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _EVASGL_EXT_DRVNAME_PRIVATE
#define _EVASGL_EXT_DRVNAME_PRIVATE(name) _EVASGL_EXT_DRVNAME(name)
#define _EVASGL_EXT_DRVNAME_PRIVATE_DEFINED
#endif
#ifndef _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN
#define _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(ret, name, param) _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param)
#define _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN_DEFINED
@ -295,8 +307,8 @@ _EVASGL_EXT_BEGIN(EXT_multisampled_render_to_texture)
_EVASGL_EXT_END()
_EVASGL_EXT_BEGIN(multisampled_render_to_texture)
_EVASGL_EXT_DRVNAME(GL_IMG_multisampled_render_to_texture)
_EVASGL_EXT_DRVNAME(GL_EXT_multisampled_render_to_texture)
_EVASGL_EXT_DRVNAME_PRIVATE(GL_IMG_multisampled_render_to_texture)
_EVASGL_EXT_DRVNAME_PRIVATE(GL_EXT_multisampled_render_to_texture)
_EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(void, glRenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height))
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glRenderbufferStorageMultisample")
@ -1020,14 +1032,16 @@ _EVASGL_EXT_BEGIN(robustness)
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glReadnPixels")
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glReadnPixelsEXT")
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glGetnUniformfvEXT, (GLuint program, GLint location, GLsizei bufSize, float *params))
_EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_BEGIN()
_EVASGL_EXT_FUNCTION_BEGIN(void, glGetnUniformfvEXT, (GLuint program, GLint location, GLsizei bufSize, float *params))
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glGetnUniformfv")
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glGetnUniformfvEXT")
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glGetnUniformivEXT, (GLuint program, GLint location, GLsizei bufSize, GLint *params))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glGetnUniformivEXT, (GLuint program, GLint location, GLsizei bufSize, GLint *params))
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glGetnUniformiv")
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("glGetnUniformivEXT")
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_DISABLE_FOR_GLES1_END()
_EVASGL_EXT_END()
_EVASGL_EXT_BEGIN(sRGB)
@ -1346,8 +1360,8 @@ _EVASGL_EXT_END()
// ----------------------------------------------------------
_EVASGL_EXT_BEGIN(framebuffer_blit)
_EVASGL_EXT_DRVNAME(GL_NV_framebuffer_blit)
_EVASGL_EXT_DRVNAME(GL_ANGLE_framebuffer_blit)
_EVASGL_EXT_DRVNAME_PRIVATE(GL_NV_framebuffer_blit)
_EVASGL_EXT_DRVNAME_PRIVATE(GL_ANGLE_framebuffer_blit)
_EVASGL_EXT_FUNCTION_WHITELIST("glBlitFramebuffer")
_EVASGL_EXT_FUNCTION_WHITELIST("glBlitFramebufferNV")
@ -1540,9 +1554,9 @@ _EVASGL_EXT_END()
_EVASGL_EXT_BEGIN(EGL_KHR_fence_sync)
/* 3 aliasses for EGL_KHR_fence_sync */
_EVASGL_EXT_DRVNAME(EGL_KHR_fence_sync)
_EVASGL_EXT_DRVNAME(GL_OES_EGL_sync)
_EVASGL_EXT_DRVNAME(VG_KHR_EGL_sync)
_EVASGL_EXT_DRVNAME_PRIVATE(EGL_KHR_fence_sync)
_EVASGL_EXT_DRVNAME_PRIVATE(GL_OES_EGL_sync)
_EVASGL_EXT_DRVNAME_PRIVATE(VG_KHR_EGL_sync)
_EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(void *, eglCreateSyncKHR, (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list))
_EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR("eglCreateSyncKHR")
@ -1707,12 +1721,18 @@ _EVASGL_EXT_END()
#undef _EVASGL_EXT_FUNCTION_PRIVATE_END_DEFINED
#endif
#ifdef _EVASGL_EXT_DRVNAME_PRIVATE_DEFINED
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_DRVNAME_PRIVATE_DEFINED
#endif
#ifdef _EVASGL_EXT_USE_DEFAULT_DEFINE
#undef _EVASGL_EXT_CHECK_SUPPORT
#undef _EVASGL_EXT_DISCARD_SUPPORT
#undef _EVASGL_EXT_BEGIN
#undef _EVASGL_EXT_END
#undef _EVASGL_EXT_DRVNAME
#undef _EVASGL_EXT_DRVNAME_PRIVATE
#undef _EVASGL_EXT_FUNCTION_BEGIN
#undef _EVASGL_EXT_FUNCTION_END
#undef _EVASGL_EXT_FUNCTION_PRIVATE_BEGIN

View File

@ -3928,11 +3928,22 @@ _evgl_gles1_api_init(void)
if (_initialized) return EINA_TRUE;
memset(&_gles1_api, 0, sizeof(_gles1_api));
#ifdef GL_GLES
_gles1_handle = dlopen("libGLES_CM.so", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGLES_CM.so.1", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGLES_CM.so.1.1", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGLESv1_CM.so", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGLESv1_CM.so.1", RTLD_NOW);
#else
_gles1_handle = dlopen("libGL.so", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGL.so.4", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGL.so.3", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGL.so.2", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGL.so.1", RTLD_NOW);
if (!_gles1_handle) _gles1_handle = dlopen("libGL.so.0", RTLD_NOW);
#endif
if (!_gles1_handle)
{
WRN("OpenGL ES 1 was not found on this system. Evas GL will not support GLES 1 contexts.");

View File

@ -1754,10 +1754,16 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
Eina_Bool blend = EINA_FALSE;
Evas_GL_Shader shader = SHADER_IMG;
GLuint prog = gc->shared->shader[shader].prog;
int pn = 0, sam = 0;
int pn = 0, sam = 0, render_op = gc->dc->render_op;
if (!(gc->dc->render_op == EVAS_RENDER_COPY) &&
((a < 255) || (tex->alpha) || (!!mtex))) blend = EINA_TRUE;
if (!!mtex)
{
// masking forces BLEND mode (mask with COPY does not make sense)
blend = EINA_TRUE;
render_op = EVAS_RENDER_BLEND;
}
else if (!(render_op == EVAS_RENDER_COPY) && ((a < 255) || (tex->alpha)))
blend = EINA_TRUE;
if (tex_only)
{
@ -1941,7 +1947,7 @@ evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
gc->pipe[pn].shader.cur_prog = prog;
gc->pipe[pn].shader.smooth = smooth;
gc->pipe[pn].shader.blend = blend;
gc->pipe[pn].shader.render_op = gc->dc->render_op;
gc->pipe[pn].shader.render_op = render_op;
gc->pipe[pn].shader.clip = 0;
gc->pipe[pn].shader.cx = 0;
gc->pipe[pn].shader.cy = 0;

View File

@ -1607,6 +1607,7 @@ evgl_surface_create(void *eng_data, Evas_GL_Config *cfg, int w, int h)
{
if (!evgl_engine->funcs->gles1_surface_create)
{
ERR("Can't create GLES 1.1 surfaces");
evas_gl_common_error_set(eng_data, EVAS_GL_NOT_INITIALIZED);
goto error;
}
@ -1669,6 +1670,8 @@ evgl_surface_create(void *eng_data, Evas_GL_Config *cfg, int w, int h)
if (dbg) DBG("Created surface sfc %p (eng %p)", sfc, eng_data);
_surface_context_list_print();
return sfc;
error:
@ -1820,6 +1823,9 @@ evgl_surface_destroy(void *eng_data, EVGL_Surface *sfc)
if ((dbg = evgl_engine->api_debug_mode))
DBG("Destroying surface sfc %p (eng %p)", sfc, eng_data);
if (sfc->current_ctx && sfc->current_ctx->current_sfc == sfc)
sfc->current_ctx->current_sfc = NULL;
if ((rsc->current_ctx) && (rsc->current_ctx->current_sfc == sfc) )
{
if (evgl_engine->api_debug_mode)
@ -1860,8 +1866,11 @@ evgl_surface_destroy(void *eng_data, EVGL_Surface *sfc)
DBG("Destroying special surface used for GLES 1.x rendering");
ret = evgl_engine->funcs->gles1_surface_destroy(eng_data, sfc);
if (!ret) ERR("Engine failed to destroy a GLES1.x Surface.");
return ret;
if (!ret)
{
ERR("Engine failed to destroy a GLES1.x Surface.");
return ret;
}
}
@ -1926,6 +1935,8 @@ evgl_surface_destroy(void *eng_data, EVGL_Surface *sfc)
free(sfc);
sfc = NULL;
_surface_context_list_print();
return 1;
}
@ -2197,6 +2208,12 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx)
ctx->current_sfc = sfc;
rsc->current_ctx = ctx;
rsc->current_eng = eng_data;
// Update extensions after GLESv1 context is bound
//evgl_api_gles1_ext_get(gles1_funcs);
_surface_context_list_print();
return 1;
}

View File

@ -763,9 +763,11 @@ evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
{
Image_Entry *ie;
if (!im->im) return;
ie = &im->im->cache_entry;
evas_gl_common_image_alloc_ensure(im);
// alloc ensure can change im->im, so only get the local variable later.
ie = &im->im->cache_entry;
/*
if ((im->cs.space == EVAS_COLORSPACE_YCBCR422P601_PL) ||
(im->cs.space == EVAS_COLORSPACE_YCBCR422P709_PL))

View File

@ -1343,9 +1343,13 @@ eng_gl_surface_read_pixels(void *data, void *surface,
*/
glsym_glBindFramebuffer(GL_FRAMEBUFFER, im->tex->pt->fb);
#ifndef GL_GLES
if (im->tex->pt->format == GL_BGRA)
glReadPixels(x, y, w, h, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
else
#endif
{
DATA32 *ptr = pixels;
int k;

View File

@ -101,7 +101,7 @@ START_TEST(eina_file_split_simple)
#endif
#ifdef _WIN32
ea = eina_file_split(strdup("\\this\\is\\a\\small\\test"));
ea = eina_file_split(strdup("\\this/is\\a/small/test"));
#else
ea = eina_file_split(strdup("/this/is/a/small/test"));
#endif
@ -119,7 +119,7 @@ START_TEST(eina_file_split_simple)
#ifdef _WIN32
ea =
eina_file_split(strdup(
"this\\\\is\\\\\\a \\more\\complex\\\\\\case\\\\\\"));
"this\\/\\is\\//\\\\a \\more/\\complex///case\\\\\\"));
#else
ea = eina_file_split(strdup("this//is///a /more/complex///case///"));
#endif