GRIM: Don't cache the bitmaps in ResourceLoader. Bump savegame version to 12
This commit is contained in:
parent
513f310072
commit
a02740f77d
8 changed files with 14 additions and 56 deletions
|
@ -132,8 +132,7 @@ Bitmap::~Bitmap() {
|
||||||
|
|
||||||
g_driver->destroyBitmap(this);
|
g_driver->destroyBitmap(this);
|
||||||
}
|
}
|
||||||
if (g_resourceloader)
|
g_grim->killBitmap(this);
|
||||||
g_resourceloader->uncacheBitmap(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GET_BIT do { bit = bitstr_value & 1; \
|
#define GET_BIT do { bit = bitstr_value & 1; \
|
||||||
|
|
|
@ -1305,6 +1305,7 @@ void GrimEngine::restoreBitmaps(SaveGame *state) {
|
||||||
int32 id = state->readLEUint32();
|
int32 id = state->readLEUint32();
|
||||||
const char *fname = state->readCharString();
|
const char *fname = state->readCharString();
|
||||||
Bitmap *b = g_resourceloader->loadBitmap(fname);
|
Bitmap *b = g_resourceloader->loadBitmap(fname);
|
||||||
|
killBitmap(b);
|
||||||
b->setNumber(state->readLESint32());
|
b->setNumber(state->readLESint32());
|
||||||
b->setX(state->readLESint32());
|
b->setX(state->readLESint32());
|
||||||
b->setY(state->readLESint32());
|
b->setY(state->readLESint32());
|
||||||
|
@ -1740,12 +1741,11 @@ void GrimEngine::registerBitmap(Bitmap *bitmap) {
|
||||||
|
|
||||||
void GrimEngine::killBitmap(Bitmap *b) {
|
void GrimEngine::killBitmap(Bitmap *b) {
|
||||||
_bitmaps.erase(b->getId());
|
_bitmaps.erase(b->getId());
|
||||||
delete b;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrimEngine::killBitmaps() {
|
void GrimEngine::killBitmaps() {
|
||||||
while (!_bitmaps.empty()) {
|
while (!_bitmaps.empty()) {
|
||||||
killBitmap(_bitmaps.begin()->_value);
|
delete _bitmaps.begin()->_value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,6 @@ void L1_GetImage() {
|
||||||
}
|
}
|
||||||
const char *bitmapName = lua_getstring(nameObj);
|
const char *bitmapName = lua_getstring(nameObj);
|
||||||
Bitmap *b = g_resourceloader->loadBitmap(bitmapName);
|
Bitmap *b = g_resourceloader->loadBitmap(bitmapName);
|
||||||
g_grim->registerBitmap(b);
|
|
||||||
lua_pushusertag(b->getId(), MKTAG('V','B','U','F'));
|
lua_pushusertag(b->getId(), MKTAG('V','B','U','F'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,8 +53,7 @@ void PrimitiveObject::saveState(SaveGame *savedState) const {
|
||||||
savedState->writeLEUint32(_filled);
|
savedState->writeLEUint32(_filled);
|
||||||
|
|
||||||
if (_bitmap) {
|
if (_bitmap) {
|
||||||
savedState->writeLEUint32(1);
|
savedState->writeLEUint32(_bitmap->getId());
|
||||||
savedState->writeCharString(_bitmap->getFilename());
|
|
||||||
} else {
|
} else {
|
||||||
savedState->writeLEUint32(0);
|
savedState->writeLEUint32(0);
|
||||||
}
|
}
|
||||||
|
@ -76,13 +75,7 @@ bool PrimitiveObject::restoreState(SaveGame *savedState) {
|
||||||
|
|
||||||
_filled = savedState->readLEUint32();
|
_filled = savedState->readLEUint32();
|
||||||
|
|
||||||
if (savedState->readLEUint32()) {
|
_bitmap = g_grim->getBitmap(savedState->readLEUint32());
|
||||||
const char *name = savedState->readCharString();
|
|
||||||
_bitmap = g_resourceloader->getBitmap(name);
|
|
||||||
delete[] name;
|
|
||||||
} else {
|
|
||||||
_bitmap = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
_p1.x = savedState->readLEUint32();
|
_p1.x = savedState->readLEUint32();
|
||||||
_p1.y = savedState->readLEUint32();
|
_p1.y = savedState->readLEUint32();
|
||||||
|
|
|
@ -103,7 +103,6 @@ ResourceLoader::~ResourceLoader() {
|
||||||
}
|
}
|
||||||
clearList(_labs);
|
clearList(_labs);
|
||||||
clearList(_materials);
|
clearList(_materials);
|
||||||
clearList(_bitmaps);
|
|
||||||
clearList(_models);
|
clearList(_models);
|
||||||
clearList(_colormaps);
|
clearList(_colormaps);
|
||||||
clearList(_keyframeAnims);
|
clearList(_keyframeAnims);
|
||||||
|
@ -222,6 +221,8 @@ Bitmap *ResourceLoader::loadBitmap(const char *filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Bitmap *result = new Bitmap(filename, b->getData(), b->getLen());
|
Bitmap *result = new Bitmap(filename, b->getData(), b->getLen());
|
||||||
|
if (result)
|
||||||
|
g_grim->registerBitmap(result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -376,10 +377,6 @@ void ResourceLoader::uncacheMaterial(Material *mat) {
|
||||||
_materials.remove(mat);
|
_materials.remove(mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResourceLoader::uncacheBitmap(Bitmap *bitmap) {
|
|
||||||
_bitmaps.remove(bitmap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ResourceLoader::uncacheModel(Model *m) {
|
void ResourceLoader::uncacheModel(Model *m) {
|
||||||
_models.remove(m);
|
_models.remove(m);
|
||||||
}
|
}
|
||||||
|
@ -411,20 +408,6 @@ MaterialPtr ResourceLoader::getMaterial(const char *fname, CMap *c) {
|
||||||
return loadMaterial(fname, c);
|
return loadMaterial(fname, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
BitmapPtr ResourceLoader::getBitmap(const char *fname) {
|
|
||||||
for (Common::List<Bitmap *>::const_iterator i = _bitmaps.begin(); i != _bitmaps.end(); ++i) {
|
|
||||||
Bitmap *b = *i;
|
|
||||||
if (strcmp(fname, b->getFilename()) == 0) {
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Bitmap *b = loadBitmap(fname);
|
|
||||||
if (b)
|
|
||||||
_bitmaps.push_back(b);
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
ModelPtr ResourceLoader::getModel(const char *fname, CMap *c) {
|
ModelPtr ResourceLoader::getModel(const char *fname, CMap *c) {
|
||||||
for (Common::List<Model *>::const_iterator i = _models.begin(); i != _models.end(); ++i) {
|
for (Common::List<Model *>::const_iterator i = _models.begin(); i != _models.end(); ++i) {
|
||||||
Model *m = *i;
|
Model *m = *i;
|
||||||
|
|
|
@ -74,14 +74,12 @@ public:
|
||||||
int getFileLength(const char *filename) const;
|
int getFileLength(const char *filename) const;
|
||||||
|
|
||||||
MaterialPtr getMaterial(const char *filename, CMap *c);
|
MaterialPtr getMaterial(const char *filename, CMap *c);
|
||||||
BitmapPtr getBitmap(const char *fname);
|
|
||||||
ModelPtr getModel(const char *fname, CMap *c);
|
ModelPtr getModel(const char *fname, CMap *c);
|
||||||
CMapPtr getColormap(const char *fname);
|
CMapPtr getColormap(const char *fname);
|
||||||
KeyframeAnimPtr getKeyframe(const char *fname);
|
KeyframeAnimPtr getKeyframe(const char *fname);
|
||||||
FontPtr getFont(const char *fname);
|
FontPtr getFont(const char *fname);
|
||||||
LipSyncPtr getLipSync(const char *fname);
|
LipSyncPtr getLipSync(const char *fname);
|
||||||
void uncacheMaterial(Material *m);
|
void uncacheMaterial(Material *m);
|
||||||
void uncacheBitmap(Bitmap *bitmap);
|
|
||||||
void uncacheModel(Model *m);
|
void uncacheModel(Model *m);
|
||||||
void uncacheColormap(CMap *c);
|
void uncacheColormap(CMap *c);
|
||||||
void uncacheKeyframe(KeyframeAnim *kf);
|
void uncacheKeyframe(KeyframeAnim *kf);
|
||||||
|
@ -108,7 +106,6 @@ private:
|
||||||
int32 _cacheMemorySize;
|
int32 _cacheMemorySize;
|
||||||
|
|
||||||
Common::List<Material *> _materials;
|
Common::List<Material *> _materials;
|
||||||
Common::List<Bitmap *> _bitmaps;
|
|
||||||
Common::List<Model *> _models;
|
Common::List<Model *> _models;
|
||||||
Common::List<CMap *> _colormaps;
|
Common::List<CMap *> _colormaps;
|
||||||
Common::List<KeyframeAnim *> _keyframeAnims;
|
Common::List<KeyframeAnim *> _keyframeAnims;
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace Grim {
|
||||||
|
|
||||||
#define SAVEGAME_HEADERTAG 'RSAV'
|
#define SAVEGAME_HEADERTAG 'RSAV'
|
||||||
#define SAVEGAME_FOOTERTAG 'ESAV'
|
#define SAVEGAME_FOOTERTAG 'ESAV'
|
||||||
#define SAVEGAME_VERSION 11
|
#define SAVEGAME_VERSION 12
|
||||||
|
|
||||||
// Constructor. Should create/open a saved game
|
// Constructor. Should create/open a saved game
|
||||||
SaveGame::SaveGame(const char *filename, bool saving) :
|
SaveGame::SaveGame(const char *filename, bool saving) :
|
||||||
|
|
|
@ -160,16 +160,14 @@ void Scene::saveState(SaveGame *savedState) const {
|
||||||
|
|
||||||
//bkgndBm
|
//bkgndBm
|
||||||
if (set._bkgndBm) {
|
if (set._bkgndBm) {
|
||||||
savedState->writeLEUint32(1);
|
savedState->writeLEUint32(set._bkgndBm->getId());
|
||||||
savedState->writeCharString(set._bkgndBm->getFilename());
|
|
||||||
} else {
|
} else {
|
||||||
savedState->writeLEUint32(0);
|
savedState->writeLEUint32(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//bkgndZBm
|
//bkgndZBm
|
||||||
if (set._bkgndZBm) {
|
if (set._bkgndZBm) {
|
||||||
savedState->writeLEUint32(1);
|
savedState->writeLEUint32(set._bkgndZBm->getId());
|
||||||
savedState->writeCharString(set._bkgndZBm->getFilename());
|
|
||||||
} else {
|
} else {
|
||||||
savedState->writeLEUint32(0);
|
savedState->writeLEUint32(0);
|
||||||
}
|
}
|
||||||
|
@ -243,19 +241,8 @@ bool Scene::restoreState(SaveGame *savedState) {
|
||||||
|
|
||||||
set._name = savedState->readString();
|
set._name = savedState->readString();
|
||||||
|
|
||||||
if (savedState->readLEUint32()) {
|
set._bkgndBm = g_grim->getBitmap(savedState->readLEUint32());
|
||||||
const char *fname = savedState->readCharString();
|
set._bkgndZBm = g_grim->getBitmap(savedState->readLEUint32());
|
||||||
set._bkgndBm = g_resourceloader->getBitmap(fname);
|
|
||||||
} else {
|
|
||||||
set._bkgndBm = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (savedState->readLEUint32()) {
|
|
||||||
const char *fname = savedState->readCharString();
|
|
||||||
set._bkgndZBm = g_resourceloader->getBitmap(fname);
|
|
||||||
} else {
|
|
||||||
set._bkgndZBm = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
set._pos = savedState->readVector3d();
|
set._pos = savedState->readVector3d();
|
||||||
set._interest = savedState->readVector3d();
|
set._interest = savedState->readVector3d();
|
||||||
|
@ -305,7 +292,7 @@ void Scene::Setup::load(TextSplitter &ts) {
|
||||||
_name = buf;
|
_name = buf;
|
||||||
|
|
||||||
ts.scanString(" background %256s", 1, buf);
|
ts.scanString(" background %256s", 1, buf);
|
||||||
_bkgndBm = g_resourceloader->getBitmap(buf);
|
_bkgndBm = g_resourceloader->loadBitmap(buf);
|
||||||
if (!_bkgndBm) {
|
if (!_bkgndBm) {
|
||||||
if (gDebugLevel == DEBUG_BITMAPS || gDebugLevel == DEBUG_ERROR || gDebugLevel == DEBUG_ALL)
|
if (gDebugLevel == DEBUG_BITMAPS || gDebugLevel == DEBUG_ERROR || gDebugLevel == DEBUG_ALL)
|
||||||
warning("Unable to load scene bitmap: %s\n", buf);
|
warning("Unable to load scene bitmap: %s\n", buf);
|
||||||
|
@ -321,7 +308,7 @@ void Scene::Setup::load(TextSplitter &ts) {
|
||||||
ts.scanString(" zbuffer %256s", 1, buf);
|
ts.scanString(" zbuffer %256s", 1, buf);
|
||||||
// Don't even try to load if it's the "none" bitmap
|
// Don't even try to load if it's the "none" bitmap
|
||||||
if (strcmp(buf, "<none>.lbm") != 0) {
|
if (strcmp(buf, "<none>.lbm") != 0) {
|
||||||
_bkgndZBm = g_resourceloader->getBitmap(buf);
|
_bkgndZBm = g_resourceloader->loadBitmap(buf);
|
||||||
if (gDebugLevel == DEBUG_BITMAPS || gDebugLevel == DEBUG_NORMAL || gDebugLevel == DEBUG_ALL)
|
if (gDebugLevel == DEBUG_BITMAPS || gDebugLevel == DEBUG_NORMAL || gDebugLevel == DEBUG_ALL)
|
||||||
printf("Loading scene z-buffer bitmap: %s\n", buf);
|
printf("Loading scene z-buffer bitmap: %s\n", buf);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue