Respect 'mesh compression' editor import option in Assimp (ie. FBX) and glTF importers
This commit is contained in:
parent
7ccb146a55
commit
8a024ca294
|
@ -951,6 +951,9 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) {
|
||||||
if (!state.json.has("meshes"))
|
if (!state.json.has("meshes"))
|
||||||
return OK;
|
return OK;
|
||||||
|
|
||||||
|
bool compress_vert_data = state.import_flags & IMPORT_USE_COMPRESSION;
|
||||||
|
uint32_t mesh_flags = compress_vert_data ? Mesh::ARRAY_COMPRESS_DEFAULT : 0;
|
||||||
|
|
||||||
Array meshes = state.json["meshes"];
|
Array meshes = state.json["meshes"];
|
||||||
for (GLTFMeshIndex i = 0; i < meshes.size(); i++) {
|
for (GLTFMeshIndex i = 0; i < meshes.size(); i++) {
|
||||||
|
|
||||||
|
@ -1207,7 +1210,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//just add it
|
//just add it
|
||||||
mesh.mesh->add_surface_from_arrays(primitive, array, morphs);
|
mesh.mesh->add_surface_from_arrays(primitive, array, morphs, mesh_flags);
|
||||||
|
|
||||||
if (p.has("material")) {
|
if (p.has("material")) {
|
||||||
const int material = p["material"];
|
const int material = p["material"];
|
||||||
|
@ -2987,6 +2990,7 @@ Node *EditorSceneImporterGLTF::import_scene(const String &p_path, uint32_t p_fla
|
||||||
|
|
||||||
String version = asset["version"];
|
String version = asset["version"];
|
||||||
|
|
||||||
|
state.import_flags = p_flags;
|
||||||
state.major_version = version.get_slice(".", 0).to_int();
|
state.major_version = version.get_slice(".", 0).to_int();
|
||||||
state.minor_version = version.get_slice(".", 1).to_int();
|
state.minor_version = version.get_slice(".", 1).to_int();
|
||||||
state.use_named_skin_binds = p_flags & IMPORT_USE_NAMED_SKIN_BINDS;
|
state.use_named_skin_binds = p_flags & IMPORT_USE_NAMED_SKIN_BINDS;
|
||||||
|
|
|
@ -325,6 +325,9 @@ class EditorSceneImporterGLTF : public EditorSceneImporter {
|
||||||
|
|
||||||
Map<GLTFNodeIndex, Node *> scene_nodes;
|
Map<GLTFNodeIndex, Node *> scene_nodes;
|
||||||
|
|
||||||
|
// EditorSceneImporter::ImportFlags
|
||||||
|
uint32_t import_flags;
|
||||||
|
|
||||||
~GLTFState() {
|
~GLTFState() {
|
||||||
for (int i = 0; i < nodes.size(); i++) {
|
for (int i = 0; i < nodes.size(); i++) {
|
||||||
memdelete(nodes[i]);
|
memdelete(nodes[i]);
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "scene/resources/shape.h"
|
#include "scene/resources/shape.h"
|
||||||
|
|
||||||
class Material;
|
class Material;
|
||||||
|
|
||||||
class EditorSceneImporter : public Reference {
|
class EditorSceneImporter : public Reference {
|
||||||
|
|
||||||
GDCLASS(EditorSceneImporter, Reference);
|
GDCLASS(EditorSceneImporter, Reference);
|
||||||
|
|
|
@ -308,6 +308,7 @@ EditorSceneImporterAssimp::_generate_scene(const String &p_path, aiScene *scene,
|
||||||
state.assimp_scene = scene;
|
state.assimp_scene = scene;
|
||||||
state.max_bone_weights = p_max_bone_weights;
|
state.max_bone_weights = p_max_bone_weights;
|
||||||
state.animation_player = NULL;
|
state.animation_player = NULL;
|
||||||
|
state.import_flags = p_flags;
|
||||||
|
|
||||||
// populate light map
|
// populate light map
|
||||||
for (unsigned int l = 0; l < scene->mNumLights; l++) {
|
for (unsigned int l = 0; l < scene->mNumLights; l++) {
|
||||||
|
@ -848,6 +849,8 @@ EditorSceneImporterAssimp::_generate_mesh_from_surface_indices(ImportState &stat
|
||||||
Ref<ArrayMesh> mesh;
|
Ref<ArrayMesh> mesh;
|
||||||
mesh.instance();
|
mesh.instance();
|
||||||
bool has_uvs = false;
|
bool has_uvs = false;
|
||||||
|
bool compress_vert_data = state.import_flags & IMPORT_USE_COMPRESSION;
|
||||||
|
uint32_t mesh_flags = compress_vert_data ? Mesh::ARRAY_COMPRESS_DEFAULT : 0;
|
||||||
|
|
||||||
Map<String, uint32_t> morph_mesh_string_lookup;
|
Map<String, uint32_t> morph_mesh_string_lookup;
|
||||||
|
|
||||||
|
@ -1295,7 +1298,7 @@ EditorSceneImporterAssimp::_generate_mesh_from_surface_indices(ImportState &stat
|
||||||
|
|
||||||
morphs[j] = array_copy;
|
morphs[j] = array_copy;
|
||||||
}
|
}
|
||||||
mesh->add_surface_from_arrays(primitive, array_mesh, morphs);
|
mesh->add_surface_from_arrays(primitive, array_mesh, morphs, mesh_flags);
|
||||||
mesh->surface_set_material(i, mat);
|
mesh->surface_set_material(i, mat);
|
||||||
mesh->surface_set_name(i, AssimpUtils::get_assimp_string(ai_mesh->mName));
|
mesh->surface_set_name(i, AssimpUtils::get_assimp_string(ai_mesh->mName));
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,9 @@ struct ImportState {
|
||||||
// this means we can detect
|
// this means we can detect
|
||||||
// what bones are for other armatures
|
// what bones are for other armatures
|
||||||
List<aiBone *> bone_stack;
|
List<aiBone *> bone_stack;
|
||||||
|
|
||||||
|
// EditorSceneImporter::ImportFlags
|
||||||
|
uint32_t import_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AssimpImageData {
|
struct AssimpImageData {
|
||||||
|
|
Loading…
Reference in New Issue