summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-09-06 13:29:31 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-09-06 13:29:31 +0100
commit6c084b19b072bc3b23989977e1c881ce867bbf2e (patch)
tree350d58e98d14507889839dea458d21dc450e535a /src/modules
parent11e82fd7f494585d972125b84d77551b9459005b (diff)
downloadefl-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')
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_common.h2
-rw-r--r--src/modules/evas/engines/gl_x11/evas_engine.c6
-rw-r--r--src/modules/evas/engines/gl_x11/evas_x_main.c1
-rw-r--r--src/modules/evas/engines/software_generic/evas_native_common.h1
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