Added Importer::RegisterLoader() and Importer::UnregisterLoader().
git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@105 67173fc5-114c-0410-ac8e-9d2fd5bffc1fpull/1/head
parent
9bc8e8701f
commit
cefecc1fe7
|
@ -281,6 +281,65 @@ Importer::~Importer()
|
||||||
delete mScene;
|
delete mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Empty and private copy constructor
|
||||||
|
Importer::Importer(const Importer &other)
|
||||||
|
{
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
aiReturn Importer::RegisterLoader(BaseImporter* pImp)
|
||||||
|
{
|
||||||
|
ai_assert(NULL != pImp);
|
||||||
|
|
||||||
|
// check whether we would have two loaders for the same file extension now
|
||||||
|
|
||||||
|
std::string st;
|
||||||
|
pImp->GetExtensionList(st);
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
const char* sz = ::strtok(st.c_str(),";");
|
||||||
|
while (sz)
|
||||||
|
{
|
||||||
|
if (IsExtensionSupported(std::string(sz)))
|
||||||
|
{
|
||||||
|
DefaultLogger::get()->error(std::string( "The file extension " ) + sz + " is already in use");
|
||||||
|
return AI_FAILURE;
|
||||||
|
}
|
||||||
|
sz = ::strtok(NULL,";");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// add the loader
|
||||||
|
this->mImporter.push_back(pImp);
|
||||||
|
DefaultLogger::get()->info("Registering custom importer: " + st);
|
||||||
|
return AI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
aiReturn Importer::UnregisterLoader(BaseImporter* pImp)
|
||||||
|
{
|
||||||
|
ai_assert(NULL != pImp);
|
||||||
|
|
||||||
|
for (std::vector<BaseImporter*>::iterator
|
||||||
|
it = mImporter.begin(),end = mImporter.end();
|
||||||
|
it != end;++it)
|
||||||
|
{
|
||||||
|
if (pImp == (*it))
|
||||||
|
{
|
||||||
|
mImporter.erase(it);
|
||||||
|
|
||||||
|
std::string st;
|
||||||
|
pImp->GetExtensionList(st);
|
||||||
|
DefaultLogger::get()->info("Unregistering custom importer: " + st);
|
||||||
|
return AI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DefaultLogger::get()->warn("Unable to remove importer: importer not found");
|
||||||
|
return AI_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Supplies a custom IO handler to the importer to open and access files.
|
// Supplies a custom IO handler to the importer to open and access files.
|
||||||
void Importer::SetIOHandler( IOSystem* pIOHandler)
|
void Importer::SetIOHandler( IOSystem* pIOHandler)
|
||||||
|
@ -299,16 +358,19 @@ void Importer::SetIOHandler( IOSystem* pIOHandler)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
IOSystem* Importer::GetIOHandler()
|
IOSystem* Importer::GetIOHandler()
|
||||||
{
|
{
|
||||||
return mIOHandler;
|
return mIOHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
bool Importer::IsDefaultIOHandler()
|
bool Importer::IsDefaultIOHandler()
|
||||||
{
|
{
|
||||||
return mIsDefaultHandler;
|
return mIsDefaultHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Validate post process step flags
|
// Validate post process step flags
|
||||||
|
@ -325,6 +387,7 @@ bool ValidateFlags(unsigned int pFlags)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif // ! DEBUG
|
#endif // ! DEBUG
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Reads the given file and returns its contents if successful.
|
// Reads the given file and returns its contents if successful.
|
||||||
const aiScene* Importer::ReadFile( const std::string& pFile, unsigned int pFlags)
|
const aiScene* Importer::ReadFile( const std::string& pFile, unsigned int pFlags)
|
||||||
|
@ -383,6 +446,8 @@ const aiScene* Importer::ReadFile( const std::string& pFile, unsigned int pFlags
|
||||||
// TODO: temporary solution, clean up later
|
// TODO: temporary solution, clean up later
|
||||||
mScene->mFlags |= 0x80000000;
|
mScene->mFlags |= 0x80000000;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (bExtraVerbose)DefaultLogger::get()->warn("Not a debug build, ignoring extra verbose setting");
|
||||||
#endif // ! DEBUG
|
#endif // ! DEBUG
|
||||||
for( unsigned int a = 0; a < mPostProcessingSteps.size(); a++)
|
for( unsigned int a = 0; a < mPostProcessingSteps.size(); a++)
|
||||||
{
|
{
|
||||||
|
@ -420,13 +485,6 @@ const aiScene* Importer::ReadFile( const std::string& pFile, unsigned int pFlags
|
||||||
return mScene;
|
return mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
// Empty and private copy constructor
|
|
||||||
Importer::Importer(const Importer &other)
|
|
||||||
{
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Helper function to check whether an extension is supported by ASSIMP
|
// Helper function to check whether an extension is supported by ASSIMP
|
||||||
bool Importer::IsExtensionSupported(const std::string& szExtension)
|
bool Importer::IsExtensionSupported(const std::string& szExtension)
|
||||||
|
@ -440,6 +498,7 @@ bool Importer::IsExtensionSupported(const std::string& szExtension)
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Helper function to build a list of all file extensions supported by ASSIMP
|
// Helper function to build a list of all file extensions supported by ASSIMP
|
||||||
void Importer::GetExtensionList(std::string& szOut)
|
void Importer::GetExtensionList(std::string& szOut)
|
||||||
|
@ -457,6 +516,7 @@ void Importer::GetExtensionList(std::string& szOut)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Set a configuration property
|
// Set a configuration property
|
||||||
int Importer::SetProperty(const char* szName, int iValue)
|
int Importer::SetProperty(const char* szName, int iValue)
|
||||||
|
@ -482,6 +542,7 @@ int Importer::SetProperty(const char* szName, int iValue)
|
||||||
me.value = iValue;
|
me.value = iValue;
|
||||||
return AI_PROPERTY_WAS_NOT_EXISTING;
|
return AI_PROPERTY_WAS_NOT_EXISTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get a configuration property
|
// Get a configuration property
|
||||||
int Importer::GetProperty(const char* szName,
|
int Importer::GetProperty(const char* szName,
|
||||||
|
@ -510,6 +571,7 @@ void AddNodeWeight(unsigned int& iScene,const aiNode* pcNode)
|
||||||
for (unsigned int i = 0; i < pcNode->mNumChildren;++i)
|
for (unsigned int i = 0; i < pcNode->mNumChildren;++i)
|
||||||
AddNodeWeight(iScene,pcNode->mChildren[i]);
|
AddNodeWeight(iScene,pcNode->mChildren[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Get the memory requirements of the scene
|
// Get the memory requirements of the scene
|
||||||
void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
||||||
|
|
|
@ -12,6 +12,7 @@ void Assimp::aiAssert (bool expression, const std::string &message, unsigned int
|
||||||
{
|
{
|
||||||
if (!expression)
|
if (!expression)
|
||||||
{
|
{
|
||||||
|
// FIX (Aramis): changed std::cerr to std::cout that the message appears in VS' output window ...
|
||||||
std::cout << "File :" << file << ", line " << uiLine << " : " << message << std::endl;
|
std::cout << "File :" << file << ", line " << uiLine << " : " << message << std::endl;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
|
@ -55,6 +55,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "aiTypes.h"
|
#include "aiTypes.h"
|
||||||
#include "aiConfig.h"
|
#include "aiConfig.h"
|
||||||
|
|
||||||
|
// internal ASSIMP headers - for plugin development
|
||||||
|
#include "./../code/BaseImporter.h"
|
||||||
|
#include "./../code/BaseProcess.h"
|
||||||
|
|
||||||
#define AI_PROPERTY_WAS_NOT_EXISTING 0xffffffff
|
#define AI_PROPERTY_WAS_NOT_EXISTING 0xffffffff
|
||||||
|
|
||||||
|
@ -132,11 +135,58 @@ public:
|
||||||
~Importer();
|
~Importer();
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Registers a new loader.
|
||||||
|
*
|
||||||
|
* @param pImp Importer to be added. The Importer instance takes
|
||||||
|
* ownership of the pointer, so it will be automatically deleted
|
||||||
|
* with the Importer instance.
|
||||||
|
* @return AI_SUCCESS if the loader has been added. The registration
|
||||||
|
* fails if there is already a loader for a specific file extension.
|
||||||
|
*/
|
||||||
|
aiReturn RegisterLoader(BaseImporter* pImp);
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Unregisters a loader.
|
||||||
|
*
|
||||||
|
* @param pImp Importer to be unregistered.
|
||||||
|
* @return AI_SUCCESS if the loader has been removed. The function
|
||||||
|
* fails if the loader is currently in use (this could happen
|
||||||
|
* if the #Importer instance is used by more than one thread) or
|
||||||
|
* if it has not yet been registered.
|
||||||
|
*/
|
||||||
|
aiReturn UnregisterLoader(BaseImporter* pImp);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Registers a new post-process step.
|
||||||
|
*
|
||||||
|
* @param pImp Post-process step to be added. The Importer instance
|
||||||
|
* takes ownership of the pointer, so it will be automatically
|
||||||
|
* deleted with the Importer instance.
|
||||||
|
* @return AI_SUCCESS if the step has been added.
|
||||||
|
*/
|
||||||
|
aiReturn RegisterPPStep(BaseProcess* pImp);
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Unregisters a post-process step.
|
||||||
|
*
|
||||||
|
* @param pImp Step to be unregistered.
|
||||||
|
* @return AI_SUCCESS if the step has been removed. The function
|
||||||
|
* fails if the step is currently in use (this could happen
|
||||||
|
* if the #Importer instance is used by more than one thread) or
|
||||||
|
* if it has not yet been registered.
|
||||||
|
*/
|
||||||
|
aiReturn UnregisterPPStep(BaseProcess* pImp);
|
||||||
|
#endif
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Set a configuration property.
|
/** Set a configuration property.
|
||||||
* @param szName Name of the property. All supported properties
|
* @param szName Name of the property. All supported properties
|
||||||
* are defined in the aiConfig.g header (the constants start
|
* are defined in the aiConfig.g header (the constants share the
|
||||||
* with AI_CONFIG_XXX).
|
* prefix AI_CONFIG_XXX).
|
||||||
* @param iValue New value of the property
|
* @param iValue New value of the property
|
||||||
* @return Old value of the property or AI_PROPERTY_WAS_NOT_EXISTING
|
* @return Old value of the property or AI_PROPERTY_WAS_NOT_EXISTING
|
||||||
* if the property has not yet been set.
|
* if the property has not yet been set.
|
||||||
|
|
Loading…
Reference in New Issue