diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2021-09-06 13:29:31 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2021-09-06 13:29:31 +0100 |
commit | 6c084b19b072bc3b23989977e1c881ce867bbf2e (patch) | |
tree | 350d58e98d14507889839dea458d21dc450e535a /src/modules | |
parent | 11e82fd7f494585d972125b84d77551b9459005b (diff) | |
download | efl-6c084b19b072bc3b23989977e1c881ce867bbf2e.tar.gz |
evas - gl x11 - dont crearte eglimage multiple times in same frame
if we're rendering in multiple scissor regions/updates - dont create
the eglimage multiple times for each bind+pass - only once for that
frame.
Diffstat (limited to 'src/modules')
4 files changed, 8 insertions, 2 deletions
diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h index 6bfba60045..28ddb4b8da 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -277,6 +277,8 @@ struct _Evas_Engine_GL_Context int foc, z0, px, py; RGBA_Draw_Context *dc; + unsigned long long frame_cnt; + Evas_GL_Shared *shared; int flushnum; diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index 34316a7556..72edcbf50e 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.c +++ b/src/modules/evas/engines/gl_x11/evas_engine.c @@ -1941,15 +1941,17 @@ _native_bind_cb(void *image) #ifdef GL_GLES if (n->ns_data.x11.surface) { - if (n->ns_data.x11.multiple_buffer) + if ((n->frame_cnt != im->gc->frame_cnt) && + (n->ns_data.x11.multiple_buffer)) { EGLint err; + if (!glsym_evas_gl_common_eglDestroyImage) { ERR("Try eglDestroyImage()/eglCreateImage() on EGL with no support"); return; } - + n->frame_cnt = im->gc->frame_cnt; glsym_evas_gl_common_eglDestroyImage(im->native.disp, n->ns_data.x11.surface); if ((err = eglGetError()) != EGL_SUCCESS) diff --git a/src/modules/evas/engines/gl_x11/evas_x_main.c b/src/modules/evas/engines/gl_x11/evas_x_main.c index 3e6fec0abc..3bc2b0b6e5 100644 --- a/src/modules/evas/engines/gl_x11/evas_x_main.c +++ b/src/modules/evas/engines/gl_x11/evas_x_main.c @@ -1706,6 +1706,7 @@ eng_outbuf_flush(Outbuf *ob, Tilebuf_Rect *surface_damage EINA_UNUSED, Tilebuf_R // clear out rects after swap as we may use them during swap ob->frame_cnt++; + ob->gl_context->frame_cnt++; end: glsym_evas_gl_preload_render_unlock(eng_preload_make_current, ob); diff --git a/src/modules/evas/engines/software_generic/evas_native_common.h b/src/modules/evas/engines/software_generic/evas_native_common.h index d238a4b358..cf5399051f 100644 --- a/src/modules/evas/engines/software_generic/evas_native_common.h +++ b/src/modules/evas/engines/software_generic/evas_native_common.h @@ -49,6 +49,7 @@ typedef struct _Native Native; struct _Native { Evas_Native_Surface ns; + unsigned long long frame_cnt; union { /* EVAS_NATIVE_SURFACE_X11 */ struct |