[Scummvm-cvs-logs] SF.net SVN: scummvm:[53782] scummvm/trunk/engines/saga

h00ligan at users.sourceforge.net h00ligan at users.sourceforge.net
Mon Oct 25 00:52:57 CEST 2010


Revision: 53782
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53782&view=rev
Author:   h00ligan
Date:     2010-10-24 22:52:57 +0000 (Sun, 24 Oct 2010)

Log Message:
-----------
SAGA: reduce memory usage

Modified Paths:
--------------
    scummvm/trunk/engines/saga/scene.cpp
    scummvm/trunk/engines/saga/scene.h

Modified: scummvm/trunk/engines/saga/scene.cpp
===================================================================
--- scummvm/trunk/engines/saga/scene.cpp	2010-10-24 22:40:37 UTC (rev 53781)
+++ scummvm/trunk/engines/saga/scene.cpp	2010-10-24 22:52:57 UTC (rev 53782)
@@ -179,17 +179,18 @@
 		SAGAResourceTypes *types;
 		int typesCount;
 		SAGAResourceTypes resType;
+		SceneResourceDataArray resourceList;
 
 		getResourceTypes(types, typesCount);
 
 		for (i = 0; i < _sceneLUT.size(); i++) {
 			gDebugLevel = -1;
 			loadSceneDescriptor(_sceneLUT[i]);
-			loadSceneResourceList(_sceneDescription.resourceListResourceId);
+			loadSceneResourceList(_sceneDescription.resourceListResourceId, resourceList);
 			gDebugLevel = backUpDebugLevel;
 			debug(DUMP_SCENES_LEVEL, "Dump Scene: number %i, descriptor resourceId %i, resourceList resourceId %i", i, _sceneLUT[i], _sceneDescription.resourceListResourceId);
-			debug(DUMP_SCENES_LEVEL, "\tresourceListCount %i", (int)_resourceList.size());
-			for (SceneResourceDataArray::iterator j = _resourceList.begin(); j != _resourceList.end(); ++j) {
+			debug(DUMP_SCENES_LEVEL, "\tresourceListCount %i", (int)resourceList.size());
+			for (SceneResourceDataArray::iterator j = resourceList.begin(); j != resourceList.end(); ++j) {
 				if (j->resourceType >= typesCount) {
 					error("wrong resource type %i", j->resourceType);
 				}
@@ -197,7 +198,6 @@
 
 				debug(DUMP_SCENES_LEVEL, "\t%s resourceId %i", SAGAResourceTypesString[resType], j->resourceId);
 			}
-			_resourceList.clear();
 		}
 	}
 #endif
@@ -677,25 +677,11 @@
 
 	loadSceneDescriptor(_sceneResourceId);
 
-	loadSceneResourceList(_sceneDescription.resourceListResourceId);
+	SceneResourceDataArray resourceList;
+	loadSceneResourceList(_sceneDescription.resourceListResourceId, resourceList);
 
-	// Load resources from scene resource list
-	for (SceneResourceDataArray::iterator resource = _resourceList.begin(); resource != _resourceList.end(); ++resource) {
-		if (!resource->invalid) {
-			_vm->_resource->loadResource(_sceneContext, resource->resourceId, resource->buffer);
-
-
-			if (resource->buffer.size() >= 6) {
-				if (!memcmp(resource->buffer.getBuffer(), "DUMMY!", 6)) {
-					resource->invalid = true;
-					warning("DUMMY resource %i", resource->resourceId);
-				}
-			}
-		}
-	}
-
 	// Process resources from scene resource list
-	processSceneResources();
+	processSceneResources(resourceList);
 
 	if (_sceneDescription.flags & kSceneFlagISO) {
 		_outsetSceneNumber = _sceneNumber;
@@ -907,10 +893,10 @@
 	}
 }
 
-void Scene::loadSceneResourceList(uint32 resourceId) {
+void Scene::loadSceneResourceList(uint32 resourceId, SceneResourceDataArray &resourceList) {
 	ByteArray resourceListData;
 
-	_resourceList.clear();
+	resourceList.clear();
 
 	if (resourceId == 0) {
 		return;
@@ -923,14 +909,14 @@
 		ByteArrayReadStreamEndian readS(resourceListData, _sceneContext->isBigEndian());
 
 		// Allocate memory for scene resource list
-		_resourceList.resize(resourceListData.size() / SAGA_RESLIST_ENTRY_LEN);
-		debug(3, "Scene resource list contains %i entries", (int)_resourceList.size());
+		resourceList.resize(resourceListData.size() / SAGA_RESLIST_ENTRY_LEN);
+		debug(3, "Scene resource list contains %i entries", (int)resourceList.size());
 
 		// Load scene resource list from raw scene
 		// resource table
 		debug(3, "Loading scene resource list");
 
-		for (SceneResourceDataArray::iterator resource = _resourceList.begin(); resource != _resourceList.end(); ++resource) {
+		for (SceneResourceDataArray::iterator resource = resourceList.begin(); resource != resourceList.end(); ++resource) {
 			resource->resourceId = readS.readUint16();
 			resource->resourceType = readS.readUint16();
 			// demo version may contain invalid resourceId
@@ -940,7 +926,8 @@
 	}
 }
 
-void Scene::processSceneResources() {
+void Scene::processSceneResources(SceneResourceDataArray &resourceList) {
+	ByteArray resourceData;
 	const byte *palPointer;
 	SAGAResourceTypes *types = 0;
 	int typesCount = 0;
@@ -949,12 +936,24 @@
 	getResourceTypes(types, typesCount);
 
 	// Process the scene resource list
-	for (SceneResourceDataArray::iterator resource = _resourceList.begin(); resource != _resourceList.end(); ++resource) {
+	for (SceneResourceDataArray::iterator resource = resourceList.begin(); resource != resourceList.end(); ++resource) {
 		if (resource->invalid) {
 			continue;
 		}
-		ByteArray &resourceData = resource->buffer;
+		_vm->_resource->loadResource(_sceneContext, resource->resourceId, resourceData);
 
+
+		if (resourceData.size() >= 6) {
+			if (!memcmp(resourceData.getBuffer(), "DUMMY!", 6)) {
+				resource->invalid = true;
+				warning("DUMMY resource %i", resource->resourceId);
+			}
+		}
+
+		if (resource->invalid) {
+			continue;
+		}
+
 		if (resource->resourceType >= typesCount) {
 			error("Scene::processSceneResources() wrong resource type %i", resource->resourceType);
 		}
@@ -1178,9 +1177,6 @@
 		_bgMask.loaded = false;
 	}
 
-	// Free scene resource list
-	_resourceList.clear();
-
 	// Free animation info list
 	_vm->_anim->reset();
 

Modified: scummvm/trunk/engines/saga/scene.h
===================================================================
--- scummvm/trunk/engines/saga/scene.h	2010-10-24 22:40:37 UTC (rev 53781)
+++ scummvm/trunk/engines/saga/scene.h	2010-10-24 22:52:57 UTC (rev 53782)
@@ -110,7 +110,6 @@
 struct SceneResourceData {
 	uint32 resourceId;
 	int resourceType;
-	ByteArray buffer;
 	bool invalid;
 
 	SceneResourceData() : resourceId(0), resourceType(0),  invalid(false) {
@@ -360,9 +359,9 @@
  private:
 	void loadScene(LoadSceneParams &loadSceneParams);
 	void loadSceneDescriptor(uint32 resourceId);
-	void loadSceneResourceList(uint32 resourceId);
+	void loadSceneResourceList(uint32 resourceId, SceneResourceDataArray &resourceList);
 	void loadSceneEntryList(const ByteArray &resourceData);
-	void processSceneResources();
+	void processSceneResources(SceneResourceDataArray &resourceList);
 	void getResourceTypes(SAGAResourceTypes *&types, int &typesCount);
 
 
@@ -382,7 +381,6 @@
 	bool _chapterPointsChanged;
 	bool _inGame;
 	SceneDescription _sceneDescription;
-	SceneResourceDataArray _resourceList;
 	SceneProc *_sceneProc;
 	SceneImage _bg;
 	SceneImage _bgMask;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list