diff --git a/interfaces/Crafter.Asset-Texture.cppm b/interfaces/Crafter.Asset-Texture.cppm index 292c242..172fdc2 100644 --- a/interfaces/Crafter.Asset-Texture.cppm +++ b/interfaces/Crafter.Asset-Texture.cppm @@ -32,6 +32,12 @@ export namespace Crafter { Transparent // Color blending is used }; + struct TextureInfo { + std::uint16_t sizeX; + std::uint16_t sizeY; + OpaqueType opaque; + }; + template struct TextureAsset { std::uint16_t sizeX; @@ -62,6 +68,24 @@ export namespace Crafter { return tex; } + static TextureInfo LoadInfo(fs::path path) { + TextureInfo info; + + std::ifstream file(path, std::ios::binary); + + file.read(reinterpret_cast(&info.sizeX), sizeof(info.sizeX)); + file.read(reinterpret_cast(&info.sizeY), sizeof(info.sizeY)); + file.read(reinterpret_cast(&info.opaque), sizeof(info.opaque)); + + return info; + } + + static void Load(fs::path path, T* pixels, std::uint16_t sizeX, std::uint16_t sizeY) { + std::ifstream file(path, std::ios::binary); + file.seekg(sizeof(std::uint16_t) + sizeof(std::uint16_t) + sizeof(std::uint8_t), std::ios::cur); + file.read(reinterpret_cast(pixels), sizeX * sizeY * sizeof(T)); + } + template static TextureAsset LoadPNG(fs::path path) { TextureAsset tex;