From dbc553343ce52211aab14227929fe5202cf2b2e9 Mon Sep 17 00:00:00 2001 From: Gargaj Date: Tue, 5 Aug 2014 00:05:18 +0200 Subject: [PATCH] Granulate file loading too --- code/Importer.cpp | 4 ++-- include/assimp/ProgressHandler.hpp | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/code/Importer.cpp b/code/Importer.cpp index 50ce016d5..49cfeffa6 100644 --- a/code/Importer.cpp +++ b/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"); diff --git a/include/assimp/ProgressHandler.hpp b/include/assimp/ProgressHandler.hpp index 7a4cec84f..8aaa99276 100644 --- a/include/assimp/ProgressHandler.hpp +++ b/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