Basically, EGL does not define a GL_DRAW_FRAMEBUFFER_BINDING so we
test for that and if not found then define it to be
GL_FRAMEBUFFER_BINDING
Signed-off-by: Chris Michael <devilhorns@comcast.net>
(Bad antognolli, No cookie !!)
NB: Fixes build break !!! If we are going to use defines from glext.h,
let's be sure to have the necessary header included Yes ?? ;)
Signed-off-by: Chris Michael <devilhorns@comcast.net>
If we don't do this, the framebuffer object used on shader_array_flush()
will be wrong.
NOTE: shader_array_flush() should take care of setting the fbo
correctly.
When a signal change a state of a edje box to a state that was already active
and we add/del a item of edje box a crash happen.
Example:
test.edc:
collections {
group {
name: "box_text";
parts {
part {
name: "elm.box.buttons";
type: BOX;
description {
state: "default" 0.0;
min: 0 100;
max: 9999 100;
align: 0 0;
box {
layout: "horizontal";
min: 1 1;
}
visible: 0;
}
description {
state: "show" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
}
programs {
program {
signal: "show,buttons";
source: "gui";
action: STATE_SET "show" 0.0;
transition: ACCELERATE 1;
target: "elm.box.buttons";
}
program {
signal: "hide,buttons";
source: "gui";
action: STATE_SET "default" 0.0;
transition: ACCELERATE 1;
target: "elm.box.buttons";
}
}
}
}
test.c:
//Compile with:
//gcc -g test.c -o test `pkg-config --cflags --libs elementary edje ecore`
static int count = 0;
static Eina_Bool _fill(void *data)
{
int i;
Evas_Object *layout = data;
Evas_Object *edje = elm_layout_edje_get(layout);
edje_object_part_box_remove_all(edje, "elm.box.buttons", EINA_TRUE);
elm_layout_signal_emit(layout, "show,buttons", "gui");
printf("_fill()\n");
for (i = 0; i < 5; i++, count++)
{
Evas_Object *btn;
char buf[50];
btn = elm_button_add(layout);
snprintf(buf, sizeof(buf), "button %d", count);
elm_object_text_set(btn, buf);
edje_object_part_box_append(edje, "elm.box.buttons", btn);
evas_object_show(btn);
}
return EINA_TRUE;
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *bg, *layout;
win = elm_win_add(NULL, "test", ELM_WIN_BASIC);
elm_win_title_set(win, "Test");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
bg = elm_bg_add(win);
elm_bg_color_set(bg, 255, 255, 255);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bg);
evas_object_show(bg);
layout = elm_layout_add(win);
elm_layout_file_set(layout, "test.edj", "box_text");
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(layout);
_fill(layout);
ecore_timer_add(5, _fill, layout);
evas_object_resize(win, 800, 320);
evas_object_show(win);
elm_run();
elm_shutdown();
return 0;
}
ELM_MAIN()
(gdb) bt
0x00000000 in ?? ()
0xb7add287 in _edje_box_layout_calculate_coords ()
from /usr/lib/libedje.so.1
0xb7add5cd in _edje_box_layout () from /usr/lib/libedje.so.1
0xb7c98ff7 in _evas_object_box_smart_calculate ()
from /usr/lib/libevas.so.1
0xb7c97a36 in evas_object_smart_calculate () from /usr/lib/libevas.so.1
0xb7ae1b12 in _edje_part_recalc_single () from /usr/lib/libedje.so.1
0xb7ae3380 in _edje_part_recalc () from /usr/lib/libedje.so.1
0xb7ae59ff in _edje_recalc_do () from /usr/lib/libedje.so.1
0xb7b3603a in _edje_smart_calculate () from /usr/lib/libedje.so.1
0xb7c97be2 in evas_call_smarts_calculate () from /usr/lib/libevas.so.1
0xb7cc7d88 in evas_render_updates_internal () from /usr/lib/libevas.so.1
0xb7ba7c97 in _ecore_evas_x_render () from /usr/lib/libecore_evas.so.1
0xb7ba27c6 in _ecore_evas_idle_enter () from /usr/lib/libecore_evas.so.1
0xb7c27212 in _ecore_idle_enterer_call () from /usr/lib/libecore.so.1
0xb7c28d3d in _ecore_main_loop_iterate_internal ()
from /usr/lib/libecore.so.1
0xb7c2941f in ecore_main_loop_begin () from /usr/lib/libecore.so.1
0xb7e8def8 in elm_run () from /usr/lib/libelementary.so.1
0xb7f6f8ee in appcore_efl_main () from /usr/lib/libappcore-efl.so.1
0xb7644bb5 in app_efl_main () from /usr/lib/libcapi-appfw-application.so.0
0x08074c5a in main (argc=1, argv=0xbffffb64) at src/main_tizen.c:155
==2036== Jump to the invalid address stated on the next line
==2036== at 0x0: ???
==2036== by 0x44C35CC: _edje_box_layout (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x42E8FF6: _evas_object_box_smart_calculate (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x42E7A35: evas_object_smart_calculate (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x44C7B11: _edje_part_recalc_single (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x44C937F: _edje_part_recalc (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x44CB9FE: _edje_recalc_do (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x451C039: _edje_smart_calculate (in /usr/lib/libedje.so.1.7.99)
==2036== by 0x42E7BE1: evas_call_smarts_calculate (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x4317D87: evas_render_updates_internal (in /usr/lib/libevas.so.1.7.99)
==2036== by 0x4465C96: _ecore_evas_x_render (in /usr/lib/libecore_evas.so.1.7.99)
==2036== by 0x44607C5: _ecore_evas_idle_enter (in /usr/lib/libecore_evas.so.1.7.99)
==2036== Address 0x0 is not stack'd, malloc'd or (recently) free'd
We called anim->start aftwards just to be sure to stick to something if
all fail.
This may break under heavy load so we shouldn't rely on it. Instead make
sure that time only moves forward.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
Previous multiplication just truncated the fraction part to 16 bits. If
we round properly we can actually increase accuracy a bit.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
- to enable this feature, compile with --with-profile=debug
- the mid tables and tables are write protected after modifications,
you will segfault if you mess with them
- because of mmap PAGE_SIZE alignement and added magic header, almost a
memory page is wasted per table and mid table allocation.
- reducing the number of tables per mid table and the number of entries
per table solves this.
For native surface rendering (glX, egl) in gl-backend, if pixel get callback
function is called for native rendering, there is a case where evas will
try to call evas_gl_common_context_flush() to flush its remaining commands
in its command queue while the context is set current to the native surface/
context that is called within the pixel get callback. So, I've added an
engine function that forces a flush before it enters the pixel get callback
function.