From 3c0fb329ecc4a719bd8d80257298d08f80b1bfd3 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sat, 3 May 2014 18:33:58 +1000 Subject: Move non GL_View stuff from gld -> ourGlobals. Plus some white space fixes. --- src/extantz/extantz.c | 170 ++++++++++++++++++++++++-------------------------- 1 file changed, 82 insertions(+), 88 deletions(-) (limited to 'src/extantz/extantz.c') diff --git a/src/extantz/extantz.c b/src/extantz/extantz.c index 6ef2b75..d1fdf50 100644 --- a/src/extantz/extantz.c +++ b/src/extantz/extantz.c @@ -8,6 +8,7 @@ static void gldata_init(GLData *gld) { gld->useIrr = USE_IRR; +#if DO_GEARS gld->view_rotx = -20.0; gld->view_roty = -30.0; gld->view_rotz = 0.0; @@ -16,10 +17,10 @@ static void gldata_init(GLData *gld) gld->light[0] = 1.0; gld->light[1] = 1.0; gld->light[2] = -5.0; +#endif } - static void _resize_winwin(GLData *gld) { Evas_Coord x, y, w, h; @@ -63,14 +64,15 @@ static void _resize(GLData *gld) static void _resize_gl(Evas_Object *obj) { - int w, h; - GLData *gld = evas_object_data_get(obj, "gld"); - - elm_glview_size_get(obj, &w, &h); + globals *ourGlobals = evas_object_data_get(obj, "glob"); + GLData *gld = &ourGlobals->gld; + int w, h; + if (!ourGlobals) return; - gld->img_w = w; - gld->img_h = h; - _resize(gld); + elm_glview_size_get(obj, &w, &h); + gld->img_w = w; + gld->img_h = h; + _resize(gld); } static void _on_resize(void *data, Evas *evas, Evas_Object *obj, void *event_info) @@ -78,54 +80,51 @@ static void _on_resize(void *data, Evas *evas, Evas_Object *obj, void *event_inf globals *ourGlobals = data; GLData *gld = &ourGlobals->gld; - eo_do(gld->win, evas_obj_size_get(&gld->win_w, &gld->win_h)); - eo_do(ourGlobals->tb, evas_obj_size_set(gld->win_w, 25)); + eo_do(ourGlobals->win, evas_obj_size_get(&ourGlobals->win_w, &ourGlobals->win_h)); + eo_do(ourGlobals->tb, evas_obj_size_set(ourGlobals->win_w, 25)); _resize(gld); } // Callback from Evas, also used as the general callback for deleting the GL stuff. static void _clean_gl(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - GLData *gld = data; + globals *ourGlobals = data; + GLData *gld = &ourGlobals->gld; - ecore_animator_del(gld->animator); + ecore_animator_del(ourGlobals->animator); - // Do a make_current before deleting all the GL stuff. + // Do a make_current before deleting all the GL stuff. // evas_gl_make_current(NULL, NULL, NULL); - // TODO - Since this is created on the render thread, better hope this is being deleted on the render thread. - finishIrr(gld); + // TODO - Since this is created on the render thread, better hope this is being deleted on the render thread. + finishIrr(gld); #if DO_GEARS - Evas_GL_API *gl = gld->glApi; + Evas_GL_API *gl = gld->glApi; - gl->glDeleteShader(gld->vtx_shader); - gl->glDeleteShader(gld->fgmt_shader); - gl->glDeleteProgram(gld->program); + gl->glDeleteShader(gld->vtx_shader); + gl->glDeleteShader(gld->fgmt_shader); + gl->glDeleteProgram(gld->program); - gl->glDeleteBuffers(1, &gld->gear1->vbo); - gl->glDeleteBuffers(1, &gld->gear2->vbo); - gl->glDeleteBuffers(1, &gld->gear3->vbo); + gl->glDeleteBuffers(1, &gld->gear1->vbo); + gl->glDeleteBuffers(1, &gld->gear2->vbo); + gl->glDeleteBuffers(1, &gld->gear3->vbo); - free_gear(gld->gear1); - free_gear(gld->gear2); - free_gear(gld->gear3); + free_gear(gld->gear1); + free_gear(gld->gear2); + free_gear(gld->gear3); #endif + + evas_object_data_del((Evas_Object*)obj, "glob"); } // Callback from Elm, coz they do shit different. static void _del_gl(Evas_Object *obj) { - GLData *gld = evas_object_data_get(obj, "gld"); - if (!gld) - { - printf("Unable to get GLData. \n"); - return; - } - - _clean_gl(gld, NULL, NULL, NULL); + globals *ourGlobals = evas_object_data_get(obj, "glob"); + if (!ourGlobals) return; - evas_object_data_del((Evas_Object*)obj, "gld"); + _clean_gl(ourGlobals, NULL, NULL, NULL); } // Callback for when the app quits. @@ -200,42 +199,34 @@ static void init_evas_gl(globals *ourGlobals) { GLData *gld = &ourGlobals->gld; - gld->sfc_w = gld->win_w; - gld->sfc_h = gld->win_h; + gld->sfc_w = ourGlobals->win_w; + gld->sfc_h = ourGlobals->win_h; if (USE_IRR || DO_GEARS) { - gld->sfc_h = gld->win_h; - - // Get the Evas / canvas from the elm window (that the Evas_Object "lives on"), which is itself an Evas_Object created by Elm, so not sure if it was created internally with Ecore_Evas. - gld->canvas = evas_object_evas_get(gld->win); - // An Ecore_Evas holds an Evas. - // Get the Ecore_Evas that wraps an Evas. - gld->ee = ecore_evas_ecore_evas_get(gld->canvas); // Only use this on Evas that was created with Ecore_Evas. + gld->sfc_h = ourGlobals->win_h; // Add a GLView - gld->elmGl = elm_glview_add(gld->win); + gld->elmGl = elm_glview_add(ourGlobals->win); evas_object_size_hint_align_set(gld->elmGl, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(gld->elmGl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_glview_mode_set(gld->elmGl, 0 | ELM_GLVIEW_ALPHA | ELM_GLVIEW_DEPTH | ELM_GLVIEW_DIRECT); elm_glview_resize_policy_set(gld->elmGl, ELM_GLVIEW_RESIZE_POLICY_RECREATE); // Destroy the current surface on a resize and create a new one. elm_glview_render_policy_set(gld->elmGl, ELM_GLVIEW_RENDER_POLICY_ON_DEMAND); // elm_glview_render_policy_set(gld->elmGl, ELM_GLVIEW_RENDER_POLICY_ALWAYS); + + gld->glApi = elm_glview_gl_api_get(gld->elmGl); + evas_object_data_set(gld->elmGl, "glob", ourGlobals); // These get called in the render thread I think. - // None let me pass data, so this is why we are adding "gld" data to the object below. + // None let me pass data, so this is why we are adding "glob" data to the object above. // Maybe we can use elm_object_signal_callback_add or elm_object_item_signal_callback_add (edje signals)? //elm_glview_init_func_set(gld->elmGl, _init_gl); // Not actually needed, it gets done in on_pixels. elm_glview_del_func_set(gld->elmGl, _del_gl); elm_glview_resize_func_set(gld->elmGl, _resize_gl); elm_glview_render_func_set(gld->elmGl, (Elm_GLView_Func_Cb) _draw_gl); - // Not needed, the resize callback above deals with that. - //elm_win_resize_object_add(gld->win, gld->elmGl); - gld->glApi = elm_glview_gl_api_get(gld->elmGl); - evas_object_data_set(gld->elmGl, "gld", gld); - evas_object_data_set(gld->elmGl, "glob", ourGlobals); evas_object_show(gld->elmGl); - elm_box_pack_end(gld->bx, gld->elmGl); + elm_box_pack_end(ourGlobals->bx, gld->elmGl); } // TODO - apparently the proper way to deal with the new async rendering is to have this animator do the dirty thing, and call the Irrlicht rendering stuff in the _draw_gl call set above. @@ -243,7 +234,7 @@ static void init_evas_gl(globals *ourGlobals) // Jiggling this seems to produce a trade off between flickering and frame rate. Nothing else changed the flickering. ecore_animator_frametime_set(0.04); // Default is 1/30, or 0.033333 - gld->animator = ecore_animator_add(doFrame, ourGlobals); // This animator will be called every frame tick, which defaults to 1/30 seconds. + ourGlobals->animator = ecore_animator_add(doFrame, ourGlobals); // This animator will be called every frame tick, which defaults to 1/30 seconds. return; } @@ -274,29 +265,29 @@ static void makeMainMenu(globals *ourGlobals) Elm_Object_Item *tb_it; // A toolbar thingy. - tb = eo_add(ELM_OBJ_TOOLBAR_CLASS, gld->win); + tb = eo_add(ELM_OBJ_TOOLBAR_CLASS, ourGlobals->win); ourGlobals->tb = tb; eo_do(tb, evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, 0.0), evas_obj_size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL), elm_obj_toolbar_shrink_mode_set(ELM_TOOLBAR_SHRINK_MENU), - evas_obj_size_set(gld->win_w, 25), + evas_obj_size_set(ourGlobals->win_w, 25), evas_obj_position_set(0, 0), elm_obj_toolbar_align_set(0.0) ); // Menus. - menu = _toolbar_menu_add(gld->win, tb, "file"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "file"); elm_menu_item_add(menu, NULL, NULL, "quit", _on_done, gld); - menu = _toolbar_menu_add(gld->win, tb, "edit"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "edit"); elm_menu_item_add(menu, NULL, NULL, "preferences", NULL, NULL); - menu = _toolbar_menu_add(gld->win, tb, "view"); - menu = _toolbar_menu_add(gld->win, tb, "world"); - menu = _toolbar_menu_add(gld->win, tb, "tools"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "view"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "world"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "tools"); - menu = _toolbar_menu_add(gld->win, tb, "help"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "help"); elm_menu_item_add(menu, NULL, NULL, "grid help", NULL, NULL); elm_menu_item_separator_add(menu, NULL); elm_menu_item_add(menu, NULL, NULL, "extantz blogs", NULL, NULL); @@ -304,10 +295,10 @@ static void makeMainMenu(globals *ourGlobals) elm_menu_item_separator_add(menu, NULL); elm_menu_item_add(menu, NULL, NULL, "about extantz", NULL, NULL); - menu = _toolbar_menu_add(gld->win, tb, "advanced"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "advanced"); elm_menu_item_add(menu, NULL, NULL, "debug settings", NULL, NULL); - menu = _toolbar_menu_add(gld->win, tb, "god"); + menu = _toolbar_menu_add(ourGlobals->win, tb, "god"); // Other stuff in the toolbar. tb_it = elm_toolbar_item_append(tb, NULL, NULL, NULL, NULL); @@ -354,30 +345,33 @@ EAPI_MAIN int elm_main(int argc, char **argv) // Set the engine to opengl_x11, then open our window. elm_config_preferred_engine_set("opengl_x11"); - gld->win = elm_win_util_standard_add("extantz", "extantz virtual world viewer"); - ourGlobals.win = gld->win; - // Get the Evas / canvas from the elm window (that the Evas_Object "lives on"), which is itself an Evas_Object created by Elm, so not sure if it was created internally with Ecore_Evas. - ourGlobals.evas = evas_object_evas_get(gld->win); - + ourGlobals.win = elm_win_util_standard_add("extantz", "extantz virtual world viewer"); // Set preferred engine back to default from config elm_config_preferred_engine_set(NULL); + // TODO, or not TODO - I keep getting rid of these, but keep bringing them back. Leave ee commented for now. + // Get the Evas / canvas from the elm window (that the Evas_Object "lives on"), which is itself an Evas_Object created by Elm, so not sure if it was created internally with Ecore_Evas. + ourGlobals.evas = evas_object_evas_get(ourGlobals.win); + // An Ecore_Evas holds an Evas. + // Get the Ecore_Evas that wraps an Evas. + //ourGlobals.ee = ecore_evas_ecore_evas_get(ourGlobals.evas); // Only use this on Evas that was created with Ecore_Evas. + #if USE_PHYSICS if (!ephysics_init()) return 1; #endif - evas_object_smart_callback_add(gld->win, "delete,request", _on_done, gld); - evas_object_event_callback_add(gld->win, EVAS_CALLBACK_RESIZE, _on_resize, &ourGlobals); + evas_object_smart_callback_add(ourGlobals.win, "delete,request", _on_done, gld); + evas_object_event_callback_add(ourGlobals.win, EVAS_CALLBACK_RESIZE, _on_resize, &ourGlobals); // Get the screen size. - elm_win_screen_size_get(gld->win, &gld->win_x, &gld->win_y, &gld->scr_w, &gld->scr_h); - gld->win_x = gld->win_x + (gld->scr_w / 3); - gld->win_w = gld->scr_w / 2; - gld->win_h = gld->scr_h - 30; + elm_win_screen_size_get(ourGlobals.win, &ourGlobals.win_x, &ourGlobals.win_y, &ourGlobals.scr_w, &ourGlobals.scr_h); + ourGlobals.win_x = ourGlobals.win_x + (ourGlobals.scr_w / 3); + ourGlobals.win_w = ourGlobals.scr_w / 2; + ourGlobals.win_h = ourGlobals.scr_h - 30; // Add a background image object. - obj = eo_add(ELM_OBJ_IMAGE_CLASS, gld->win); + obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals.win); snprintf(buf, sizeof(buf), "%s/sky_03.jpg", elm_app_data_dir_get()); eo_do(obj, evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), @@ -385,20 +379,20 @@ EAPI_MAIN int elm_main(int argc, char **argv) elm_obj_image_file_set(buf, NULL), evas_obj_visibility_set(EINA_TRUE) ); - elm_win_resize_object_add(gld->win, obj); + elm_win_resize_object_add(ourGlobals.win, obj); eo_unref(obj); - gld->bx = eo_add(ELM_OBJ_BOX_CLASS, gld->win); - eo_do(gld->bx, + ourGlobals.bx = eo_add(ELM_OBJ_BOX_CLASS, ourGlobals.win); + eo_do(ourGlobals.bx, evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), evas_obj_size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL), evas_obj_visibility_set(EINA_TRUE) ); - elm_win_resize_object_add(gld->win, gld->bx); + elm_win_resize_object_add(ourGlobals.win, ourGlobals.bx); -// overlay_add(gld); - woMan_add(gld); - chat_add(gld); +// overlay_add(&ourGlobals); + woMan_add(&ourGlobals); + chat_add(&ourGlobals); // Gotta do this after adding the windows, otherwise the menu renders under the window. // This sucks, gotta redefine this menu each time we create a new window? @@ -413,12 +407,12 @@ EAPI_MAIN int elm_main(int argc, char **argv) evas_object_image_pixels_get_callback_set(elm_image_object_get(ourGlobals.scene->image), on_pixels, &ourGlobals); #if USE_PHYSICS - world = ephysicsAdd(gld); + world = ephysicsAdd(&ourGlobals); #endif - evas_object_move(gld->win, gld->win_x, gld->win_y); - evas_object_resize(gld->win, gld->win_w, gld->win_h); - evas_object_show(gld->win); + evas_object_move(ourGlobals.win, ourGlobals.win_x, ourGlobals.win_y); + evas_object_resize(ourGlobals.win, ourGlobals.win_w, ourGlobals.win_h); + evas_object_show(ourGlobals.win); _resize_winwin(gld); @@ -429,12 +423,12 @@ EAPI_MAIN int elm_main(int argc, char **argv) ephysics_shutdown(); #endif - if (gld->win) + if (ourGlobals. win) { Evas_3D_Demo_fini(&ourGlobals); eo_unref(ourGlobals.tb); - eo_unref(gld->bx); - evas_object_del(gld->win); + eo_unref(ourGlobals.bx); + evas_object_del(ourGlobals.win); } if (ourGlobals.logDom >= 0) -- cgit v1.1