forked from enlightenment/efl
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
This commit is contained in:
parent
60a97c9be3
commit
78d266e189
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue