remove about 16m mem for mesa for extra evgl context

only creating the extra evasgl context on demand when/if needed and
thus save 16m of memory allocations corresponding to the extra context
This commit is contained in:
Carsten Haitzler 2013-05-20 18:09:50 +09:00
parent c727ab8088
commit 0532a992d9
1 changed files with 38 additions and 5 deletions

View File

@ -52,6 +52,7 @@ struct _Render_Engine
int vsync;
int lost_back;
int prev_age;
Eina_Bool evgl_initted : 1;
};
static int initted = 0;
@ -152,6 +153,10 @@ measure(int end, const char *name)
}
#endif
static int evgl_init(Render_Engine *re);
#define EVGLINIT(_re, _ret) if (!evgl_init(_re)) return _ret
//----------------------------------------------------------//
// NEW_EVAS_GL Engine Functions
static void *
@ -159,10 +164,11 @@ evgl_eng_display_get(void *data)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, NULL);
if (!re)
{
ERR("Invalid Render Engine Data!");
return 0;
return NULL;
}
#ifdef GL_GLES
@ -181,10 +187,11 @@ evgl_eng_evas_surface_get(void *data)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, NULL);
if (!re)
{
ERR("Invalid Render Engine Data!");
return 0;
return NULL;
}
#ifdef GL_GLES
@ -204,6 +211,7 @@ evgl_eng_make_current(void *data, void *surface, void *context, int flush)
Render_Engine *re = (Render_Engine *)data;
int ret = 0;
EVGLINIT(re, 0);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -289,6 +297,7 @@ evgl_eng_native_window_create(void *data)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, NULL);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -331,6 +340,7 @@ evgl_eng_native_window_destroy(void *data, void *native_window)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, 0);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -358,6 +368,7 @@ evgl_eng_window_surface_create(void *data, void *native_window)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, NULL);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -398,6 +409,7 @@ evgl_eng_window_surface_destroy(void *data, void *surface)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, 0);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -423,6 +435,7 @@ evgl_eng_context_create(void *data, void *share_ctx)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, NULL);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -495,6 +508,7 @@ evgl_eng_context_destroy(void *data, void *context)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, 0);
if ((!re) || (!context))
{
ERR("Invalid Render Input Data. Engine: %p, Context: %p", data, context);
@ -515,6 +529,7 @@ evgl_eng_string_get(void *data)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, NULL);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -550,6 +565,7 @@ evgl_eng_rotation_angle_get(void *data)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(re, 0);
if (!re)
{
ERR("Invalid Render Engine Data!");
@ -798,6 +814,15 @@ _re_winfree(Render_Engine *re)
eng_window_unsurf(re->win);
}
static int
evgl_init(Render_Engine *re)
{
if (re->evgl_initted) return 1;
if (!evgl_engine_init(re, &evgl_funcs)) return 0;
re->evgl_initted = EINA_TRUE;
return 1;
}
static int
eng_setup(Evas *eo_e, void *in)
{
@ -856,7 +881,7 @@ eng_setup(Evas *eo_e, void *in)
evas_common_draw_init();
evas_common_tilebuf_init();
gl_extn_veto(re);
evgl_engine_init(re, &evgl_funcs);
// evgl_engine_init(re, &evgl_funcs);
initted = 1;
}
}
@ -3000,6 +3025,7 @@ eng_gl_surface_create(void *data, void *config, int w, int h)
{
Evas_GL_Config *cfg = (Evas_GL_Config *)config;
EVGLINIT(data, NULL);
return evgl_surface_create(data, cfg, w, h);
}
@ -3008,6 +3034,7 @@ eng_gl_surface_destroy(void *data, void *surface)
{
EVGL_Surface *sfc = (EVGL_Surface *)surface;
EVGLINIT(data, 0);
return evgl_surface_destroy(data, sfc);
}
@ -3016,6 +3043,7 @@ eng_gl_context_create(void *data, void *share_context)
{
EVGL_Context *sctx = (EVGL_Context *)share_context;
EVGLINIT(data, NULL);
return evgl_context_create(data, sctx);
}
@ -3024,6 +3052,7 @@ eng_gl_context_destroy(void *data, void *context)
{
EVGL_Context *ctx = (EVGL_Context *)context;
EVGLINIT(data, 0);
return evgl_context_destroy(data, ctx);
}
@ -3033,12 +3062,14 @@ eng_gl_make_current(void *data, void *surface, void *context)
EVGL_Surface *sfc = (EVGL_Surface *)surface;
EVGL_Context *ctx = (EVGL_Context *)context;
EVGLINIT(data, 0);
return evgl_make_current(data, sfc, ctx);
}
static void *
eng_gl_string_query(void *data EINA_UNUSED, int name)
eng_gl_string_query(void *data, int name)
{
EVGLINIT(data, NULL);
return (void *)evgl_string_query(name);
}
@ -3059,8 +3090,9 @@ eng_gl_native_surface_get(void *data EINA_UNUSED, void *surface, void *native_su
}
static void *
eng_gl_api_get(void *data EINA_UNUSED)
eng_gl_api_get(void *data)
{
EVGLINIT(data, NULL);
return evgl_api_get();
}
@ -3069,6 +3101,7 @@ eng_gl_img_obj_set(void *data EINA_UNUSED, void *image, int has_alpha)
{
Render_Engine *re = (Render_Engine *)data;
EVGLINIT(data, );
evgl_direct_img_obj_set(image, has_alpha, re->win->gl_context->rot);
}
//--------------------------------//