forked from enlightenment/efl
evas/engine: added new engine api for ector
This commit is contained in:
parent
aacf277c3a
commit
befb7701a7
|
@ -34,7 +34,7 @@ generic_cache_dump(Generic_Cache *cache)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
generic_cache_set(Generic_Cache *cache, void *key, void *surface)
|
generic_cache_data_set(Generic_Cache *cache, void *key, void *surface)
|
||||||
{
|
{
|
||||||
Generic_Cache_Entry *entry = NULL;
|
Generic_Cache_Entry *entry = NULL;
|
||||||
int count;
|
int count;
|
||||||
|
@ -59,7 +59,7 @@ generic_cache_set(Generic_Cache *cache, void *key, void *surface)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void *
|
EAPI void *
|
||||||
generic_cache_get(Generic_Cache *cache, void *key)
|
generic_cache_data_get(Generic_Cache *cache, void *key)
|
||||||
{
|
{
|
||||||
Generic_Cache_Entry *entry = NULL, *lru_data;
|
Generic_Cache_Entry *entry = NULL, *lru_data;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
@ -84,7 +84,7 @@ generic_cache_get(Generic_Cache *cache, void *key)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
generic_cache_drop(Generic_Cache *cache, void *key)
|
generic_cache_data_drop(Generic_Cache *cache, void *key)
|
||||||
{
|
{
|
||||||
Generic_Cache_Entry *entry = NULL;
|
Generic_Cache_Entry *entry = NULL;
|
||||||
|
|
||||||
|
|
|
@ -1513,6 +1513,12 @@ struct _Evas_Func
|
||||||
void* (*ector_new) (void *engine, void *context, Ector_Surface *ector, void *surface);
|
void* (*ector_new) (void *engine, void *context, Ector_Surface *ector, void *surface);
|
||||||
void (*ector_free) (void *engine_data);
|
void (*ector_free) (void *engine_data);
|
||||||
|
|
||||||
|
void *(*ector_surface_create) (void *engine, int w, int h, int *error);
|
||||||
|
void (*ector_surface_destroy) (void *engine, void *surface);
|
||||||
|
void (*ector_surface_cache_set) (void *engine, void *key, void *surface);
|
||||||
|
void *(*ector_surface_cache_get) (void *engine, void *key);
|
||||||
|
void (*ector_surface_cache_drop) (void *engine, void *key);
|
||||||
|
|
||||||
Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd);
|
Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd);
|
||||||
Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd);
|
Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd);
|
||||||
|
|
||||||
|
|
|
@ -2623,6 +2623,65 @@ eng_ector_renderer_draw(void *engine EINA_UNUSED, void *data, void *context, voi
|
||||||
eina_array_free(c);
|
eina_array_free(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ector functions start
|
||||||
|
static void*
|
||||||
|
eng_ector_surface_create(void *engine, int width, int height, int *error)
|
||||||
|
{
|
||||||
|
void *surface;
|
||||||
|
|
||||||
|
*error = EINA_FALSE;
|
||||||
|
|
||||||
|
if (use_gl)
|
||||||
|
{
|
||||||
|
surface = evas_gl_common_image_surface_new(gl_generic_context_get(engine, EINA_TRUE),
|
||||||
|
width, height, EINA_TRUE, EINA_FALSE);
|
||||||
|
if (!surface) *error = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
surface = eng_image_new_from_copied_data(engine, width, height, NULL, EINA_TRUE, EVAS_COLORSPACE_ARGB8888);
|
||||||
|
if (!surface)
|
||||||
|
*error = EINA_TRUE;
|
||||||
|
else //Use this hint for ZERO COPY texture upload.
|
||||||
|
eng_image_content_hint_set(engine, surface, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eng_ector_surface_destroy(void *engine, void *surface)
|
||||||
|
{
|
||||||
|
if (!surface) return;
|
||||||
|
eng_image_free(engine, surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eng_ector_surface_cache_set(void *engine, void *key , void *surface)
|
||||||
|
{
|
||||||
|
Render_Engine_GL_Generic *e = engine;
|
||||||
|
|
||||||
|
generic_cache_data_set(e->software.surface_cache, key, surface);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
eng_ector_surface_cache_get(void *engine, void *key)
|
||||||
|
{
|
||||||
|
Render_Engine_GL_Generic *e = engine;
|
||||||
|
|
||||||
|
return generic_cache_data_get(e->software.surface_cache, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eng_ector_surface_cache_drop(void *engine, void *key)
|
||||||
|
{
|
||||||
|
Render_Engine_GL_Generic *e = engine;
|
||||||
|
|
||||||
|
generic_cache_data_drop(e->software.surface_cache, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef struct _Evas_GL_Ector Evas_GL_Ector;
|
typedef struct _Evas_GL_Ector Evas_GL_Ector;
|
||||||
struct _Evas_GL_Ector
|
struct _Evas_GL_Ector
|
||||||
{
|
{
|
||||||
|
@ -3305,7 +3364,11 @@ module_open(Evas_Module *em)
|
||||||
ORD(ector_end);
|
ORD(ector_end);
|
||||||
ORD(ector_new);
|
ORD(ector_new);
|
||||||
ORD(ector_free);
|
ORD(ector_free);
|
||||||
|
ORD(ector_surface_create);
|
||||||
|
ORD(ector_surface_destroy);
|
||||||
|
ORD(ector_surface_cache_set);
|
||||||
|
ORD(ector_surface_cache_get);
|
||||||
|
ORD(ector_surface_cache_drop);
|
||||||
ORD(gfx_filter_supports);
|
ORD(gfx_filter_supports);
|
||||||
ORD(gfx_filter_process);
|
ORD(gfx_filter_process);
|
||||||
|
|
||||||
|
|
|
@ -4294,6 +4294,8 @@ eng_output_idle_flush(void *engine EINA_UNUSED, void *data)
|
||||||
if (re->outbuf_idle_flush) re->outbuf_idle_flush(re->ob);
|
if (re->outbuf_idle_flush) re->outbuf_idle_flush(re->ob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ector functions
|
||||||
|
|
||||||
static Eina_Bool use_cairo;
|
static Eina_Bool use_cairo;
|
||||||
|
|
||||||
static Ector_Surface *
|
static Ector_Surface *
|
||||||
|
@ -4318,6 +4320,52 @@ eng_ector_create(void *engine EINA_UNUSED)
|
||||||
return ector;
|
return ector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void*
|
||||||
|
eng_ector_surface_create(void *engine, int width, int height, int *error)
|
||||||
|
{
|
||||||
|
void *surface;
|
||||||
|
|
||||||
|
*error = EINA_FALSE;
|
||||||
|
|
||||||
|
surface = eng_image_new_from_copied_data(engine, width, height, NULL, EINA_TRUE, EVAS_COLORSPACE_ARGB8888);
|
||||||
|
if (!surface) *error = EINA_TRUE;
|
||||||
|
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eng_ector_surface_destroy(void *engine, void *surface)
|
||||||
|
{
|
||||||
|
if (!surface) return;
|
||||||
|
eng_image_free(engine, surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eng_ector_surface_cache_set(void *engine, void *key , void *surface)
|
||||||
|
{
|
||||||
|
Render_Engine_Software_Generic *e = engine;
|
||||||
|
|
||||||
|
generic_cache_data_set(e->surface_cache, key, surface);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
eng_ector_surface_cache_get(void *engine, void *key)
|
||||||
|
{
|
||||||
|
Render_Engine_Software_Generic *e = engine;
|
||||||
|
|
||||||
|
return generic_cache_data_get(e->surface_cache, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eng_ector_surface_cache_drop(void *engine, void *key)
|
||||||
|
{
|
||||||
|
Render_Engine_Software_Generic *e = engine;
|
||||||
|
|
||||||
|
generic_cache_data_drop(e->surface_cache, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eng_ector_output_set(void *engine EINA_UNUSED,
|
eng_ector_output_set(void *engine EINA_UNUSED,
|
||||||
Ector_Surface *surface EINA_UNUSED,
|
Ector_Surface *surface EINA_UNUSED,
|
||||||
|
@ -4846,6 +4894,11 @@ static Evas_Func func =
|
||||||
eng_ector_end,
|
eng_ector_end,
|
||||||
eng_ector_new,
|
eng_ector_new,
|
||||||
eng_ector_free,
|
eng_ector_free,
|
||||||
|
eng_ector_surface_create,
|
||||||
|
eng_ector_surface_destroy,
|
||||||
|
eng_ector_surface_cache_set,
|
||||||
|
eng_ector_surface_cache_get,
|
||||||
|
eng_ector_surface_cache_drop,
|
||||||
eng_gfx_filter_supports,
|
eng_gfx_filter_supports,
|
||||||
eng_gfx_filter_process,
|
eng_gfx_filter_process,
|
||||||
/* FUTURE software generic calls go here */
|
/* FUTURE software generic calls go here */
|
||||||
|
|
Loading…
Reference in New Issue