static void *
evas_process_dirty_pixels(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas_Image_Data *o,
- void *output, void *pixels)
+ void *output, void *surface, void *pixels)
{
Eina_Bool direct_override = EINA_FALSE, direct_force_off = EINA_FALSE;
if (ENFN->gl_direct_override_get)
ENFN->gl_direct_override_get(output, &direct_override, &direct_force_off);
if (ENFN->gl_surface_direct_renderable_get)
- direct_renderable = ENFN->gl_surface_direct_renderable_get(output, ns, &direct_override);
+ direct_renderable = ENFN->gl_surface_direct_renderable_get(output, ns, &direct_override, surface);
if ( ((direct_override) ||
((direct_renderable) &&
if (ENFN->gl_direct_override_get)
ENFN->gl_direct_override_get(output, &direct_override, &direct_force_off);
if (ENFN->gl_surface_direct_renderable_get)
- ENFN->gl_surface_direct_renderable_get(output, ns, &direct_override);
+ ENFN->gl_surface_direct_renderable_get(output, ns, &direct_override, surface);
if (direct_override && !direct_force_off)
{
}
else if (!o->cur->source)
{
- pixels = evas_process_dirty_pixels(eo_obj, obj, o, output, o->engine_data);
+ pixels = evas_process_dirty_pixels(eo_obj, obj, o, output, surface, o->engine_data);
/* pixels = o->engine_data; */
imagew = o->cur->image.w;
imageh = o->cur->image.h;
void *(*gl_current_surface_get) (void *data);
int (*gl_rotation_angle_get) (void *data);
Eina_Bool (*gl_surface_query) (void *data, void *surface, int attr, void *value);
- Eina_Bool (*gl_surface_direct_renderable_get) (void *data, Evas_Native_Surface *ns, Eina_Bool *override);
+ Eina_Bool (*gl_surface_direct_renderable_get) (void *data, Evas_Native_Surface *ns, Eina_Bool *override, void *surface);
void (*gl_image_direct_set) (void *data, void *image, Eina_Bool direct);
int (*gl_image_direct_get) (void *data, void *image);
void (*gl_get_pixels_pre) (void *data);
}
static Eina_Bool
-eng_gl_surface_direct_renderable_get(void *data, Evas_Native_Surface *ns, Eina_Bool *override)
+eng_gl_surface_direct_renderable_get(void *data, Evas_Native_Surface *ns, Eina_Bool *override, void *surface)
{
Render_Engine_GL_Generic *re = data;
Eina_Bool direct_render, client_side_rotation;
+ Evas_Engine_GL_Context *gl_context;
+ Evas_GL_Image *sfc = surface;
EVGLINIT(data, EINA_FALSE);
if (!re || !ns) return EINA_FALSE;
if ((re->software.outbuf_get_rot(re->software.ob) != 0) && (!client_side_rotation))
return EINA_FALSE;
+ gl_context = re->window_gl_context_get(re->software.ob);
+ if (gl_context->def_surface != sfc)
+ return EINA_FALSE;
+
return EINA_TRUE;
}