diff options
Diffstat (limited to 'src/modules/evas/engines/gl_generic/evas_engine.c')
-rw-r--r-- | src/modules/evas/engines/gl_generic/evas_engine.c | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 0829e7a0b4..617ef47f73 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -484,18 +484,13 @@ eng_image_native_set(void *engine, void *image, void *native) } } } - if ((!ns) && (!im->native.data)) return im; - gl_generic_window_find(engine); - if (im->native.data) - { - if (im->native.func.free) - im->native.func.free(im); - evas_gl_common_image_native_disable(im); - } - - if (!ns) return im; + if (!ns) + { + evas_gl_common_image_free(im); + return NULL; + } if (ns->type == EVAS_NATIVE_SURFACE_OPENGL) { @@ -1023,7 +1018,7 @@ eng_image_data_put(void *engine, void *image, DATA32 *image_data) } else if (im->gc->shared->info.sec_image_map) { - void *disp = disp = egl_display_get(engine); + void *disp = egl_display_get(engine); secsym_eglUnmapImageSEC(disp, im->tex->pt->dyn.img, EGL_MAP_GL_TEXTURE_DEVICE_CPU_SEC); } } @@ -1528,6 +1523,14 @@ evgl_init(Render_Engine_GL_Generic *engine) #define EVGLINIT(_ret) Render_Output_GL_Generic *re; if ((re = evgl_init(engine)) == NULL) return _ret +static Eina_Bool +eng_gl_supports_evas_gl(void *engine EINA_UNUSED) +{ + // Evas GL should always work... But let's do a full init anyway. + EVGLINIT(EINA_FALSE); + return EINA_TRUE; +} + static void * eng_gl_output_set(void *eng, void *output) { @@ -2505,16 +2508,16 @@ eng_ector_create(void *engine EINA_UNUSED) efl_domain_current_push(EFL_ID_DOMAIN_SHARED); if (ector_backend && !strcasecmp(ector_backend, "default")) { - ector = efl_add(ECTOR_SOFTWARE_SURFACE_CLASS, NULL); + ector = efl_add_ref(ECTOR_SOFTWARE_SURFACE_CLASS, NULL); } else if (ector_backend && !strcasecmp(ector_backend, "experimental")) { - ector = efl_add(ECTOR_GL_SURFACE_CLASS, NULL); + ector = efl_add_ref(ECTOR_GL_SURFACE_CLASS, NULL); use_gl = EINA_TRUE; } else { - ector = efl_add(ECTOR_CAIRO_SOFTWARE_SURFACE_CLASS, NULL); + ector = efl_add_ref(ECTOR_CAIRO_SOFTWARE_SURFACE_CLASS, NULL); use_cairo = EINA_TRUE; } efl_domain_current_pop(); @@ -2524,7 +2527,7 @@ eng_ector_create(void *engine EINA_UNUSED) static void eng_ector_destroy(void *engine EINA_UNUSED, Ector_Surface *ector) { - if (ector) efl_del(ector); + if (ector) efl_unref(ector); } static Ector_Buffer * @@ -2546,20 +2549,6 @@ eng_ector_buffer_new(void *engine, Evas *evas, int w, int h, evas_ector_gl_buffer_prepare(efl_added, engine, w, h, cspace, flags)); } -static Efl_Gfx_Render_Op -_evas_render_op_to_ector_rop(Evas_Render_Op op) -{ - switch (op) - { - case EVAS_RENDER_BLEND: - return EFL_GFX_RENDER_OP_BLEND; - case EVAS_RENDER_COPY: - return EFL_GFX_RENDER_OP_COPY; - default: - return EFL_GFX_RENDER_OP_BLEND; - } -} - static void eng_ector_renderer_draw(void *engine EINA_UNUSED, void *output, void *context EINA_UNUSED, void *surface EINA_UNUSED, @@ -2575,7 +2564,7 @@ eng_ector_renderer_draw(void *engine EINA_UNUSED, void *output, eng_image_size_get(engine, glimg, &w, &h); eina_array_push(c, eina_rectangle_new(0, 0, w, h)); - ector_renderer_draw(renderer, _evas_render_op_to_ector_rop(EVAS_RENDER_COPY), c, 0xffffffff); + ector_renderer_draw(renderer, EFL_GFX_RENDER_OP_BLEND, c, 0xffffffff); while ((r = eina_array_pop(c))) eina_rectangle_free(r); @@ -2663,7 +2652,7 @@ eng_ector_begin(void *engine, void *output, memset(pixels, 0, stride * h); // it just uses the software backend to draw for now - ector_buffer_pixels_set(ector, pixels, w, h, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector, pixels, w, h, stride, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); ector_surface_reference_point_set(ector, x, y); } else @@ -2687,7 +2676,7 @@ eng_ector_end(void *engine, void *output, eng_image_data_put(engine, glim, pixels); eng_image_data_put(engine, glim, pixels); - ector_buffer_pixels_set(ector, NULL, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector, NULL, 0, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); evas_common_cpu_end_opt(); } else if (use_gl) @@ -3180,6 +3169,7 @@ module_open(Evas_Module *em) ORD(font_cache_set); ORD(font_cache_get); + ORD(gl_supports_evas_gl); ORD(gl_output_set); ORD(gl_surface_create); ORD(gl_pbuffer_surface_create); |