# HG changeset patch # User frosch # Date 2012-05-15 20:37:42 # Node ID f942294567d24f63b264da8c8ab98692c78abf0b # Parent f71157c7db92345a29c03fbf227a9e6006263290 (svn r24252) -Fix [FS#5162]: Change the unit of the sprite-cache size setting from megabytes to megapixels, so it depends on the blitter being used. Also increase it from 64 to 128, and change the name in the cfg file, so everyone gets the new default. diff --git a/src/spritecache.cpp b/src/spritecache.cpp --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -79,6 +79,7 @@ struct MemBlock { static uint _sprite_lru_counter; static MemBlock *_spritecache_ptr; +static uint _allocated_sprite_cache_size = 0; static int _compact_cache_counter; static void CompactSpriteCache(); @@ -843,10 +844,17 @@ void *GetRawSprite(SpriteID sprite, Spri static void GfxInitSpriteCache() { /* initialize sprite cache heap */ - if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)MallocT(_sprite_cache_size * 1024 * 1024); + int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(); + uint target_size = _sprite_cache_size * 1024 * 1024 * max(1, bpp / 8); + + if (_spritecache_ptr == NULL || _allocated_sprite_cache_size != target_size) { + free(_spritecache_ptr); + _allocated_sprite_cache_size = target_size; + _spritecache_ptr = (MemBlock*)MallocT(_allocated_sprite_cache_size); + } /* A big free block */ - _spritecache_ptr->size = ((_sprite_cache_size * 1024 * 1024) - sizeof(MemBlock)) | S_FREE_MASK; + _spritecache_ptr->size = (_allocated_sprite_cache_size - sizeof(MemBlock)) | S_FREE_MASK; /* Sentinel block (identified by size == 0) */ NextBlock(_spritecache_ptr)->size = 0; } diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -213,10 +213,10 @@ var = _freetype.mono_aa def = false [SDTG_VAR] -name = ""max_sprite_cache_size"" +name = ""sprite_cache_size_px"" type = SLE_UINT var = _sprite_cache_size -def = 64 +def = 128 min = 1 max = 512