jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=78d266e1897cc524522caa7bc8c9b8908f1096e8
commit 78d266e1897cc524522caa7bc8c9b8908f1096e8 Author: Minkyoung Kim <sleepi...@gmail.com> Date: Tue Apr 11 16:20:07 2017 +0900 EvasGL: Do internal make current if context changed. Summary: Before, rsc->current_ctx is always same with ctx. So checking context change was meaningless. From now, it has meaning. Test Plan: App call evas_gl_make_current more than twice in pixels callback. Those surfaces are indirect rendering surface. Reviewers: jpeg, dkdk, wonsik Reviewed By: jpeg Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D4773 --- src/modules/evas/engines/gl_common/evas_gl_core.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c index d558a9d..c4d3541 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_core.c +++ b/src/modules/evas/engines/gl_common/evas_gl_core.c @@ -2460,6 +2460,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx) Eina_Bool dbg = EINA_FALSE; EVGL_Resource *rsc; int curr_fbo = 0, curr_draw_fbo = 0, curr_read_fbo = 0; + Eina_Bool ctx_changed = EINA_FALSE; // Check the input validity. If either sfc is valid but ctx is NULL, it's also error. // sfc can be NULL as evas gl supports surfaceless make current @@ -2550,6 +2551,10 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx) evas_gl_common_error_set(eng_data, EVAS_GL_BAD_CONTEXT); return 0; } + + if (rsc->current_ctx != ctx) + ctx_changed = EINA_TRUE; + rsc->current_ctx = ctx; rsc->current_eng = eng_data; @@ -2807,7 +2812,7 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx) _framebuffer_create(&ctx->surface_fbo, ctx->version); // Attach fbo and the buffers - if ((rsc->current_ctx != ctx) || (ctx->current_sfc != sfc) || (rsc->direct.rendered)) + if ((ctx_changed) || (ctx->current_sfc != sfc) || (rsc->direct.rendered)) { sfc->current_ctx = ctx; if ((sfc->direct_mem_opt) && (sfc->direct_override)) --