Files
@ r28293:13ab39ecefa6
Branch filter:
Location: cpp/openttd-patchpack/source/src/spriteloader/spriteloader.hpp - annotation
r28293:13ab39ecefa6
4.1 KiB
text/x-c++hdr
Fix: [Script] Properly store the previous AsyncMode state (#11587)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r11203:4e233b1fc54b r24899:e3ddcc7e16c9 r14248:a9050881acd7 r25413:71c42f3ee7f2 r11203:4e233b1fc54b r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r24899:e3ddcc7e16c9 r17625:366001a31c88 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r17625:366001a31c88 r6852:5b6b567a9e32 r27737:728d55b97775 r27737:728d55b97775 r27737:728d55b97775 r27737:728d55b97775 r27737:728d55b97775 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r11202:ec3713bd39fb r11202:ec3713bd39fb r11202:ec3713bd39fb r11202:ec3713bd39fb r11202:ec3713bd39fb r11202:ec3713bd39fb r6852:5b6b567a9e32 r27737:728d55b97775 r27737:728d55b97775 r27737:728d55b97775 r27737:728d55b97775 r18461:b013cc5efff8 r24899:e3ddcc7e16c9 r6852:5b6b567a9e32 r11202:ec3713bd39fb r11202:ec3713bd39fb r11202:ec3713bd39fb r19022:c323225b1609 r11202:ec3713bd39fb r11202:ec3713bd39fb r19022:c323225b1609 r11202:ec3713bd39fb r11202:ec3713bd39fb r28210:eaa3026e9a5f r6852:5b6b567a9e32 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r19022:c323225b1609 r17138:5078c9240593 r17138:5078c9240593 r17138:5078c9240593 r19030:677375fa2cd6 r26384:19fce5799803 r19022:c323225b1609 r6852:5b6b567a9e32 r27737:728d55b97775 r6852:5b6b567a9e32 r27372:06d384d76bd2 r6852:5b6b567a9e32 r6852:5b6b567a9e32 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r27372:06d384d76bd2 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24897:25aba2adfe00 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24898:4f4f325b2cf2 r24897:25aba2adfe00 r6852:5b6b567a9e32 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file spriteloader.hpp Base for loading sprites. */
#ifndef SPRITELOADER_HPP
#define SPRITELOADER_HPP
#include "../core/alloc_type.hpp"
#include "../core/enum_type.hpp"
#include "../gfx_type.h"
#include "sprite_file_type.hpp"
struct Sprite;
typedef void *AllocatorProc(size_t size);
/** The different colour components a sprite can have. */
enum SpriteColourComponent {
SCC_RGB = 1 << 0, ///< Sprite has RGB.
SCC_ALPHA = 1 << 1, ///< Sprite has alpha.
SCC_PAL = 1 << 2, ///< Sprite has palette data.
SCC_MASK = SCC_RGB | SCC_ALPHA | SCC_PAL, ///< Mask of valid colour bits.
};
DECLARE_ENUM_AS_BIT_SET(SpriteColourComponent)
/** Interface for the loader of our sprites. */
class SpriteLoader {
public:
/** Definition of a common pixel in OpenTTD's realm. */
struct CommonPixel {
uint8_t r; ///< Red-channel
uint8_t g; ///< Green-channel
uint8_t b; ///< Blue-channel
uint8_t a; ///< Alpha-channel
uint8_t 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 {
uint16_t height; ///< Height of the sprite
uint16_t width; ///< Width of the sprite
int16_t x_offs; ///< The x-offset of where the sprite will be drawn
int16_t y_offs; ///< The y-offset of where the sprite will be drawn
SpriteType type; ///< The sprite type
SpriteColourComponent colours; ///< The colour components of the sprite with useful information.
SpriteLoader::CommonPixel *data; ///< The sprite itself
/**
* Allocate the sprite data of this sprite.
* @param zoom Zoom level to allocate the data for.
* @param size the minimum size of the data field.
*/
void AllocateData(ZoomLevel zoom, size_t size) { this->data = Sprite::buffer[zoom].ZeroAllocate(size); }
private:
/** Allocated memory to pass sprite data around */
static ReusableBuffer<SpriteLoader::CommonPixel> buffer[ZOOM_LVL_END];
};
/**
* Load a sprite from the disk and return a sprite struct which is the same for all loaders.
* @param[out] sprite The sprites to fill with data.
* @param file_slot The file "descriptor" of the file we read from.
* @param file_pos The position within the file the image begins.
* @param sprite_type The type of sprite we're trying to load.
* @param load_32bpp True if 32bpp sprites should be loaded, false for a 8bpp sprite.
* @param control_flags Control flags, see SpriteCacheCtrlFlags.
* @return Bit mask of the zoom levels successfully loaded or 0 if no sprite could be loaded.
*/
virtual uint8_t LoadSprite(SpriteLoader::Sprite *sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, byte control_flags) = 0;
virtual ~SpriteLoader() = default;
};
/** Interface for something that can encode a sprite. */
class SpriteEncoder {
public:
virtual ~SpriteEncoder() = default;
/**
* Can the sprite encoder make use of RGBA sprites?
*/
virtual bool Is32BppSupported() = 0;
/**
* Convert a sprite from the loader to our own format.
*/
virtual Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) = 0;
/**
* Get the value which the height and width on a sprite have to be aligned by.
* @return The needed alignment or 0 if any alignment is accepted.
*/
virtual uint GetSpriteAlignment()
{
return 0;
}
};
#endif /* SPRITELOADER_HPP */
|