OpenTTD Source  1.11.2
spritecache.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * 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.
4  * 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.
5  * 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/>.
6  */
7 
10 #ifndef SPRITECACHE_H
11 #define SPRITECACHE_H
12 
13 #include "gfx_type.h"
15 
17 struct Sprite {
18  uint16 height;
19  uint16 width;
20  int16 x_offs;
21  int16 y_offs;
22  byte data[];
23 };
24 
25 extern uint _sprite_cache_size;
26 
27 typedef void *AllocatorProc(size_t size);
28 
29 void *SimpleSpriteAlloc(size_t size);
30 void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator = nullptr, SpriteEncoder *encoder = nullptr);
31 bool SpriteExists(SpriteID sprite);
32 
34 uint GetOriginFileSlot(SpriteID sprite);
35 uint32 GetSpriteLocalID(SpriteID sprite);
36 uint GetSpriteCountForSlot(uint file_slot, SpriteID begin, SpriteID end);
37 uint GetMaxSpriteID();
38 
39 
40 static inline const Sprite *GetSprite(SpriteID sprite, SpriteType type)
41 {
42  assert(type != ST_RECOLOUR);
43  return (Sprite*)GetRawSprite(sprite, type);
44 }
45 
46 static inline const byte *GetNonSprite(SpriteID sprite, SpriteType type)
47 {
48  assert(type == ST_RECOLOUR);
49  return (byte*)GetRawSprite(sprite, type);
50 }
51 
52 void GfxInitSpriteMem();
53 void GfxClearSpriteCache();
54 void IncreaseSpriteLRU();
55 
56 void ReadGRFSpriteOffsets(byte container_version);
57 size_t GetGRFSpriteOffset(uint32 id);
58 bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id, byte container_version);
59 bool SkipSpriteData(byte type, uint16 num);
60 void DupSprite(SpriteID old_spr, SpriteID new_spr);
61 
62 #endif /* SPRITECACHE_H */
SkipSpriteData
bool SkipSpriteData(byte type, uint16 num)
Skip the given amount of sprite graphics data.
Definition: spritecache.cpp:95
ReadGRFSpriteOffsets
void ReadGRFSpriteOffsets(byte container_version)
Parse the sprite section of GRFs.
Definition: spritecache.cpp:519
Sprite::data
byte data[]
Sprite data.
Definition: spritecache.h:22
GetSpriteType
SpriteType GetSpriteType(SpriteID sprite)
Get the sprite type of a given sprite.
Definition: spritecache.cpp:132
GetGRFSpriteOffset
size_t GetGRFSpriteOffset(uint32 id)
Get the file offset for a specific sprite in the sprite section of a GRF.
Definition: spritecache.cpp:510
Sprite::height
uint16 height
Height of the sprite.
Definition: spritecache.h:18
spriteloader.hpp
Sprite::x_offs
int16 x_offs
Number of pixels to shift the sprite to the right.
Definition: spritecache.h:20
GetOriginFileSlot
uint GetOriginFileSlot(SpriteID sprite)
Get the (FIOS) file slot of a given sprite.
Definition: spritecache.cpp:143
SpriteID
uint32 SpriteID
The number of a sprite, without mapping bits and colourtables.
Definition: gfx_type.h:17
GetRawSprite
void * GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator=nullptr, SpriteEncoder *encoder=nullptr)
Reads a sprite (from disk or sprite cache).
Definition: spritecache.cpp:876
GetSpriteLocalID
uint32 GetSpriteLocalID(SpriteID sprite)
Get the GRF-local sprite id of a given sprite.
Definition: spritecache.cpp:154
Sprite::width
uint16 width
Width of the sprite.
Definition: spritecache.h:19
SpriteEncoder
Interface for something that can encode a sprite.
Definition: spriteloader.hpp:82
SimpleSpriteAlloc
void * SimpleSpriteAlloc(size_t size)
Sprite allocator simply using malloc.
Definition: spritecache.cpp:817
SpriteType
SpriteType
Types of sprites that might be loaded.
Definition: gfx_type.h:301
Sprite::y_offs
int16 y_offs
Number of pixels to shift the sprite downwards.
Definition: spritecache.h:21
GetMaxSpriteID
uint GetMaxSpriteID()
Get a reasonable (upper bound) estimate of the maximum SpriteID used in OpenTTD; there will be no spr...
Definition: spritecache.cpp:187
ST_RECOLOUR
@ ST_RECOLOUR
Recolour sprite.
Definition: gfx_type.h:305
LoadNextSprite
bool LoadNextSprite(int load_index, byte file_index, uint file_sprite_id, byte container_version)
Load a real or recolour sprite.
Definition: spritecache.cpp:552
GfxClearSpriteCache
void GfxClearSpriteCache()
Remove all encoded sprites from the sprite cache without discarding sprite location information.
Definition: spritecache.cpp:976
gfx_type.h
Sprite
Data structure describing a sprite.
Definition: spritecache.h:17
GetSpriteCountForSlot
uint GetSpriteCountForSlot(uint file_slot, SpriteID begin, SpriteID end)
Count the sprites which originate from a specific file slot in a range of SpriteIDs.
Definition: spritecache.cpp:167