forked from enlightenment/efl
have evas engine also to update rect math so we can exclude useless
updates when obscured objects change SVN revision: 64246
This commit is contained in:
parent
1541b0e97e
commit
11409eb48e
|
@ -30,6 +30,7 @@ struct _Render_Engine
|
||||||
Evas_GL_X11_Window *win;
|
Evas_GL_X11_Window *win;
|
||||||
Evas_Engine_Info_GL_X11 *info;
|
Evas_Engine_Info_GL_X11 *info;
|
||||||
Evas *evas;
|
Evas *evas;
|
||||||
|
Tilebuf *tb;
|
||||||
int end;
|
int end;
|
||||||
|
|
||||||
XrmDatabase xrdb; // xres - dpi
|
XrmDatabase xrdb; // xres - dpi
|
||||||
|
@ -1020,19 +1021,25 @@ eng_setup(Evas *e, void *in)
|
||||||
free(re);
|
free(re);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
re->tb = evas_common_tilebuf_new(re->win->w, re->win->h);
|
||||||
|
if (!re->tb)
|
||||||
|
{
|
||||||
|
if (re->win)
|
||||||
|
{
|
||||||
|
eng_window_free(re->win);
|
||||||
|
gl_wins--;
|
||||||
|
}
|
||||||
|
free(re);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
|
||||||
|
|
||||||
if (!e->engine.data.context)
|
if (!e->engine.data.context)
|
||||||
e->engine.data.context =
|
e->engine.data.context =
|
||||||
e->engine.func->context_new(e->engine.data.output);
|
e->engine.func->context_new(e->engine.data.output);
|
||||||
eng_window_use(re->win);
|
eng_window_use(re->win);
|
||||||
|
|
||||||
re->vsync = 0;
|
re->vsync = 0;
|
||||||
/* we don't need this actually as evas_render does it
|
|
||||||
if (re->win->alpha)
|
|
||||||
{
|
|
||||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
_sym_init();
|
_sym_init();
|
||||||
_extensions_init(re);
|
_extensions_init(re);
|
||||||
|
|
||||||
|
@ -1072,6 +1079,7 @@ eng_output_free(void *data)
|
||||||
eng_window_free(re->win);
|
eng_window_free(re->win);
|
||||||
gl_wins--;
|
gl_wins--;
|
||||||
}
|
}
|
||||||
|
evas_common_tilebuf_free(re->tb);
|
||||||
free(re);
|
free(re);
|
||||||
}
|
}
|
||||||
if ((initted == 1) && (gl_wins == 0))
|
if ((initted == 1) && (gl_wins == 0))
|
||||||
|
@ -1092,11 +1100,19 @@ eng_output_resize(void *data, int w, int h)
|
||||||
re->win->h = h;
|
re->win->h = h;
|
||||||
eng_window_use(re->win);
|
eng_window_use(re->win);
|
||||||
evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
|
evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
|
||||||
|
evas_common_tilebuf_free(re->tb);
|
||||||
|
re->tb = evas_common_tilebuf_new(w, h);
|
||||||
|
if (re->tb)
|
||||||
|
evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eng_output_tile_size_set(void *data __UNUSED__, int w __UNUSED__, int h __UNUSED__)
|
eng_output_tile_size_set(void *data, int w, int h)
|
||||||
{
|
{
|
||||||
|
Render_Engine *re;
|
||||||
|
|
||||||
|
re = (Render_Engine *)data;
|
||||||
|
evas_common_tilebuf_set_tile_size(re->tb, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1107,7 +1123,8 @@ eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
|
||||||
re = (Render_Engine *)data;
|
re = (Render_Engine *)data;
|
||||||
eng_window_use(re->win);
|
eng_window_use(re->win);
|
||||||
evas_gl_common_context_resize(re->win->gl_context, re->win->w, re->win->h, re->win->rot);
|
evas_gl_common_context_resize(re->win->gl_context, re->win->w, re->win->h, re->win->rot);
|
||||||
/* smple bounding box */
|
evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
|
||||||
|
/*
|
||||||
RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, re->win->w, re->win->h);
|
RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, re->win->w, re->win->h);
|
||||||
if ((w <= 0) || (h <= 0)) return;
|
if ((w <= 0) || (h <= 0)) return;
|
||||||
if (!re->win->draw.redraw)
|
if (!re->win->draw.redraw)
|
||||||
|
@ -1132,11 +1149,16 @@ eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
|
||||||
if ((y + h - 1) > re->win->draw.y2) re->win->draw.y2 = y + h - 1;
|
if ((y + h - 1) > re->win->draw.y2) re->win->draw.y2 = y + h - 1;
|
||||||
}
|
}
|
||||||
re->win->draw.redraw = 1;
|
re->win->draw.redraw = 1;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eng_output_redraws_rect_del(void *data __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
|
eng_output_redraws_rect_del(void *data __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
|
||||||
{
|
{
|
||||||
|
Render_Engine *re;
|
||||||
|
|
||||||
|
re = (Render_Engine *)data;
|
||||||
|
evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1145,7 +1167,8 @@ eng_output_redraws_clear(void *data)
|
||||||
Render_Engine *re;
|
Render_Engine *re;
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
re = (Render_Engine *)data;
|
||||||
re->win->draw.redraw = 0;
|
evas_common_tilebuf_clear(re->tb);
|
||||||
|
/* re->win->draw.redraw = 0;*/
|
||||||
// INF("GL: finish update cycle!");
|
// INF("GL: finish update cycle!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1156,9 +1179,36 @@ static void *
|
||||||
eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
|
eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
Render_Engine *re;
|
||||||
|
Tilebuf_Rect *rects;
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
re = (Render_Engine *)data;
|
||||||
/* get the upate rect surface - return engine data as dummy */
|
/* get the upate rect surface - return engine data as dummy */
|
||||||
|
rects = evas_common_tilebuf_get_render_rects(re->tb);
|
||||||
|
if (rects)
|
||||||
|
{
|
||||||
|
evas_common_tilebuf_free_render_rects(rects);
|
||||||
|
evas_common_tilebuf_clear(re->tb);
|
||||||
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
|
// dont need to for egl - eng_window_use() can check for other ctxt's
|
||||||
|
#else
|
||||||
|
eng_window_use(NULL);
|
||||||
|
#endif
|
||||||
|
eng_window_use(re->win);
|
||||||
|
if (!_re_wincheck(re)) return NULL;
|
||||||
|
evas_gl_common_context_flush(re->win->gl_context);
|
||||||
|
evas_gl_common_context_newframe(re->win->gl_context);
|
||||||
|
if (x) *x = 0;
|
||||||
|
if (y) *y = 0;
|
||||||
|
if (w) *w = re->win->w;
|
||||||
|
if (h) *h = re->win->h;
|
||||||
|
if (cx) *cx = 0;
|
||||||
|
if (cy) *cy = 0;
|
||||||
|
if (cw) *cw = re->win->w;
|
||||||
|
if (ch) *ch = re->win->h;
|
||||||
|
return re->win->gl_context->def_surface;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
/*
|
||||||
if (!re->win->draw.redraw) return NULL;
|
if (!re->win->draw.redraw) return NULL;
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
// dont need to for egl - eng_window_use() can check for other ctxt's
|
// dont need to for egl - eng_window_use() can check for other ctxt's
|
||||||
|
@ -1177,15 +1227,8 @@ eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, i
|
||||||
if (cy) *cy = re->win->draw.y1;
|
if (cy) *cy = re->win->draw.y1;
|
||||||
if (cw) *cw = re->win->draw.x2 - re->win->draw.x1 + 1;
|
if (cw) *cw = re->win->draw.x2 - re->win->draw.x1 + 1;
|
||||||
if (ch) *ch = re->win->draw.y2 - re->win->draw.y1 + 1;
|
if (ch) *ch = re->win->draw.y2 - re->win->draw.y1 + 1;
|
||||||
|
|
||||||
/* we don't need this actually as evas_render does it
|
|
||||||
if (re->win->alpha)
|
|
||||||
{
|
|
||||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return re->win->gl_context->def_surface;
|
return re->win->gl_context->def_surface;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define FRAMECOUNT 1
|
//#define FRAMECOUNT 1
|
||||||
|
|
Loading…
Reference in New Issue