From 3730ae17974d10ac11d59dd395fd4d7c94aaa6b3 Mon Sep 17 00:00:00 2001 From: Jonne Nauha Date: Wed, 27 Jul 2011 17:53:40 +0300 Subject: [PATCH] Ogre assets: Make threaded loading work in tundra2. Restore the old ogre sanitise asset refs, for some reason the code was changed and did not anymore correspond with assetapi sanitise ref code. This resulted into threaded loading to fail to find sanitised texture refs inside material files. --- .../OgreConversionUtils.cpp | 22 ++++++++++++++----- .../OgreRenderingModule/OgreMeshAsset.cpp | 2 +- .../OgreRenderingModule/OgreSkeletonAsset.cpp | 2 +- src/Core/OgreRenderingModule/Renderer.cpp | 4 ++++ src/Core/OgreRenderingModule/TextureAsset.cpp | 2 +- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/Core/OgreRenderingModule/OgreConversionUtils.cpp b/src/Core/OgreRenderingModule/OgreConversionUtils.cpp index 89b0f5aaad..42743f181d 100644 --- a/src/Core/OgreRenderingModule/OgreConversionUtils.cpp +++ b/src/Core/OgreRenderingModule/OgreConversionUtils.cpp @@ -36,12 +36,24 @@ float3 ToCoreVector(const Ogre::Vector3 &vector) std::string SanitateAssetIdForOgre(const QString& input) { + /// \bug Why is this new $1 $2 logic needed? It breaks asynch asset loads + /// as the filename wont match the cache file entry! QString ret = input; - if (ret.contains('$')) - return ret.toStdString(); - - ret.replace(':', "$1"); - ret.replace('/', "$2"); + //if (ret.contains('$')) + // return ret.toStdString(); + + //ret.replace(':', "$1"); + //ret.replace('/', "$2"); + ret.replace("/", "_"); + ret.replace("\\", "_"); + ret.replace(":", "_"); + ret.replace("*", "_"); + ret.replace("?", "_"); + ret.replace("\"", "_"); + ret.replace("'", "_"); + ret.replace("<", "_"); + ret.replace(">", "_"); + ret.replace("|", "_"); return ret.toStdString(); } diff --git a/src/Core/OgreRenderingModule/OgreMeshAsset.cpp b/src/Core/OgreRenderingModule/OgreMeshAsset.cpp index 37373b6405..fe7cae260c 100644 --- a/src/Core/OgreRenderingModule/OgreMeshAsset.cpp +++ b/src/Core/OgreRenderingModule/OgreMeshAsset.cpp @@ -41,7 +41,7 @@ bool OgreMeshAsset::DeserializeFromData(const u8 *data_, size_t numBytes, const if (!cacheDiskSource.isEmpty()) { QFileInfo fileInfo(cacheDiskSource); - std::string sanitatedAssetRef = fileInfo.fileName().toStdString(); + std::string sanitatedAssetRef = fileInfo.fileName().toStdString(); loadTicket_ = Ogre::ResourceBackgroundQueue::getSingleton().load(Ogre::MeshManager::getSingleton().getResourceType(), sanitatedAssetRef, OgreRenderer::OgreRenderingModule::CACHE_RESOURCE_GROUP, false, 0, 0, this); return true; diff --git a/src/Core/OgreRenderingModule/OgreSkeletonAsset.cpp b/src/Core/OgreRenderingModule/OgreSkeletonAsset.cpp index 42ef00726a..d217c0073d 100644 --- a/src/Core/OgreRenderingModule/OgreSkeletonAsset.cpp +++ b/src/Core/OgreRenderingModule/OgreSkeletonAsset.cpp @@ -93,7 +93,7 @@ void OgreSkeletonAsset::operationCompleted(Ogre::BackgroundProcessTicket ticket, return; const QString assetRef = Name(); - internal_name_ = SanitateAssetIdForOgre(assetRef); + internal_name_ = OgreRenderer::SanitateAssetIdForOgre(assetRef); if (!result.error) { ogreSkeleton = Ogre::SkeletonManager::getSingleton().getByName(internal_name_, OgreRenderer::OgreRenderingModule::CACHE_RESOURCE_GROUP); diff --git a/src/Core/OgreRenderingModule/Renderer.cpp b/src/Core/OgreRenderingModule/Renderer.cpp index a8605f8f11..6b9c9f15bc 100644 --- a/src/Core/OgreRenderingModule/Renderer.cpp +++ b/src/Core/OgreRenderingModule/Renderer.cpp @@ -191,7 +191,11 @@ namespace OgreRenderer overriddenLogManager->createLog("", true, false, true); Ogre::LogManager::getSingleton().getDefaultLog()->setDebugOutputEnabled(false); // Disable Ogre from outputting to std::cerr by itself. Ogre::LogManager::getSingleton().getDefaultLog()->addListener(logListener); // Make all Ogre log output to come to our log listener. +#ifdef _DEBUG Ogre::LogManager::getSingleton().getDefaultLog()->setLogDetail(Ogre::LL_NORMAL); // This is probably the default level anyway, but be explicit. +#else + Ogre::LogManager::getSingleton().getDefaultLog()->setLogDetail(Ogre::LL_LOW); +#endif root_ = OgreRootPtr(new Ogre::Root("", config_filename_, logfilepath)); diff --git a/src/Core/OgreRenderingModule/TextureAsset.cpp b/src/Core/OgreRenderingModule/TextureAsset.cpp index 22f6ce49b9..6e23fd31e3 100644 --- a/src/Core/OgreRenderingModule/TextureAsset.cpp +++ b/src/Core/OgreRenderingModule/TextureAsset.cpp @@ -129,7 +129,7 @@ void TextureAsset::operationCompleted(Ogre::BackgroundProcessTicket ticket, cons return; const QString assetRef = Name(); - ogreAssetName = OgreRenderer::SanitateAssetIdForOgre(assetRef).c_str(); + ogreAssetName = QString::fromStdString(OgreRenderer::SanitateAssetIdForOgre(assetRef)); if (!result.error) { ogreTexture = Ogre::TextureManager::getSingleton().getByName(ogreAssetName.toStdString(), OgreRenderer::OgreRenderingModule::CACHE_RESOURCE_GROUP);