|
@@ -73,28 +73,28 @@ using namespace Assimp;
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
// Constructor to be privately used by Importer
|
|
|
OptimizeGraphProcess::OptimizeGraphProcess()
|
|
|
- : mScene()
|
|
|
- , nodes_in()
|
|
|
- , nodes_out()
|
|
|
- , count_merged()
|
|
|
-{}
|
|
|
+: mScene()
|
|
|
+, nodes_in()
|
|
|
+, nodes_out()
|
|
|
+, count_merged() {
|
|
|
+ // empty
|
|
|
+}
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
// Destructor, private as well
|
|
|
-OptimizeGraphProcess::~OptimizeGraphProcess()
|
|
|
-{}
|
|
|
+OptimizeGraphProcess::~OptimizeGraphProcess() {
|
|
|
+ // empty
|
|
|
+}
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
// Returns whether the processing step is present in the given flag field.
|
|
|
-bool OptimizeGraphProcess::IsActive( unsigned int pFlags) const
|
|
|
-{
|
|
|
+bool OptimizeGraphProcess::IsActive( unsigned int pFlags) const {
|
|
|
return (0 != (pFlags & aiProcess_OptimizeGraph));
|
|
|
}
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
-// Setup properties for the postprocessing step
|
|
|
-void OptimizeGraphProcess::SetupProperties(const Importer* pImp)
|
|
|
-{
|
|
|
+// Setup properties for the post-processing step
|
|
|
+void OptimizeGraphProcess::SetupProperties(const Importer* pImp) {
|
|
|
// Get value of AI_CONFIG_PP_OG_EXCLUDE_LIST
|
|
|
std::string tmp = pImp->GetPropertyString(AI_CONFIG_PP_OG_EXCLUDE_LIST,"");
|
|
|
AddLockedNodeList(tmp);
|
|
@@ -102,16 +102,14 @@ void OptimizeGraphProcess::SetupProperties(const Importer* pImp)
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
// Collect new children
|
|
|
-void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list<aiNode*>& nodes)
|
|
|
-{
|
|
|
+void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list<aiNode*>& nodes) {
|
|
|
nodes_in += nd->mNumChildren;
|
|
|
|
|
|
// Process children
|
|
|
std::list<aiNode*> child_nodes;
|
|
|
for (unsigned int i = 0; i < nd->mNumChildren; ++i) {
|
|
|
-
|
|
|
CollectNewChildren(nd->mChildren[i],child_nodes);
|
|
|
- nd->mChildren[i] = NULL;
|
|
|
+ nd->mChildren[i] = nullptr;
|
|
|
}
|
|
|
|
|
|
// Check whether we need this node; if not we can replace it by our own children (warn, danger of incest).
|
|
@@ -130,13 +128,11 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list<aiNode*>& no
|
|
|
|
|
|
if (nd->mNumMeshes || !child_nodes.empty()) {
|
|
|
nodes.push_back(nd);
|
|
|
- }
|
|
|
- else {
|
|
|
+ } else {
|
|
|
delete nd; /* bye, node */
|
|
|
return;
|
|
|
}
|
|
|
- }
|
|
|
- else {
|
|
|
+ } else {
|
|
|
|
|
|
// Retain our current position in the hierarchy
|
|
|
nodes.push_back(nd);
|
|
@@ -160,14 +156,11 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list<aiNode*>& no
|
|
|
}
|
|
|
}
|
|
|
if (n == child->mNumMeshes) {
|
|
|
-
|
|
|
if (!join_master) {
|
|
|
join_master = child;
|
|
|
inv = join_master->mTransformation;
|
|
|
inv.Inverse();
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
+ } else {
|
|
|
child->mTransformation = inv * child->mTransformation ;
|
|
|
|
|
|
join.push_back(child);
|
|
@@ -227,9 +220,10 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list<aiNode*>& no
|
|
|
|
|
|
delete[] nd->mChildren;
|
|
|
|
|
|
- if (!child_nodes.empty())
|
|
|
+ if (!child_nodes.empty()) {
|
|
|
nd->mChildren = new aiNode*[child_nodes.size()];
|
|
|
- else nd->mChildren = NULL;
|
|
|
+ }
|
|
|
+ else nd->mChildren = nullptr;
|
|
|
}
|
|
|
|
|
|
nd->mNumChildren = static_cast<unsigned int>(child_nodes.size());
|
|
@@ -246,9 +240,8 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list<aiNode*>& no
|
|
|
}
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
-// Execute the postprocessing step on the given scene
|
|
|
-void OptimizeGraphProcess::Execute( aiScene* pScene)
|
|
|
-{
|
|
|
+// Execute the post-processing step on the given scene
|
|
|
+void OptimizeGraphProcess::Execute( aiScene* pScene) {
|
|
|
DefaultLogger::get()->debug("OptimizeGraphProcess begin");
|
|
|
nodes_in = nodes_out = count_merged = 0;
|
|
|
mScene = pScene;
|
|
@@ -268,7 +261,6 @@ void OptimizeGraphProcess::Execute( aiScene* pScene)
|
|
|
|
|
|
for (unsigned int i = 0; i < pScene->mNumAnimations; ++i) {
|
|
|
for (unsigned int a = 0; a < pScene->mAnimations[i]->mNumChannels; ++a) {
|
|
|
-
|
|
|
aiNodeAnim* anim = pScene->mAnimations[i]->mChannels[a];
|
|
|
locked.insert(AI_OG_GETKEY(anim->mNodeName));
|
|
|
}
|
|
@@ -349,7 +341,7 @@ void OptimizeGraphProcess::Execute( aiScene* pScene)
|
|
|
}
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
-// Buidl a LUT of all instanced meshes
|
|
|
+// Build a LUT of all instanced meshes
|
|
|
void OptimizeGraphProcess::FindInstancedMeshes (aiNode* pNode)
|
|
|
{
|
|
|
for (unsigned int i = 0; i < pNode->mNumMeshes;++i) {
|