Forráskód Böngészése

Fix missing root of shader precache file if loading it fails. Reset (clear) XMLFile when loading fails so that no illegal content will be saved when it's programmatically modified and then saved.

Lasse Öörni 12 éve
szülő
commit
0e5d11541f

+ 5 - 3
Source/Engine/Graphics/ShaderPrecache.cpp

@@ -54,15 +54,17 @@ ShaderPrecache::ShaderPrecache(Context* context, const String& fileName) :
             shader = shader.GetNext("shader");
         }
     }
-    else
+    
+    // If no file yet or loading failed, create the root element now
+    if (!xmlFile_.GetRoot())
         xmlFile_.CreateRoot("shaders");
     
-    LOGDEBUG("Begin dumping shaders to " + fileName_);
+    LOGINFO("Begin dumping shaders to " + fileName_);
 }
 
 ShaderPrecache::~ShaderPrecache()
 {
-    LOGDEBUG("End dumping shaders");
+    LOGINFO("End dumping shaders");
     
     if (usedCombinations_.Empty())
         return;

+ 1 - 1
Source/Engine/Graphics/ShaderPrecache.h

@@ -46,7 +46,7 @@ public:
     /// Collect a shader combination. Called by Graphics when shaders have been set.
     void StoreShaders(ShaderVariation* vs, ShaderVariation* ps);
     
-    /// Load shaders from a XML file.
+    /// Load shaders from an XML file.
     static void LoadShaders(Graphics* graphics, Deserializer& source);
 
 private:

+ 1 - 0
Source/Engine/Resource/XMLFile.cpp

@@ -96,6 +96,7 @@ bool XMLFile::Load(Deserializer& source)
     if (!document_->load_buffer(buffer.Get(), dataSize))
     {
         LOGERROR("Could not parse XML data from " + source.GetName());
+        document_->reset();
         return false;
     }