MCPcopy Create free account
hub / github.com/KTStephano/StratusGFX / LoadModel_

Method LoadModel_

Source/Engine/StratusResourceManager.cpp:646–740  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

644 }
645
646 EntityPtr ResourceManager::LoadModel_(const std::string& name, const ColorSpace& cspace, const bool optimizeGraph, RenderFaceCulling defaultCullMode) {
647 STRATUS_LOG << "Attempting to load model: " << name << std::endl;
648
649 Assimp::Importer importer;
650 //importer.SetPropertyInteger(AI_CONFIG_PP_SLM_VERTEX_LIMIT, 16000);
651 importer.SetPropertyInteger(AI_CONFIG_PP_SLM_TRIANGLE_LIMIT, 4096);
652
653 unsigned int pflags = aiProcess_Triangulate |
654 aiProcess_JoinIdenticalVertices |
655 aiProcess_SortByPType |
656 aiProcess_GenNormals |
657 //aiProcess_ValidateDataStructure |
658 aiProcess_RemoveRedundantMaterials |
659 aiProcess_SortByPType |
660 //aiProcess_GenSmoothNormals |
661 aiProcess_FlipUVs |
662 aiProcess_GenUVCoords |
663 aiProcess_CalcTangentSpace |
664 aiProcess_SplitLargeMeshes |
665 aiProcess_ImproveCacheLocality |
666 aiProcess_OptimizeMeshes |
667 //aiProcess_OptimizeGraph |
668 //aiProcess_FixInfacingNormals |
669 aiProcess_FindDegenerates |
670 aiProcess_FindInvalidData |
671 aiProcess_FindInstances;
672
673 if (optimizeGraph) {
674 pflags |= aiProcess_OptimizeGraph;
675 }
676
677 //const aiScene *scene = importer.ReadFile(filename, aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_CalcTangentSpace | aiProcess_GenNormals | aiProcess_GenUVCoords);
678 //const aiScene *scene = importer.ReadFile(filename, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs | aiProcess_CalcTangentSpace | aiProcess_OptimizeMeshes);
679 const aiScene *scene = importer.ReadFile(name, pflags);
680
681 if(!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) {
682 STRATUS_ERROR << "Error loading model: " << name << std::endl << importer.GetErrorString() << std::endl;
683 return nullptr;
684 }
685
686 // Create all scene materials
687 for (uint32_t i = 0; i < scene->mNumMaterials; ++i) {
688 const std::string materialName = name + "#" + std::to_string(i);
689 auto material = INSTANCE(MaterialManager)->CreateMaterial(materialName);
690 }
691
692 EntityPtr e = CreateTransformEntity();
693 std::vector<MeshToProcess_> meshes;
694 const std::string extension = name.substr(name.find_last_of('.') + 1, name.size());
695 const std::string directory = name.substr(0, name.find_last_of('/'));
696 ProcessNode(scene->mRootNode, scene, e, aiMatrix4x4(), name, directory, extension, defaultCullMode, cspace, meshes);
697
698 //for (auto& mesh : meshes) {
699 // ProcessMesh(mesh, scene, directory, extension, defaultCullMode, cspace);
700 //}
701
702 std::vector<Async<void>> waiting;
703 // There are cases where the number of meshes to process is less than the total available threads,

Callers

nothing calls this directly

Calls 6

CreateTransformEntityFunction · 0.85
ProcessNodeFunction · 0.85
ProcessMeshFunction · 0.85
CreateMaterialMethod · 0.80
SizeMethod · 0.45
CopyMethod · 0.45

Tested by

no test coverage detected