AGS: Changed SpriteCache::FreeMem to comply with sound cache

From upstream 94a462d52d5533f4ebb4cef1bbddd280b4f876a2
This commit is contained in:
Thierry Crozat
2022-06-18 18:21:35 +01:00
parent fa3c524d13
commit 15563b5a7c
2 changed files with 7 additions and 9 deletions
+5 -7
View File
@@ -215,8 +215,8 @@ Bitmap *SpriteCache::operator [] (sprkey_t index) {
return _spriteData[index].Image;
}
void SpriteCache::FreeMem(size_t threshold) {
for (int tries = 0; (_mru.size() > 0) && (_cacheSize >= threshold); ++tries) {
void SpriteCache::FreeMem(size_t space) {
for (int tries = 0; (_mru.size() > 0) && (_cacheSize >= (_maxCacheSize - space)); ++tries) {
DisposeOldest();
if (tries > 1000) { // ???
Debug::Printf(kDbgGroup_SprCache, kDbgMsg_Error, "RUNTIME CACHE ERROR: STUCK IN FREE_UP_MEM; RESETTING CACHE");
@@ -299,8 +299,6 @@ size_t SpriteCache::LoadSprite(sprkey_t index) {
if (index < 0 || (size_t)index >= _spriteData.size())
return 0;
FreeMem(_maxCacheSize);
sprkey_t load_index = GetDataIndex(index);
Bitmap *image;
HError err = _file.LoadSprite(load_index, image);
@@ -330,10 +328,10 @@ size_t SpriteCache::LoadSprite(sprkey_t index) {
if (index != 0) // leave sprite 0 locked
_spriteData[index].Flags &= ~SPRCACHEFLAG_LOCKED;
// we need to store this because the main program might
// alter spritewidth/height if it resizes stuff
size_t size = _sprInfos[index].Width * _sprInfos[index].Height *
const size_t size = _sprInfos[index].Width * _sprInfos[index].Height *
_spriteData[index].Image->GetBPP();
// Clear up space before adding to cache
FreeMem(size);
_spriteData[index].Size = size;
_cacheSize += size;
+2 -2
View File
@@ -154,8 +154,8 @@ private:
sprkey_t GetDataIndex(sprkey_t index);
// Delete the oldest (least recently used) image in cache
void DisposeOldest();
// Keep disposing oldest elements until cache size is reduced to the given threshold
void FreeMem(size_t threshold);
// Keep disposing oldest elements until cache has at least the given free space
void FreeMem(size_t space);
// Information required for the sprite streaming
struct SpriteData {