mirror of
https://github.com/DrBeef/Raze.git
synced 2024-12-14 14:41:37 +00:00
dcdffb73d0
git-svn-id: https://svn.eduke32.com/eduke32@6883 1a8010ca-5511-0410-912e-c29ae57300e0
54 lines
1.8 KiB
C
54 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 © 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_ */
|