|
|
@@ -68,9 +68,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
#if (!defined AI_BUILD_NO_MD3_IMPORTER)
|
|
|
# include "MD3Loader.h"
|
|
|
#endif
|
|
|
-#if (!defined AI_BUILD_NO_MD4_IMPORTER)
|
|
|
-# include "MD4Loader.h"
|
|
|
-#endif
|
|
|
#if (!defined AI_BUILD_NO_MDL_IMPORTER)
|
|
|
# include "MDLLoader.h"
|
|
|
#endif
|
|
|
@@ -92,6 +89,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
#if (!defined AI_BUILD_NO_SMD_IMPORTER)
|
|
|
# include "SMDLoader.h"
|
|
|
#endif
|
|
|
+#if (!defined AI_BUILD_NO_MDR_IMPORTER)
|
|
|
+# include "MDRLoader.h"
|
|
|
+#endif
|
|
|
+#if (!defined AI_BUILD_NO_MDC_IMPORTER)
|
|
|
+# include "MDCLoader.h"
|
|
|
+#endif
|
|
|
+#if (!defined AI_BUILD_NO_MD5_IMPORTER)
|
|
|
+# include "MD5Loader.h"
|
|
|
+#endif
|
|
|
#if (!defined AI_BUILD_NO_MD5_IMPORTER)
|
|
|
# include "MD5Loader.h"
|
|
|
#endif
|
|
|
@@ -102,6 +108,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
# include "LWOLoader.h"
|
|
|
#endif
|
|
|
|
|
|
+
|
|
|
// PostProcess-Steps
|
|
|
#if (!defined AI_BUILD_NO_CALCTANGENTS_PROCESS)
|
|
|
# include "CalcTangentsProcess.h"
|
|
|
@@ -139,6 +146,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
#if (!defined AI_BUILD_NO_IMPROVECACHELOCALITY_PROCESS)
|
|
|
# include "ImproveCacheLocality.h"
|
|
|
#endif
|
|
|
+#if (!defined AI_BUILD_NO_FIXINFACINGNORMALS_PROCESS)
|
|
|
+# include "FixNormalsStep.h"
|
|
|
+#endif
|
|
|
#if (!defined AI_BUILD_NO_REMOVE_REDUNDANTMATERIALS_PROCESS)
|
|
|
# include "RemoveRedundantMaterials.h"
|
|
|
#endif
|
|
|
@@ -180,9 +190,6 @@ Importer::Importer() :
|
|
|
#if (!defined AI_BUILD_NO_MDL_IMPORTER)
|
|
|
mImporter.push_back( new MDLImporter());
|
|
|
#endif
|
|
|
-#if (!defined AI_BUILD_NO_MD4_IMPORTER)
|
|
|
- mImporter.push_back( new MD4Importer());
|
|
|
-#endif
|
|
|
#if (!defined AI_BUILD_NO_ASE_IMPORTER)
|
|
|
mImporter.push_back( new ASEImporter());
|
|
|
#endif
|
|
|
@@ -192,6 +199,12 @@ Importer::Importer() :
|
|
|
#if (!defined AI_BUILD_NO_SMD_IMPORTER)
|
|
|
mImporter.push_back( new SMDImporter());
|
|
|
#endif
|
|
|
+#if (!defined AI_BUILD_NO_MDR_IMPORTER)
|
|
|
+ mImporter.push_back( new MDRImporter());
|
|
|
+#endif
|
|
|
+#if (!defined AI_BUILD_NO_MDC_IMPORTER)
|
|
|
+ mImporter.push_back( new MDCImporter());
|
|
|
+#endif
|
|
|
#if (!defined AI_BUILD_NO_MD5_IMPORTER)
|
|
|
mImporter.push_back( new MD5Importer());
|
|
|
#endif
|
|
|
@@ -216,6 +229,9 @@ Importer::Importer() :
|
|
|
#if (!defined AI_BUILD_NO_PRETRANSFORMVERTICES_PROCESS)
|
|
|
mPostProcessingSteps.push_back( new PretransformVertices());
|
|
|
#endif
|
|
|
+#if (!defined AI_BUILD_NO_FIXINFACINGNORMALS_PROCESS)
|
|
|
+ mPostProcessingSteps.push_back( new FixInfacingNormalsProcess());
|
|
|
+#endif
|
|
|
#if (!defined AI_BUILD_NO_SPLITLARGEMESHES_PROCESS)
|
|
|
mPostProcessingSteps.push_back( new SplitLargeMeshesProcess_Triangle());
|
|
|
#endif
|
|
|
@@ -246,6 +262,21 @@ Importer::Importer() :
|
|
|
#if (!defined AI_BUILD_NO_IMPROVECACHELOCALITY_PROCESS)
|
|
|
mPostProcessingSteps.push_back( new ImproveCacheLocalityProcess());
|
|
|
#endif
|
|
|
+
|
|
|
+ // store the *this* pointer in all BaseImporter instances
|
|
|
+ for (std::vector<BaseImporter*>::iterator
|
|
|
+ i = mImporter.begin();
|
|
|
+ i != mImporter.end();++i)
|
|
|
+ {
|
|
|
+ (**i).mImporter = this;
|
|
|
+ }
|
|
|
+ // store the *this* pointer in all BaseProcess instances
|
|
|
+ for (std::vector<BaseProcess*>::iterator
|
|
|
+ i = mPostProcessingSteps.begin();
|
|
|
+ i != mPostProcessingSteps.end();++i)
|
|
|
+ {
|
|
|
+ (**i).mImporter = this;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
@@ -434,4 +465,153 @@ void Importer::GetExtensionList(std::string& szOut)
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
+// ------------------------------------------------------------------------------------------------
|
|
|
+// Set a configuration property
|
|
|
+int Importer::SetProperty(const char* szName, int iValue)
|
|
|
+{
|
|
|
+ ai_assert(NULL != szName);
|
|
|
+
|
|
|
+ // search in the list ...
|
|
|
+ for (std::vector<IntPropertyInfo>::iterator
|
|
|
+ i = this->mIntProperties.begin();
|
|
|
+ i != this->mIntProperties.end();++i)
|
|
|
+ {
|
|
|
+ if (0 == ::strcmp( (*i).name.c_str(), szName ))
|
|
|
+ {
|
|
|
+ int iOld = (*i).value;
|
|
|
+ (*i).value = iValue;
|
|
|
+ return iOld;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // the property is not yet in the list ...
|
|
|
+ this->mIntProperties.push_back( IntPropertyInfo() );
|
|
|
+ IntPropertyInfo& me = this->mIntProperties.back();
|
|
|
+ me.name = std::string(szName);
|
|
|
+ me.value = iValue;
|
|
|
+ return AI_PROPERTY_WAS_NOT_EXISTING;
|
|
|
+}
|
|
|
+// ------------------------------------------------------------------------------------------------
|
|
|
+// Get a configuration property
|
|
|
+int Importer::GetProperty(const char* szName,
|
|
|
+ int iErrorReturn /*= 0xffffffff*/)
|
|
|
+{
|
|
|
+ ai_assert(NULL != szName);
|
|
|
+
|
|
|
+ // search in the list ...
|
|
|
+ for (std::vector<IntPropertyInfo>::const_iterator
|
|
|
+ i = this->mIntProperties.begin();
|
|
|
+ i != this->mIntProperties.end();++i)
|
|
|
+ {
|
|
|
+ if (0 == ::strcmp( (*i).name.c_str(), szName ))
|
|
|
+ {
|
|
|
+ return (*i).value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return iErrorReturn;
|
|
|
+}
|
|
|
+// ------------------------------------------------------------------------------------------------
|
|
|
+void AddNodeWeight(unsigned int& iScene,const aiNode* pcNode)
|
|
|
+{
|
|
|
+ iScene += sizeof(aiNode);
|
|
|
+ iScene += sizeof(unsigned int) * pcNode->mNumMeshes;
|
|
|
+ iScene += sizeof(void*) * pcNode->mNumChildren;
|
|
|
+ for (unsigned int i = 0; i < pcNode->mNumChildren;++i)
|
|
|
+ AddNodeWeight(iScene,pcNode->mChildren[i]);
|
|
|
+}
|
|
|
+// ------------------------------------------------------------------------------------------------
|
|
|
+// Get the memory requirements of the scene
|
|
|
+void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
|
|
+{
|
|
|
+ in.aiMemoryInfo::aiMemoryInfo();
|
|
|
+ if (!this->mScene)return;
|
|
|
+
|
|
|
+ in.total = sizeof(aiScene);
|
|
|
+
|
|
|
+ // add all meshes
|
|
|
+ for (unsigned int i = 0; i < mScene->mNumMeshes;++i)
|
|
|
+ {
|
|
|
+ in.meshes += sizeof(aiMesh);
|
|
|
+ if (mScene->mMeshes[i]->HasPositions())
|
|
|
+ in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
|
|
+
|
|
|
+ if (mScene->mMeshes[i]->HasNormals())
|
|
|
+ in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
|
|
+
|
|
|
+ if (mScene->mMeshes[i]->HasTangentsAndBitangents())
|
|
|
+ in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices * 2;
|
|
|
+
|
|
|
+ for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS;++a)
|
|
|
+ {
|
|
|
+ if (mScene->mMeshes[i]->HasVertexColors(a))
|
|
|
+ in.meshes += sizeof(aiColor4D) * mScene->mMeshes[i]->mNumVertices;
|
|
|
+ else break;
|
|
|
+ }
|
|
|
+ for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS;++a)
|
|
|
+ {
|
|
|
+ if (mScene->mMeshes[i]->HasTextureCoords(a))
|
|
|
+ in.meshes += sizeof(aiVector3D) * mScene->mMeshes[i]->mNumVertices;
|
|
|
+ else break;
|
|
|
+ }
|
|
|
+ if (mScene->mMeshes[i]->HasBones())
|
|
|
+ {
|
|
|
+ in.meshes += sizeof(void*) * mScene->mMeshes[i]->mNumBones;
|
|
|
+ for (unsigned int p = 0; p < mScene->mMeshes[i]->mNumBones;++p)
|
|
|
+ {
|
|
|
+ in.meshes += sizeof(aiBone);
|
|
|
+ in.meshes += mScene->mMeshes[i]->mBones[p]->mNumWeights * sizeof(aiVertexWeight);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ in.meshes += (sizeof(aiFace) + 3 * sizeof(unsigned int))*mScene->mMeshes[i]->mNumFaces;
|
|
|
+ }
|
|
|
+ in.total += in.meshes;
|
|
|
+
|
|
|
+ // add all embedded textures
|
|
|
+ for (unsigned int i = 0; i < mScene->mNumTextures;++i)
|
|
|
+ {
|
|
|
+ const aiTexture* pc = mScene->mTextures[i];
|
|
|
+ in.textures += sizeof(aiTexture);
|
|
|
+ if (pc->mHeight)
|
|
|
+ {
|
|
|
+ in.textures += 4 * pc->mHeight * pc->mWidth;
|
|
|
+ }
|
|
|
+ else in.textures += pc->mWidth;
|
|
|
+ }
|
|
|
+ in.total += in.textures;
|
|
|
+
|
|
|
+ // add all animations
|
|
|
+ for (unsigned int i = 0; i < mScene->mNumAnimations;++i)
|
|
|
+ {
|
|
|
+ const aiAnimation* pc = mScene->mAnimations[i];
|
|
|
+ in.animations += sizeof(aiAnimation);
|
|
|
+
|
|
|
+ // add all bone anims
|
|
|
+ for (unsigned int a = 0; a < pc->mNumBones;++a)
|
|
|
+ {
|
|
|
+ const aiBoneAnim* pc2 = pc->mBones[i];
|
|
|
+ in.animations += sizeof(aiBoneAnim);
|
|
|
+ in.animations += pc2->mNumPositionKeys * sizeof(aiVectorKey);
|
|
|
+ in.animations += pc2->mNumScalingKeys * sizeof(aiVectorKey);
|
|
|
+ in.animations += pc2->mNumRotationKeys * sizeof(aiQuatKey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ in.total += in.animations;
|
|
|
+
|
|
|
+ // add all nodes
|
|
|
+ AddNodeWeight(in.nodes,mScene->mRootNode);
|
|
|
+ in.total += in.nodes;
|
|
|
+
|
|
|
+ // add all materials
|
|
|
+ for (unsigned int i = 0; i < mScene->mNumMaterials;++i)
|
|
|
+ {
|
|
|
+ const aiMaterial* pc = mScene->mMaterials[i];
|
|
|
+ in.materials += sizeof(aiMaterial);
|
|
|
+ in.materials += pc->mNumAllocated * sizeof(void*);
|
|
|
+ for (unsigned int a = 0; a < pc->mNumProperties;++a)
|
|
|
+ {
|
|
|
+ in.materials += pc->mProperties[a]->mDataLength;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ in.total += in.materials;
|
|
|
+ return;
|
|
|
+}
|
|
|
|