summaryrefslogtreecommitdiff
path: root/src/modules/evas/engines/gl_generic/evas_engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/evas/engines/gl_generic/evas_engine.c')
-rw-r--r--src/modules/evas/engines/gl_generic/evas_engine.c54
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);