#pragma once #include #include #include "ColorText.h" #include "Export.h" struct SDL_Surface; typedef uintptr_t TexposHandle; namespace DFHack { /** * The Textures module - loads and provides access to DFHack textures * \ingroup grp_modules * \ingroup grp_textures */ namespace Textures { const uint32_t TILE_WIDTH_PX = 8; const uint32_t TILE_HEIGHT_PX = 12; /** * Load texture and get handle. * Keep it to obtain valid texpos. */ DFHACK_EXPORT TexposHandle loadTexture(SDL_Surface* surface, bool reserved = false); /** * Load tileset from image file. * Return vector of handles to obtain valid texposes. */ DFHACK_EXPORT std::vector loadTileset(const std::string& file, int tile_px_w = TILE_WIDTH_PX, int tile_px_h = TILE_HEIGHT_PX, bool reserved = false); /** * Get texpos by handle. * Always use this function, if you need to get valid texpos for your texture. * Texpos can change on game textures reset, but handle will be the same. */ DFHACK_EXPORT long getTexposByHandle(TexposHandle handle); /** * Delete all info about texture by TexposHandle */ DFHACK_EXPORT void deleteHandle(TexposHandle handle); /** * Create new texture with RGBA32 format and pixels as data in row major order. * Register this texture and return TexposHandle. */ DFHACK_EXPORT TexposHandle createTile(std::vector& pixels, int tile_px_w = TILE_WIDTH_PX, int tile_px_h = TILE_HEIGHT_PX, bool reserved = false); /** * Create new textures as tileset with RGBA32 format and pixels as data in row major order. * Register this textures and return vector of TexposHandle. */ DFHACK_EXPORT std::vector createTileset(std::vector& pixels, int texture_px_w, int texture_px_h, int tile_px_w = TILE_WIDTH_PX, int tile_px_h = TILE_HEIGHT_PX, bool reserved = false); /** * Call this on DFHack init just once to setup interposed handlers and * init static assets. */ void init(DFHack::color_ostream& out); /** * Call this when DFHack is being unloaded. * */ void cleanup(); } // namespace Textures } // namespace DFHack