1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-29 17:39:09 +00:00

(svn r23315) -Codechange: Only encode sprites for zoom levels that will be used.

This commit is contained in:
2011-11-24 12:26:44 +00:00
parent 4e97261315
commit 15d0a22aac
7 changed files with 59 additions and 7 deletions

View File

@@ -199,6 +199,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty
/* Try loading 32bpp graphics in case we are 32bpp output */
SpriteLoaderPNG sprite_loader;
SpriteLoader::Sprite sprite;
sprite.type = sprite_type;
if (sprite_loader.LoadSprite(&sprite, file_slot, sc->id, sprite_type)) {
return BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, allocator);
@@ -290,6 +291,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty
SpriteLoaderGrf sprite_loader;
SpriteLoader::Sprite sprite;
sprite.type = sprite_type;
if (!sprite_loader.LoadSprite(&sprite, file_slot, file_pos, sprite_type)) {
if (id == SPR_IMG_QUERY) usererror("Okay... something went horribly wrong. I couldn't load the fallback sprite. What should I do?");
@@ -608,7 +610,7 @@ void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator)
}
void GfxInitSpriteMem()
static void GfxInitSpriteCache()
{
/* initialize sprite cache heap */
if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)MallocT<byte>(_sprite_cache_size * 1024 * 1024);
@@ -617,6 +619,11 @@ void GfxInitSpriteMem()
_spritecache_ptr->size = ((_sprite_cache_size * 1024 * 1024) - sizeof(MemBlock)) | S_FREE_MASK;
/* Sentinel block (identified by size == 0) */
NextBlock(_spritecache_ptr)->size = 0;
}
void GfxInitSpriteMem()
{
GfxInitSpriteCache();
/* Reset the spritecache 'pool' */
free(_spritecache);
@@ -626,4 +633,19 @@ void GfxInitSpriteMem()
_compact_cache_counter = 0;
}
/**
* Remove all encoded sprites from the sprite cache without
* discarding sprite location information.
*/
void GfxClearSpriteCache()
{
/* Clear sprite ptr for all cached items */
for (uint i = 0; i != _spritecache_items; i++) {
SpriteCache *sc = GetSpriteCache(i);
sc->ptr = NULL;
}
GfxInitSpriteCache();
}
/* static */ ReusableBuffer<SpriteLoader::CommonPixel> SpriteLoader::Sprite::buffer;