-Changed Godot exit to be clean.

-Added more debug information on memory cleanliness on exit (if run with -v)
-Fixed several memory leaks, fixes #1731, fixes #755
This commit is contained in:
Juan Linietsky 2015-04-20 19:38:02 -03:00
parent 28c4afeb57
commit 59154cccf9
37 changed files with 263 additions and 68 deletions

View file

@ -3289,10 +3289,10 @@ AnimationKeyEditor::AnimationKeyEditor(UndoRedo *p_undo_redo, EditorHistory *p_h
keying->connect("pressed",this,"_keying_toggled");
*/
l = memnew( Label );
/* l = memnew( Label );
l->set_text("Base: ");
l->set_pos(Point2(0,3));
// dr_panel->add_child(l);
// dr_panel->add_child(l);*/
// menu->get_popup()->connect("item_pressed",this,"_menu_callback");

View file

@ -1779,3 +1779,11 @@ EditorImportExport::EditorImportExport() {
}
EditorImportExport::~EditorImportExport() {
}

View file

@ -336,6 +336,7 @@ public:
void save_config();
EditorImportExport();
~EditorImportExport();
};
VARIANT_ENUM_CAST(EditorImportExport::ImageAction);

View file

@ -144,6 +144,7 @@ void EditorNode::_unhandled_input(const InputEvent& p_event) {
void EditorNode::_notification(int p_what) {
if (p_what==NOTIFICATION_EXIT_TREE) {
editor_data.save_editor_external_data();
log->deinit(); // do not get messages anymore
@ -1393,7 +1394,7 @@ void EditorNode::_run(bool p_current,const String& p_custom) {
}
play_button->set_pressed(false);
pause_button->set_pressed(false);
//pause_button->set_pressed(false);
play_scene_button->set_pressed(false);
String current_filename;
@ -2152,7 +2153,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
editor_run.stop();
play_button->set_pressed(false);
play_scene_button->set_pressed(false);
pause_button->set_pressed(false);
//pause_button->set_pressed(false);
emit_signal("stop_pressed");
} break;
@ -3023,7 +3024,7 @@ void EditorNode::notify_child_process_exited() {
play_button->set_pressed(false);
play_scene_button->set_pressed(false);
pause_button->set_pressed(false);
//pause_button->set_pressed(false);
stop_button->set_pressed(false);
editor_run.stop();
@ -3306,6 +3307,7 @@ EditorNode::EditorNode() {
FileDialog::unregister_func=_file_dialog_unregister;
editor_import_export = memnew( EditorImportExport );
add_child(editor_import_export);
register_exporters();
@ -3491,8 +3493,9 @@ EditorNode::EditorNode() {
prev_scene->set_disabled(true);
//left_menu_hb->add_child( prev_scene );
prev_scene->connect("pressed",this,"_menu_option",make_binds(FILE_OPEN_PREV));
//gui_base->add_child(prev_scene);
gui_base->add_child(prev_scene);
prev_scene->set_pos(Point2(3,24));
prev_scene->hide();
Separator *vs=NULL;
@ -3617,14 +3620,14 @@ EditorNode::EditorNode() {
pause_button = memnew( ToolButton );
/*pause_button = memnew( ToolButton );
//menu_panel->add_child(pause_button); - not needed for now?
pause_button->set_toggle_mode(true);
pause_button->set_icon(gui_base->get_icon("Pause","EditorIcons"));
pause_button->set_focus_mode(Control::FOCUS_NONE);
pause_button->connect("pressed", this,"_menu_option",make_binds(RUN_PAUSE));
pause_button->set_tooltip("Pause the scene (F7).");
*/
stop_button = memnew( ToolButton );
play_hb->add_child(stop_button);
//stop_button->set_toggle_mode(true);
@ -3641,7 +3644,7 @@ EditorNode::EditorNode() {
native_play_button->hide();
native_play_button->get_popup()->connect("item_pressed",this,"_run_in_device");
VSeparator *s1 = memnew( VSeparator );
// VSeparator *s1 = memnew( VSeparator );
// play_hb->add_child(s1);
play_scene_button = memnew( ToolButton );
@ -3677,13 +3680,14 @@ EditorNode::EditorNode() {
p->set_item_tooltip(p->get_item_index(RUN_DEPLOY_DUMB_CLIENTS),"Deploy dumb clients when the File Server is active.");
p->connect("item_pressed",this,"_menu_option");
/*
run_settings_button = memnew( ToolButton );
//menu_hb->add_child(run_settings_button);
//run_settings_button->set_toggle_mode(true);
run_settings_button->set_focus_mode(Control::FOCUS_NONE);
run_settings_button->set_icon(gui_base->get_icon("Run","EditorIcons"));
run_settings_button->connect("pressed", this,"_menu_option",make_binds(RUN_SCENE_SETTINGS));
*/
/*
run_settings_button = memnew( ToolButton );
@ -4246,6 +4250,7 @@ EditorNode::EditorNode() {
EditorNode::~EditorNode() {
memdelete(editor_selection);
memdelete(file_server);
EditorSettings::destroy();

View file

@ -278,6 +278,7 @@ void EditorFileServer::_thread_start(void*s) {
self->to_wait.erase(w);
self->wait_mutex->unlock();
Thread::wait_to_finish(w);
memdelete(w);
self->wait_mutex->lock();
}
self->wait_mutex->unlock();
@ -346,5 +347,6 @@ EditorFileServer::~EditorFileServer() {
quit=true;
Thread::wait_to_finish(thread);
memdelete(thread);
memdelete(wait_mutex);
}

View file

@ -650,6 +650,7 @@ public:
vbl->add_spacer();
vbl->add_margin_child("Test: ",testhb);
/*
HBoxContainer *upd_hb = memnew( HBoxContainer );
// vbl->add_child(upd_hb);
upd_hb->add_spacer();
@ -657,7 +658,7 @@ public:
upd_hb->add_child(update);
update->set_text("Update");
update->connect("pressed",this,"_update");
*/
options = memnew( _EditorFontImportOptions );
prop_edit = memnew( PropertyEditor() );
vbr->add_margin_child("Options:",prop_edit,true);

View file

@ -2127,6 +2127,7 @@ void BakedLightBaker::_stop_thread() {
bake_thread_exit=true;
for(int i=0;i<threads.size();i++) {
Thread::wait_to_finish(threads[i]);
memdelete(threads[i]);
}
threads.clear();
}

View file

@ -943,13 +943,13 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) {
}
List<BoneList>::Element *Cbone=NULL; //closest
Map<ObjectID,BoneList>::Element *Cbone=NULL; //closest
{
bone_ik_list.clear();
float closest_dist=1e20;
int bone_width = EditorSettings::get_singleton()->get("2d_editor/bone_width");
for(List<BoneList>::Element *E=bone_list.front();E;E=E->next()) {
for(Map<ObjectID,BoneList>::Element *E=bone_list.front();E;E=E->next()) {
if (E->get().from == E->get().to)
continue;
@ -1789,7 +1789,7 @@ void CanvasItemEditor::_viewport_draw() {
Color bone_ik_color = EditorSettings::get_singleton()->get("2d_editor/bone_ik_color");
Color bone_selected_color = EditorSettings::get_singleton()->get("2d_editor/bone_selected_color");
for(List<BoneList>::Element*E=bone_list.front();E;E=E->next()) {
for(Map<ObjectID,BoneList>::Element*E=bone_list.front();E;E=E->next()) {
E->get().from=Vector2();
E->get().to=Vector2();
@ -1884,10 +1884,12 @@ void CanvasItemEditor::_notification(int p_what) {
}
for(List<BoneList>::Element *E=bone_list.front();E;E=E->next()) {
for(Map<ObjectID,BoneList>::Element *E=bone_list.front();E;E=E->next()) {
Object *b = ObjectDB::get_instance(E->get().bone);
if (!b) {
viewport->update();
break;
}
@ -1989,9 +1991,14 @@ void CanvasItemEditor::_find_canvas_items_span(Node *p_node, Rect2& r_rect, cons
if (c->has_meta("_edit_bone_")) {
BoneList bone;
bone.bone=c->get_instance_ID();
bone_list.push_back(bone);
ObjectID id = c->get_instance_ID();
if (!bone_list.has(id)) {
BoneList bone;
bone.bone=id;
bone_list[id]=bone;
}
bone_list[id].last_pass=bone_last_frame;
}
r_rect.expand_to( xform.xform(rect.pos) );
@ -2026,11 +2033,26 @@ void CanvasItemEditor::_update_scrollbars() {
Rect2 canvas_item_rect=Rect2(Point2(),screen_rect);
lock_list.clear();;
bone_list.clear();;
bone_last_frame++;
if (editor->get_edited_scene())
_find_canvas_items_span(editor->get_edited_scene(),canvas_item_rect,Matrix32());
List<Map<ObjectID,BoneList>::Element*> bone_to_erase;
for(Map<ObjectID,BoneList>::Element*E=bone_list.front();E;E=E->next()) {
if (E->get().last_pass!=bone_last_frame) {
bone_to_erase.push_back(E);
}
}
while(bone_to_erase.size()) {
bone_list.erase(bone_to_erase.front()->get());
bone_to_erase.pop_front();
}
//expand area so it's easier to do animations and stuff at 0,0
canvas_item_rect.size+=screen_rect*2;
@ -3024,6 +3046,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
set_process_unhandled_key_input(true);
can_move_pivot=false;
drag=DRAG_NONE;
bone_last_frame=0;
}
CanvasItemEditor *CanvasItemEditor::singleton=NULL;

View file

@ -181,9 +181,12 @@ class CanvasItemEditor : public VBoxContainer {
Vector2 from;
Vector2 to;
ObjectID bone;
uint64_t last_pass;
};
List<BoneList> bone_list;
uint64_t bone_last_frame;
Map<ObjectID,BoneList> bone_list;
Matrix32 bone_orig_xform;
struct BoneIK {

View file

@ -332,7 +332,8 @@ SampleLibraryEditor::SampleLibraryEditor() {
play->set_pos(Point2( 5, 5 ));
play->set_size( Size2(1,1 ) );
play->set_toggle_mode(true);
//add_child(play);
add_child(play);
play->hide();
stop = memnew( Button );

View file

@ -1764,6 +1764,12 @@ void SpatialEditorViewport::_notification(int p_what) {
preview_camera->set_icon(get_icon("Camera","EditorIcons"));
_init_gizmo_instance(index);
}
if (p_what==NOTIFICATION_EXIT_TREE) {
_finish_gizmo_instances();
}
if (p_what==NOTIFICATION_MOUSE_ENTER) {
@ -2052,6 +2058,16 @@ void SpatialEditorViewport::_init_gizmo_instance(int p_idx) {
}
void SpatialEditorViewport::_finish_gizmo_instances() {
for(int i=0;i<3;i++) {
VS::get_singleton()->free(move_gizmo_instance[i]);
VS::get_singleton()->free(rotate_gizmo_instance[i]);
}
}
void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) {
@ -2971,14 +2987,14 @@ void SpatialEditor::_init_indicators() {
VisualServer::get_singleton()->instance_set_transform(light_instance,light_transform);
RID mat = VisualServer::get_singleton()->fixed_material_create();
VisualServer::get_singleton()->fixed_material_set_flag(mat, VisualServer::FIXED_MATERIAL_FLAG_USE_ALPHA,true);
VisualServer::get_singleton()->fixed_material_set_flag(mat, VisualServer::FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true);
//RID mat = VisualServer::get_singleton()->fixed_material_create();
///VisualServer::get_singleton()->fixed_material_set_flag(mat, VisualServer::FIXED_MATERIAL_FLAG_USE_ALPHA,true);
//VisualServer::get_singleton()->fixed_material_set_flag(mat, VisualServer::FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true);
{
RID indicator_mat = VisualServer::get_singleton()->fixed_material_create();
indicator_mat = VisualServer::get_singleton()->fixed_material_create();
VisualServer::get_singleton()->material_set_flag( indicator_mat, VisualServer::MATERIAL_FLAG_UNSHADED, true );
VisualServer::get_singleton()->material_set_flag( indicator_mat, VisualServer::MATERIAL_FLAG_ONTOP, false );
VisualServer::get_singleton()->fixed_material_set_flag(indicator_mat, VisualServer::FIXED_MATERIAL_FLAG_USE_ALPHA,true);
@ -3042,7 +3058,7 @@ void SpatialEditor::_init_indicators() {
d[VisualServer::ARRAY_COLOR]=origin_colors;
VisualServer::get_singleton()->mesh_add_surface(origin,VisualServer::PRIMITIVE_LINES,d);
VisualServer::get_singleton()->mesh_surface_set_material(origin,0,indicator_mat,true);
VisualServer::get_singleton()->mesh_surface_set_material(origin,0,indicator_mat);
// origin = VisualServer::get_singleton()->poly_create();
@ -3073,17 +3089,17 @@ void SpatialEditor::_init_indicators() {
cursor_points.push_back(Vector3(0,-cs,0));
cursor_points.push_back(Vector3(0,0,+cs));
cursor_points.push_back(Vector3(0,0,-cs));
RID cmat=VisualServer::get_singleton()->fixed_material_create();
VisualServer::get_singleton()->fixed_material_set_param(cmat,VS::FIXED_MATERIAL_PARAM_DIFFUSE,Color(0,1,1));
VisualServer::get_singleton()->material_set_flag( cmat, VisualServer::MATERIAL_FLAG_UNSHADED, true );
VisualServer::get_singleton()->fixed_material_set_flag(cmat, VisualServer::FIXED_MATERIAL_FLAG_USE_ALPHA,true);
VisualServer::get_singleton()->fixed_material_set_flag(cmat, VisualServer::FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true);
cursor_material=VisualServer::get_singleton()->fixed_material_create();
VisualServer::get_singleton()->fixed_material_set_param(cursor_material,VS::FIXED_MATERIAL_PARAM_DIFFUSE,Color(0,1,1));
VisualServer::get_singleton()->material_set_flag( cursor_material, VisualServer::MATERIAL_FLAG_UNSHADED, true );
VisualServer::get_singleton()->fixed_material_set_flag(cursor_material, VisualServer::FIXED_MATERIAL_FLAG_USE_ALPHA,true);
VisualServer::get_singleton()->fixed_material_set_flag(cursor_material, VisualServer::FIXED_MATERIAL_FLAG_USE_COLOR_ARRAY,true);
Array d;
d.resize(VS::ARRAY_MAX);
d[VS::ARRAY_VERTEX]=cursor_points;
VisualServer::get_singleton()->mesh_add_surface(cursor_mesh,VS::PRIMITIVE_LINES,d);
VisualServer::get_singleton()->mesh_surface_set_material(cursor_mesh,0,cmat,true);
VisualServer::get_singleton()->mesh_surface_set_material(cursor_mesh,0,cursor_material);
cursor_instance = VisualServer::get_singleton()->instance_create2(cursor_mesh,get_tree()->get_root()->get_world()->get_scenario());
VS::get_singleton()->instance_set_layer_mask(cursor_instance,1<<SpatialEditorViewport::GIZMO_GRID_LAYER);
@ -3252,7 +3268,6 @@ void SpatialEditor::_init_indicators() {
void SpatialEditor::_finish_indicators() {
VisualServer::get_singleton()->free(origin_instance);
VisualServer::get_singleton()->free(origin);
for(int i=0;i<3;i++) {
@ -3267,6 +3282,8 @@ void SpatialEditor::_finish_indicators() {
VisualServer::get_singleton()->free(cursor_instance);
VisualServer::get_singleton()->free(cursor_mesh);
VisualServer::get_singleton()->free(indicator_mat);
VisualServer::get_singleton()->free(cursor_material);
}
void SpatialEditor::_instance_scene() {

View file

@ -224,6 +224,7 @@ private:
void _preview_exited_scene();
void _toggle_camera_preview(bool);
void _init_gizmo_instance(int p_idx);
void _finish_gizmo_instances();
protected:
@ -324,6 +325,8 @@ private:
RID indicators_instance;
RID cursor_mesh;
RID cursor_instance;
RID indicator_mat;
RID cursor_material;
/*
struct Selected {

View file

@ -1280,8 +1280,10 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
del->set_text("Del");
del->connect("pressed",this,"_item_del");
/*
Button *save = memnew( Button );
//props_base->add_child(save);
props_base->add_child(save);
save->set_anchor(MARGIN_LEFT,ANCHOR_END);
save->set_anchor(MARGIN_RIGHT,ANCHOR_END);
save->set_anchor(MARGIN_TOP,ANCHOR_END);
@ -1290,7 +1292,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
save->set_end( Point2(10,20) );
save->set_text("Save");
save->connect("pressed",this,"_save");
*/
popup_platform = memnew( MenuButton );
popup_platform->set_text("Copy To Platform..");
popup_platform->set_disabled(true);
@ -1409,6 +1411,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
device_input->add_child(device_index);
/*
save = memnew( Button );
input_base->add_child(save);
save->set_anchor(MARGIN_LEFT,ANCHOR_END);
@ -1419,7 +1422,7 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
save->set_end( Point2(10,20) );
save->set_text("Save");
save->connect("pressed",this,"_save");
*/
setting=false;
//translations