godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
90.48k stars 21.08k forks source link

GLTF exporter hard-crashes Godot when using GridMap #58324

Closed PyralSparkfly closed 2 years ago

PyralSparkfly commented 2 years ago

Godot version

3.4.2, 3.5-beta

System information

Windows 10, Linux

Issue description

As it says on the tin, we're having an issue where Godot crashes without much feedback upon attempting to export a gltf of a scene using GridMaps. An empty GridMap does not crash, nor will a GridMap that has a tileset but no tiles placed. So it is probably related to the actual mesh GridMap is putting together.

Here's a dump from Godot 3.x branch built in debug. I couldn't figure out how to link hashes, but it's happening everywhere so:

================================================================
handle_crash: Program crashed with signal 11
Engine version: Godot Engine v3.5.beta.custom_build (3e0f380c90d11f5d317e9ab7081d6cc41803c2ca)
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x46520) [0x7f94395d1520] (??:0)
[2] Ref<ArrayMesh>::ref(Ref<ArrayMesh> const&) ({GODOT SOURCE DIR}/./core/reference.h:64)
[3] Ref<ArrayMesh>::Ref(Ref<ArrayMesh> const&) ({GODOT SOURCE DIR}/./core/reference.h:197)
[4] GLTFMesh::get_mesh() ({GODOT SOURCE DIR}/modules/gltf/gltf_mesh.cpp:47)
[5] GLTFDocument::_serialize_meshes(Ref<GLTFState>) ({GODOT SOURCE DIR}/modules/gltf/gltf_document.cpp:2288)
[6] GLTFDocument::serialize(Ref<GLTFState>, Node*, String const&) ({GODOT SOURCE DIR}/modules/gltf/gltf_document.cpp:102)
[7] PackedSceneGLTF::save_scene(Node*, String const&, String const&, unsigned int, int, List<String, DefaultAllocator>*, Error*) ({GODOT SOURCE DIR}/modules/gltf/packed_scene_gltf.cpp:120)
[8] SceneExporterGLTFPlugin::_gltf2_dialog_action(String) ({GODOT SOURCE DIR}/modules/gltf/editor_scene_exporter_gltf_plugin.cpp:72)
[9] MethodBind1<String>::call(Object*, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/./core/method_bind.gen.inc:775)
[10] Object::call(StringName const&, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/core/object.cpp:918)
[11] Object::emit_signal(StringName const&, Variant const**, int) ({GODOT SOURCE DIR}/core/object.cpp:1224)
[12] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) ({GODOT SOURCE DIR}/core/object.cpp:1279)
[13] EditorFileDialog::_action_pressed() ({GODOT SOURCE DIR}/editor/editor_file_dialog.cpp:470)
[14] MethodBind0::call(Object*, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/./core/method_bind.gen.inc:59)
[15] Object::call(StringName const&, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/core/object.cpp:918)
[16] Object::emit_signal(StringName const&, Variant const**, int) ({GODOT SOURCE DIR}/core/object.cpp:1224)
[17] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) ({GODOT SOURCE DIR}/core/object.cpp:1279)
[18] AcceptDialog::_ok_pressed() ({GODOT SOURCE DIR}/scene/gui/dialogs.cpp:398)
[19] MethodBind0::call(Object*, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/./core/method_bind.gen.inc:59)
[20] Object::call(StringName const&, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/core/object.cpp:918)
[21] Object::emit_signal(StringName const&, Variant const**, int) ({GODOT SOURCE DIR}/core/object.cpp:1224)
[22] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) ({GODOT SOURCE DIR}/core/object.cpp:1279)
[23] BaseButton::_pressed() ({GODOT SOURCE DIR}/scene/gui/base_button.cpp:128)
[24] BaseButton::on_action_event(Ref<InputEvent>) ({GODOT SOURCE DIR}/scene/gui/base_button.cpp:?)
[25] BaseButton::_gui_input(Ref<InputEvent>) ({GODOT SOURCE DIR}/scene/gui/base_button.cpp:67)
[26] MethodBind1<Ref<InputEvent> >::call(Object*, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/./core/method_bind.gen.inc:775)
[27] Object::call_multilevel(StringName const&, Variant const**, int) ({GODOT SOURCE DIR}/core/object.cpp:766)
[28] Object::call_multilevel(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) ({GODOT SOURCE DIR}/core/object.cpp:864)
[29] Viewport::_gui_call_input(Control*, Ref<InputEvent> const&) ({GODOT SOURCE DIR}/scene/main/viewport.cpp:1655)
[30] Viewport::_gui_input_event(Ref<InputEvent>) ({GODOT SOURCE DIR}/scene/main/viewport.cpp:2041)
[31] Viewport::input(Ref<InputEvent> const&) ({GODOT SOURCE DIR}/scene/main/viewport.cpp:2847)
[32] Viewport::_vp_input(Ref<InputEvent> const&) ({GODOT SOURCE DIR}/scene/main/viewport.cpp:1421)
[33] MethodBind1<Ref<InputEvent> const&>::call(Object*, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/./core/method_bind.gen.inc:775)
[34] Object::call(StringName const&, Variant const**, int, Variant::CallError&) ({GODOT SOURCE DIR}/core/object.cpp:918)
[35] Object::call(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) ({GODOT SOURCE DIR}/core/object.cpp:848)
[36] SceneTree::call_group_flags(unsigned int, StringName const&, StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) ({GODOT SOURCE DIR}/scene/main/scene_tree.cpp:281)
[37] SceneTree::input_event(Ref<InputEvent> const&) ({GODOT SOURCE DIR}/scene/main/scene_tree.cpp:440)
[38] InputDefault::_parse_input_event_impl(Ref<InputEvent> const&, bool) ({GODOT SOURCE DIR}/main/input_default.cpp:491)
[39] InputDefault::flush_buffered_events() ({GODOT SOURCE DIR}/main/input_default.cpp:711)
[40] OS_X11::process_xevents() ({GODOT SOURCE DIR}/platform/x11/os_x11.cpp:2985)
[41] OS_X11::run() ({GODOT SOURCE DIR}/platform/x11/os_x11.cpp:3718)
[42] {GODOT SOURCE DIR}/bin/godot.x11.tools.64.llvm(main+0x16f) [0x2e51c1f] ({GODOT SOURCE DIR}/platform/x11/godot_x11.cpp:55)
[43] /lib/x86_64-linux-gnu/libc.so.6(+0x2dfd0) [0x7f94395b8fd0] (??:0)
[44] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x7d) [0x7f94395b907d] (??:0)
[45] {GODOT SOURCE DIR}/bin/godot.x11.tools.64.llvm(_start+0x25) [0x2e519e5] (??:?)
-- END OF BACKTRACE --
================================================================

Steps to reproduce

Minimal reproduction project

gridmap_gltf_crash.zip

akien-mga commented 2 years ago

CC @godotengine/import