diff options
author | rubidium <rubidium@openttd.org> | 2009-02-23 10:50:25 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-02-23 10:50:25 +0000 |
commit | 0c1b8ea602de72a96573b7e3301589e8e3249ca1 (patch) | |
tree | b1be264cf851bf2b8888a29947b37d3f5539933a /src/spriteloader/spriteloader.hpp | |
parent | 2433ba042b2e39b0306a04056136a18ca1323136 (diff) | |
download | openttd-0c1b8ea602de72a96573b7e3301589e8e3249ca1.tar.xz |
(svn r15555) -Codechange: remove the mallocs + frees for temporary data from loading sprites.
Diffstat (limited to 'src/spriteloader/spriteloader.hpp')
-rw-r--r-- | src/spriteloader/spriteloader.hpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/spriteloader/spriteloader.hpp b/src/spriteloader/spriteloader.hpp index 34e668e22..9b431fb4f 100644 --- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -15,12 +15,32 @@ public: uint8 m; ///< Remap-channel }; + /** + * Structure for passing information from the sprite loader to the blitter. + * You can only use this struct once at a time when using AllocateData to + * allocate the memory as that will always return the same memory address. + * This to prevent thousands of malloc + frees just to load a sprite. + */ struct Sprite { + Sprite() : data(NULL) {} + ~Sprite() { assert(this->data == NULL || this->data == Sprite::mem); } + uint16 height; ///< Height of the sprite uint16 width; ///< Width of the sprite int16 x_offs; ///< The x-offset of where the sprite will be drawn int16 y_offs; ///< The y-offset of where the sprite will be drawn SpriteLoader::CommonPixel *data; ///< The sprite itself + + /** + * Allocate the sprite data of this sprite. + * @param size the minimum size of the data field. + */ + void AllocateData(size_t size); + private: + /** Allocated memory to pass sprite data around */ + static SpriteLoader::CommonPixel *mem; + /** Size (in items) of the above memory. */ + static size_t size; }; /** |