Browse Source

Granulate file loading too

Gargaj 11 years ago
parent
commit
dbc553343c
2 changed files with 18 additions and 5 deletions
  1. 2 2
      code/Importer.cpp
  2. 16 3
      include/assimp/ProgressHandler.hpp

+ 2 - 2
code/Importer.cpp

@@ -642,14 +642,14 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags)
 
 		// Dispatch the reading to the worker class for this format
 		DefaultLogger::get()->info("Found a matching importer for this file format");
-		pimpl->mProgressHandler->Update();
+		pimpl->mProgressHandler->UpdateFileRead( 0, 1 );
 
 		if (profiler) {
 			profiler->BeginRegion("import");
 		}
 
 		pimpl->mScene = imp->ReadFile( this, pFile, pimpl->mIOHandler);
-		pimpl->mProgressHandler->Update();
+		pimpl->mProgressHandler->UpdateFileRead( 1, 1 );
 
 		if (profiler) {
 			profiler->EndRegion("import");

+ 16 - 3
include/assimp/ProgressHandler.hpp

@@ -81,12 +81,25 @@ public:
 	 *   all needed cleanup tasks prior to returning control to the
 	 *   caller). If the loading is aborted, #Importer::ReadFile()
 	 *   returns always NULL.
-	 *
-	 *  @note Currently, percentage is always -1.f because there is 
-	 *   no reliable way to compute it.
 	 *   */
 	virtual bool Update(float percentage = -1.f) = 0;
 
+	// -------------------------------------------------------------------
+	/** @brief Progress callback for file loading steps
+	 *  @param numberOfSteps The number of total post-processing
+	 *   steps
+	 *  @param currentStep The index of the current post-processing
+	 *   step that will run, or equal to numberOfSteps if all of
+	 *   them has finished. This number is always strictly monotone
+	 *   increasing, although not necessarily linearly.
+	 *
+	 *  @note This is currently only used at the start and the end
+	 *   of the file parsing.
+	 *   */
+	virtual void UpdateFileRead(int currentStep /*= 0*/, int numberOfSteps /*= 0*/) {
+		float f = currentStep / (float)numberOfSteps;
+		Update( f * 0.5f );
+	};
 
 	// -------------------------------------------------------------------
 	/** @brief Progress callback for post-processing steps