OpenTTD Source: src/spritecache.h File Reference

OpenTTD Source 13.1

Data Structures | Typedefs | Enumerations | Functions | Variables
spritecache.h File Reference
`#include "gfx_type.h"`
`#include "spriteloader/spriteloader.hpp"`

Go to the source code of this file.

## Data Structures
struct | Sprite
| Data structure describing a sprite. More...

## Typedefs
typedef void * | AllocatorProc(size_t size)

## Enumerations
enum | SpriteCacheCtrlFlags { SCCF_ALLOW_ZOOM_MIN_1X_PAL = 0, SCCF_ALLOW_ZOOM_MIN_1X_32BPP = 1, SCCF_ALLOW_ZOOM_MIN_2X_PAL = 2, SCCF_ALLOW_ZOOM_MIN_2X_32BPP = 3 }

## Functions
void * | SimpleSpriteAlloc (size_t size)
| Sprite allocator simply using malloc.
void * | GetRawSprite (SpriteID sprite, SpriteType type, AllocatorProc *allocator=nullptr, SpriteEncoder *encoder=nullptr)
| Reads a sprite (from disk or sprite cache). More...
bool | SpriteExists (SpriteID sprite)
SpriteType | GetSpriteType (SpriteID sprite)
| Get the sprite type of a given sprite. More...
SpriteFile * | GetOriginFile (SpriteID sprite)
| Get the SpriteFile of a given sprite. More...
uint32 | GetSpriteLocalID (SpriteID sprite)
| Get the GRF-local sprite id of a given sprite. More...
uint | GetSpriteCountForFile (const std::string &filename, SpriteID begin, SpriteID end)
| Count the sprites which originate from a specific file in a range of SpriteIDs. More...
uint | GetMaxSpriteID ()
| Get a reasonable (upper bound) estimate of the maximum SpriteID used in OpenTTD; there will be no sprites with a higher SpriteID, although there might be up to roughly a thousand unused SpriteIDs below this number. More...
static const Sprite * | GetSprite (SpriteID sprite, SpriteType type)
static const byte * | GetNonSprite (SpriteID sprite, SpriteType type)
void | GfxInitSpriteMem ()
void | GfxClearSpriteCache ()
| Remove all encoded sprites from the sprite cache without discarding sprite location information.
void | IncreaseSpriteLRU ()
SpriteFile & | OpenCachedSpriteFile (const std::string &filename, Subdirectory subdir, bool palette_remap)
| Open/get the SpriteFile that is cached for use in the sprite cache. More...
void | ReadGRFSpriteOffsets (SpriteFile &file)
| Parse the sprite section of GRFs. More...
size_t | GetGRFSpriteOffset (uint32 id)
| Get the file offset for a specific sprite in the sprite section of a GRF. More...
bool | LoadNextSprite (int load_index, SpriteFile &file, uint file_sprite_id)
| Load a real or recolour sprite. More...
bool | SkipSpriteData (SpriteFile &file, byte type, uint16 num)
| Skip the given amount of sprite graphics data. More...
void | DupSprite (SpriteID old_spr, SpriteID new_spr)

## Variables
uint | _sprite_cache_size

## Detailed Description

Functions to cache sprites in memory.

Definition in file spritecache.h.

## Enumeration Type Documentation

## ◆ SpriteCacheCtrlFlags

enum SpriteCacheCtrlFlags

Enumerator
SCCF_ALLOW_ZOOM_MIN_1X_PAL | Allow use of sprite min zoom setting at 1x in palette mode.
SCCF_ALLOW_ZOOM_MIN_1X_32BPP | Allow use of sprite min zoom setting at 1x in 32bpp mode.
SCCF_ALLOW_ZOOM_MIN_2X_PAL | Allow use of sprite min zoom setting at 2x in palette mode.
SCCF_ALLOW_ZOOM_MIN_2X_32BPP | Allow use of sprite min zoom setting at 2x in 32bpp mode.

Definition at line 25 of file spritecache.h.

## Function Documentation

## ◆ GetGRFSpriteOffset()

size_t GetGRFSpriteOffset | ( | uint32 | id | ) |

Get the file offset for a specific sprite in the sprite section of a GRF.

Parameters

  id | ID of the sprite to look up.

Returns
  Position of the sprite in the sprite section or SIZE_MAX if no such sprite is present.

Definition at line 546 of file spritecache.cpp.

References _grf_sprite_offsets.

## ◆ GetMaxSpriteID()

uint GetMaxSpriteID | ( |  | ) |

Get a reasonable (upper bound) estimate of the maximum SpriteID used in OpenTTD; there will be no sprites with a higher SpriteID, although there might be up to roughly a thousand unused SpriteIDs below this number.

Note
  It's actually the number of spritecache items.

Returns
  maximum SpriteID

Definition at line 221 of file spritecache.cpp.

Referenced by SpriteAlignerWindow::OnClick(), SpriteAlignerWindow::OnQueryTextFinished(), and UpdateCursorSize().

## ◆ GetOriginFile()

SpriteFile* GetOriginFile | ( | SpriteID | sprite | ) |

Get the SpriteFile of a given sprite.

Parameters

  sprite | The sprite to look at.

Returns
  The SpriteFile.

Definition at line 174 of file spritecache.cpp.

## ◆ GetRawSprite()

void* GetRawSprite | ( | SpriteID | sprite,
|  | SpriteType | type,
|  | AllocatorProc * | allocator,
|  | SpriteEncoder * | encoder
| ) |  |

Reads a sprite (from disk or sprite cache).

If the sprite is not available or of wrong type, a fallback sprite is returned.

Parameters

  sprite | Sprite to read.
  type | Expected sprite type.
  allocator | Allocator function to use. Set to nullptr to use the usual sprite cache.
  encoder | Sprite encoder to use. Set to nullptr to use the currently active blitter.

Returns
  Sprite raw data

Definition at line 941 of file spritecache.cpp.

## ◆ GetSpriteCountForFile()

uint GetSpriteCountForFile | ( | const std::string & | filename,
|  | SpriteID | begin,
|  | SpriteID | end
| ) |  |

Count the sprites which originate from a specific file in a range of SpriteIDs.

Parameters

  file | The loaded SpriteFile.
  begin | First sprite in range.
  end | First sprite not in range.

Returns
  Number of sprites.

Definition at line 198 of file spritecache.cpp.

References GetCachedSpriteFileByName().

## ◆ GetSpriteLocalID()

uint32 GetSpriteLocalID | ( | SpriteID | sprite | ) |

Get the GRF-local sprite id of a given sprite.

Parameters

  sprite | The sprite to look at.

Returns
  The GRF-local sprite id.

Definition at line 185 of file spritecache.cpp.

## ◆ GetSpriteType()

SpriteType GetSpriteType | ( | SpriteID | sprite | ) |

Get the sprite type of a given sprite.

Parameters

  sprite | The sprite to look at.

Returns
  the type of sprite.

Definition at line 163 of file spritecache.cpp.

Referenced by SpriteAlignerWindow::OnClick(), and SpriteAlignerWindow::OnQueryTextFinished().

## ◆ LoadNextSprite()

bool LoadNextSprite | ( | int | load_index,
|  | SpriteFile & | file,
|  | uint | file_sprite_id
| ) |  |

Load a real or recolour sprite.

Parameters

  load_index | Global sprite index.
  file | GRF to load from.
  file_sprite_id | Sprite number in the GRF.
  container_version | Container version of the GRF.

Returns
  True if a valid sprite was loaded, false on any error.

Definition at line 611 of file spritecache.cpp.

References _grf_sprite_offsets, SpriteFile::GetContainerVersion(), RandomAccessFile::GetPos(), RandomAccessFile::ReadByte(), RandomAccessFile::ReadDword(), ReadRecolourSprite(), RandomAccessFile::ReadWord(), RandomAccessFile::SkipBytes(), and ST_RECOLOUR.

Referenced by LoadGrfFile().

## ◆ OpenCachedSpriteFile()

SpriteFile& OpenCachedSpriteFile | ( | const std::string & | filename,
|  | Subdirectory | subdir,
|  | bool | palette_remap
| ) |  |

Open/get the SpriteFile that is cached for use in the sprite cache.

Parameters

  filename | Name of the file at the disk.
  subdir | The sub directory to search this file in.
  palette_remap | Whether a palette remap needs to be performed for this file.

Returns
  The reference to the SpriteCache.

Definition at line 96 of file spritecache.cpp.

References GetCachedSpriteFileByName().

Referenced by LoadGrfFile(), and LoadGrfFileIndexed().

## ◆ ReadGRFSpriteOffsets()

void ReadGRFSpriteOffsets | ( | SpriteFile & | file | ) |

Parse the sprite section of GRFs.

Parameters

  container_version | Container version of the GRF we're currently processing.

Definition at line 555 of file spritecache.cpp.

References _grf_sprite_offsets, SpriteFile::GetContainerVersion(), RandomAccessFile::GetPos(), RandomAccessFile::ReadByte(), RandomAccessFile::ReadDword(), SCC_MASK, SCC_PAL, SCCF_ALLOW_ZOOM_MIN_1X_32BPP, SCCF_ALLOW_ZOOM_MIN_1X_PAL, SCCF_ALLOW_ZOOM_MIN_2X_32BPP, SCCF_ALLOW_ZOOM_MIN_2X_PAL, RandomAccessFile::SeekTo(), SetBit(), and RandomAccessFile::SkipBytes().

Referenced by LoadGrfFile(), and LoadGrfFileIndexed().

## ◆ SkipSpriteData()

bool SkipSpriteData | ( | SpriteFile & | file,
|  | byte | type,
|  | uint16 | num
| ) |  |

Skip the given amount of sprite graphics data.

Parameters

  type | the type of sprite (compressed etc)
  num | the amount of sprites to skip

Returns
  true if the data could be correctly skipped.

Definition at line 126 of file spritecache.cpp.

References RandomAccessFile::ReadByte(), and RandomAccessFile::SkipBytes().