Mercurial > hg > openttd
changeset 20552:84a13b4b32ea draft
-Codechange: Introduce an interface for all classes that can do sprite encoding.
author | Michael Lutz <michi@icosahedron.de> |
---|---|
date | Mon, 24 Jun 2013 21:29:15 +0200 |
parents | f45702e39367 |
children | 18a8867370e9 |
files | src/blitter/base.hpp src/spritecache.cpp src/spriteloader/spriteloader.hpp |
diffstat | 3 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/blitter/base.hpp +++ b/src/blitter/base.hpp @@ -25,7 +25,7 @@ /** * How all blitters should look like. Extend this class to make your own. */ -class Blitter { +class Blitter : public SpriteEncoder { public: /** Parameters related to blitting. */ struct BlitterParams {
--- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -19,6 +19,7 @@ #include "blitter/factory.hpp" #include "core/math_func.hpp" #include "core/mem_func.hpp" +#include "video/video_driver.hpp" #include "table/sprites.h" #include "table/strings.h" @@ -375,9 +376,10 @@ * @param id Sprite number. * @param sprite_type Type of sprite. * @param allocator Allocator function to use. + * @param encoder Sprite encoder to use. * @return Read sprite data. */ -static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_type, AllocatorProc *allocator) +static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_type, AllocatorProc *allocator, SpriteEncoder *encoder) { uint8 file_slot = sc->file_slot; size_t file_pos = sc->file_pos; @@ -441,7 +443,7 @@ return (void*)GetRawSprite(SPR_IMG_QUERY, ST_NORMAL, allocator); } } - return BlitterFactoryBase::GetCurrentBlitter()->Encode(sprite, allocator); + return encoder->Encode(sprite, allocator); } @@ -836,12 +838,12 @@ sc->lru = ++_sprite_lru_counter; /* Load the sprite, if it is not loaded, yet */ - if (sc->ptr == NULL) sc->ptr = ReadSprite(sc, sprite, type, AllocSprite); + if (sc->ptr == NULL) sc->ptr = ReadSprite(sc, sprite, type, AllocSprite, BlitterFactoryBase::GetCurrentBlitter()); return sc->ptr; } else { /* Do not use the spritecache, but a different allocator. */ - return ReadSprite(sc, sprite, type, allocator); + return ReadSprite(sc, sprite, type, allocator, BlitterFactoryBase::GetCurrentBlitter()); } }
--- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -14,6 +14,7 @@ #include "../core/alloc_type.hpp" #include "../gfx_type.h" +#include "../spritecache.h" /** Interface for the loader of our sprites. */ class SpriteLoader { @@ -66,4 +67,13 @@ virtual ~SpriteLoader() { } }; +/** Interface for any class that can encode a raw sprite. */ +class SpriteEncoder { +public: + /** + * Convert a sprite from the loader to our own format. + */ + virtual Sprite *Encode(SpriteLoader::Sprite *sprite, AllocatorProc *allocator) = 0; +}; + #endif /* SPRITELOADER_HPP */