// Copyright 2019 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include #include "common/common_types.h" namespace Frontend { class ImageInterface; } // namespace Frontend namespace Core { struct CustomTexInfo { u32 width; u32 height; std::vector tex; }; // This is to avoid parsing the filename multiple times struct CustomTexPathInfo { std::string path; u64 hash; }; // TODO: think of a better name for this class... class CustomTexCache { public: explicit CustomTexCache(); ~CustomTexCache(); bool IsTextureDumped(u64 hash) const; void SetTextureDumped(u64 hash); bool IsTextureCached(u64 hash) const; const CustomTexInfo& LookupTexture(u64 hash) const; void CacheTexture(u64 hash, const std::vector& tex, u32 width, u32 height); void AddTexturePath(u64 hash, const std::string& path); void FindCustomTextures(u64 program_id); void PreloadTextures(Frontend::ImageInterface& image_interface); bool CustomTextureExists(u64 hash) const; const CustomTexPathInfo& LookupTexturePathInfo(u64 hash) const; bool IsTexturePathMapEmpty() const; private: std::unordered_set dumped_textures; std::unordered_map custom_textures; std::unordered_map custom_texture_paths; }; } // namespace Core