mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-18 10:11:50 +00:00
55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
|
/*
|
|||
|
* tilepacker.h
|
|||
|
* A k-d tree based bin packer that organizes rectangular tiles to fit
|
|||
|
* neatly into one texture.
|
|||
|
*
|
|||
|
* Copyright <EFBFBD> 2018, Alex Dawson. All rights reserved.
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef TILEPACKER_H_
|
|||
|
#define TILEPACKER_H_
|
|||
|
|
|||
|
#define MAXTILESHEETS 64
|
|||
|
#define MAXPACKEDTILES MAXTILES+1
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint32_t u, v, width, height;
|
|||
|
} TileRect;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint32_t tilesheetID;
|
|||
|
TileRect rect;
|
|||
|
} Tile;
|
|||
|
|
|||
|
// Initialize the specified tilesheet
|
|||
|
// tilesheetId must be less than MAXTILESHEETS
|
|||
|
// Re-initializing an existing tilesheet will discard all of its contents
|
|||
|
void tilepacker_initTilesheet(uint32_t tilesheetID, uint32_t tilesheetWidth, uint32_t tilesheetHeight);
|
|||
|
|
|||
|
// Adds a tile into sorted collection to be packed
|
|||
|
// uid can be any unique key -- picnums are used for indexed colour textures
|
|||
|
void tilepacker_addTile(uint32_t tileUID, uint32_t tileWidth, uint32_t tileHeight);
|
|||
|
|
|||
|
// Packs the sorted collection of tiles that have been added with tilepacker_addTile()
|
|||
|
// Returns true if all nodes could be packed succesfully into the specified tilesheet
|
|||
|
// tilepacker_pack can be called again with a different tilesheetId to pack the remaining tiles
|
|||
|
char tilepacker_pack(uint32_t tilesheetID);
|
|||
|
|
|||
|
// Discard the rejected tiles so that they will not be carried over to the next call to tilepacker_pack
|
|||
|
void tilepacker_discardRejects();
|
|||
|
|
|||
|
// Sets pOutput to contain the Tile information for a packed tile with the given tileUID
|
|||
|
// Returns true if the Tile has been packed, false otherwise
|
|||
|
// If pOutput is NULL, the function solely returns whether or not the Tile has been packed
|
|||
|
char tilepacker_getTile(uint32_t tileUID, Tile *pOutput);
|
|||
|
|
|||
|
// Returns true if the Tile with tileUID has been packed, false otherwise
|
|||
|
static inline char tilepacker_isTilePacked(uint32_t tileUID)
|
|||
|
{
|
|||
|
return tilepacker_getTile(tileUID, NULL);
|
|||
|
};
|
|||
|
|
|||
|
#endif /* TILEPACKER_H_ */
|