Make GLTF not depend on CSG or GridMap

This commit is contained in:
Aaron Franke 2021-01-22 16:52:32 -05:00
parent d39f6386ce
commit abd06567a7
No known key found for this signature in database
GPG Key ID: 40A1750B977E56BF
2 changed files with 17 additions and 0 deletions

View File

@ -57,8 +57,12 @@
#include "core/version_hash.gen.h" #include "core/version_hash.gen.h"
#include "drivers/png/png_driver_common.h" #include "drivers/png/png_driver_common.h"
#include "editor/import/resource_importer_scene.h" #include "editor/import/resource_importer_scene.h"
#ifdef MODULE_CSG_ENABLED
#include "modules/csg/csg_shape.h" #include "modules/csg/csg_shape.h"
#endif // MODULE_CSG_ENABLED
#ifdef MODULE_GRIDMAP_ENABLED
#include "modules/gridmap/grid_map.h" #include "modules/gridmap/grid_map.h"
#endif // MODULE_GRIDMAP_ENABLED
#include "modules/regex/regex.h" #include "modules/regex/regex.h"
#include "scene/2d/node_2d.h" #include "scene/2d/node_2d.h"
#include "scene/3d/bone_attachment_3d.h" #include "scene/3d/bone_attachment_3d.h"
@ -5124,12 +5128,16 @@ void GLTFDocument::_convert_scene_node(Ref<GLTFState> state, Node *p_current, No
return; return;
} else if (cast_to<MultiMeshInstance3D>(p_current)) { } else if (cast_to<MultiMeshInstance3D>(p_current)) {
_convert_mult_mesh_instance_to_gltf(p_current, p_gltf_parent, p_gltf_root, gltf_node, state, p_root); _convert_mult_mesh_instance_to_gltf(p_current, p_gltf_parent, p_gltf_root, gltf_node, state, p_root);
#ifdef MODULE_CSG_ENABLED
} else if (cast_to<CSGShape3D>(p_current)) { } else if (cast_to<CSGShape3D>(p_current)) {
if (p_current->get_parent() && cast_to<CSGShape3D>(p_current)->is_root_shape()) { if (p_current->get_parent() && cast_to<CSGShape3D>(p_current)->is_root_shape()) {
_convert_csg_shape_to_gltf(p_current, p_gltf_parent, gltf_node, state); _convert_csg_shape_to_gltf(p_current, p_gltf_parent, gltf_node, state);
} }
#endif // MODULE_CSG_ENABLED
#ifdef MODULE_GRIDMAP_ENABLED
} else if (cast_to<GridMap>(p_current)) { } else if (cast_to<GridMap>(p_current)) {
_convert_grid_map_to_gltf(p_current, p_gltf_parent, p_gltf_root, gltf_node, state, p_root); _convert_grid_map_to_gltf(p_current, p_gltf_parent, p_gltf_root, gltf_node, state, p_root);
#endif // MODULE_GRIDMAP_ENABLED
} else if (cast_to<Camera3D>(p_current)) { } else if (cast_to<Camera3D>(p_current)) {
Camera3D *camera = Object::cast_to<Camera3D>(p_current); Camera3D *camera = Object::cast_to<Camera3D>(p_current);
_convert_camera_to_gltf(camera, state, spatial, gltf_node); _convert_camera_to_gltf(camera, state, spatial, gltf_node);
@ -5154,6 +5162,7 @@ void GLTFDocument::_convert_scene_node(Ref<GLTFState> state, Node *p_current, No
} }
} }
#ifdef MODULE_CSG_ENABLED
void GLTFDocument::_convert_csg_shape_to_gltf(Node *p_current, GLTFNodeIndex p_gltf_parent, Ref<GLTFNode> gltf_node, Ref<GLTFState> state) { void GLTFDocument::_convert_csg_shape_to_gltf(Node *p_current, GLTFNodeIndex p_gltf_parent, Ref<GLTFNode> gltf_node, Ref<GLTFState> state) {
CSGShape3D *csg = Object::cast_to<CSGShape3D>(p_current); CSGShape3D *csg = Object::cast_to<CSGShape3D>(p_current);
csg->call("_update_shape"); csg->call("_update_shape");
@ -5180,6 +5189,7 @@ void GLTFDocument::_convert_csg_shape_to_gltf(Node *p_current, GLTFNodeIndex p_g
gltf_node->xform = csg->get_meshes()[0]; gltf_node->xform = csg->get_meshes()[0];
gltf_node->set_name(_gen_unique_name(state, csg->get_name())); gltf_node->set_name(_gen_unique_name(state, csg->get_name()));
} }
#endif // MODULE_CSG_ENABLED
void GLTFDocument::_create_gltf_node(Ref<GLTFState> state, Node *p_scene_parent, GLTFNodeIndex current_node_i, void GLTFDocument::_create_gltf_node(Ref<GLTFState> state, Node *p_scene_parent, GLTFNodeIndex current_node_i,
GLTFNodeIndex p_parent_node_index, GLTFNodeIndex p_root_gltf_node, Ref<GLTFNode> gltf_node) { GLTFNodeIndex p_parent_node_index, GLTFNodeIndex p_root_gltf_node, Ref<GLTFNode> gltf_node) {
@ -5229,6 +5239,7 @@ void GLTFDocument::_convert_light_to_gltf(Light3D *light, Ref<GLTFState> state,
} }
} }
#ifdef MODULE_GRIDMAP_ENABLED
void GLTFDocument::_convert_grid_map_to_gltf(Node *p_scene_parent, const GLTFNodeIndex &p_parent_node_index, const GLTFNodeIndex &p_root_node_index, Ref<GLTFNode> gltf_node, Ref<GLTFState> state, Node *p_root_node) { void GLTFDocument::_convert_grid_map_to_gltf(Node *p_scene_parent, const GLTFNodeIndex &p_parent_node_index, const GLTFNodeIndex &p_root_node_index, Ref<GLTFNode> gltf_node, Ref<GLTFState> state, Node *p_root_node) {
GridMap *grid_map = Object::cast_to<GridMap>(p_scene_parent); GridMap *grid_map = Object::cast_to<GridMap>(p_scene_parent);
ERR_FAIL_COND(!grid_map); ERR_FAIL_COND(!grid_map);
@ -5260,6 +5271,7 @@ void GLTFDocument::_convert_grid_map_to_gltf(Node *p_scene_parent, const GLTFNod
new_gltf_node->set_name(_gen_unique_name(state, grid_map->get_mesh_library()->get_item_name(cell))); new_gltf_node->set_name(_gen_unique_name(state, grid_map->get_mesh_library()->get_item_name(cell)));
} }
} }
#endif // MODULE_GRIDMAP_ENABLED
void GLTFDocument::_convert_mult_mesh_instance_to_gltf(Node *p_scene_parent, const GLTFNodeIndex &p_parent_node_index, const GLTFNodeIndex &p_root_node_index, Ref<GLTFNode> gltf_node, Ref<GLTFState> state, Node *p_root_node) { void GLTFDocument::_convert_mult_mesh_instance_to_gltf(Node *p_scene_parent, const GLTFNodeIndex &p_parent_node_index, const GLTFNodeIndex &p_root_node_index, Ref<GLTFNode> gltf_node, Ref<GLTFState> state, Node *p_root_node) {
MultiMeshInstance3D *multi_mesh_instance = Object::cast_to<MultiMeshInstance3D>(p_scene_parent); MultiMeshInstance3D *multi_mesh_instance = Object::cast_to<MultiMeshInstance3D>(p_scene_parent);

View File

@ -34,6 +34,7 @@
#include "editor/import/resource_importer_scene.h" #include "editor/import/resource_importer_scene.h"
#include "editor/import/scene_importer_mesh_node_3d.h" #include "editor/import/scene_importer_mesh_node_3d.h"
#include "gltf_animation.h" #include "gltf_animation.h"
#include "modules/modules_enabled.gen.h"
#include "scene/2d/node_2d.h" #include "scene/2d/node_2d.h"
#include "scene/3d/bone_attachment_3d.h" #include "scene/3d/bone_attachment_3d.h"
#include "scene/3d/light_3d.h" #include "scene/3d/light_3d.h"
@ -377,7 +378,9 @@ public:
const GLTFNodeIndex p_gltf_current, const GLTFNodeIndex p_gltf_current,
const GLTFNodeIndex p_gltf_root); const GLTFNodeIndex p_gltf_root);
#ifdef MODULE_CSG_ENABLED
void _convert_csg_shape_to_gltf(Node *p_current, GLTFNodeIndex p_gltf_parent, Ref<GLTFNode> gltf_node, Ref<GLTFState> state); void _convert_csg_shape_to_gltf(Node *p_current, GLTFNodeIndex p_gltf_parent, Ref<GLTFNode> gltf_node, Ref<GLTFState> state);
#endif // MODULE_CSG_ENABLED
void _create_gltf_node(Ref<GLTFState> state, void _create_gltf_node(Ref<GLTFState> state,
Node *p_scene_parent, Node *p_scene_parent,
@ -395,12 +398,14 @@ public:
void _convert_camera_to_gltf(Camera3D *camera, Ref<GLTFState> state, void _convert_camera_to_gltf(Camera3D *camera, Ref<GLTFState> state,
Node3D *spatial, Node3D *spatial,
Ref<GLTFNode> gltf_node); Ref<GLTFNode> gltf_node);
#ifdef MODULE_GRIDMAP_ENABLED
void _convert_grid_map_to_gltf( void _convert_grid_map_to_gltf(
Node *p_scene_parent, Node *p_scene_parent,
const GLTFNodeIndex &p_parent_node_index, const GLTFNodeIndex &p_parent_node_index,
const GLTFNodeIndex &p_root_node_index, const GLTFNodeIndex &p_root_node_index,
Ref<GLTFNode> gltf_node, Ref<GLTFState> state, Ref<GLTFNode> gltf_node, Ref<GLTFState> state,
Node *p_root_node); Node *p_root_node);
#endif // MODULE_GRIDMAP_ENABLED
void _convert_mult_mesh_instance_to_gltf( void _convert_mult_mesh_instance_to_gltf(
Node *p_scene_parent, Node *p_scene_parent,
const GLTFNodeIndex &p_parent_node_index, const GLTFNodeIndex &p_parent_node_index,