TextureDatabase.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #pragma once
  2. #include "../../Include/RmlUi/Core/CallbackTexture.h"
  3. #include "../../Include/RmlUi/Core/StableVector.h"
  4. #include "../../Include/RmlUi/Core/Types.h"
  5. namespace Rml {
  6. class RenderInterface;
  7. class CallbackTextureDatabase : NonCopyMoveable {
  8. public:
  9. CallbackTextureDatabase();
  10. ~CallbackTextureDatabase();
  11. StableVectorIndex CreateTexture(CallbackTextureFunction&& callback);
  12. void ReleaseTexture(RenderInterface* render_interface, StableVectorIndex callback_index);
  13. Vector2i GetDimensions(RenderManager* render_manager, RenderInterface* render_interface, StableVectorIndex callback_index);
  14. TextureHandle GetHandle(RenderManager* render_manager, RenderInterface* render_interface, StableVectorIndex callback_index);
  15. size_t size() const;
  16. void ReleaseAllTextures(RenderInterface* render_interface);
  17. private:
  18. struct CallbackTextureEntry {
  19. CallbackTextureFunction callback;
  20. TextureHandle texture_handle = {};
  21. Vector2i dimensions;
  22. bool load_failed = false;
  23. };
  24. CallbackTextureEntry& EnsureLoaded(RenderManager* render_manager, RenderInterface* render_interface, StableVectorIndex callback_index);
  25. StableVector<CallbackTextureEntry> texture_list;
  26. };
  27. class FileTextureDatabase : NonCopyMoveable {
  28. public:
  29. FileTextureDatabase();
  30. ~FileTextureDatabase();
  31. TextureFileIndex InsertTexture(const String& source);
  32. TextureHandle GetHandle(RenderInterface* render_interface, TextureFileIndex index);
  33. Vector2i GetDimensions(RenderInterface* render_interface, TextureFileIndex index);
  34. void GetSourceList(StringList& source_list) const;
  35. bool ReleaseTexture(RenderInterface* render_interface, const String& source);
  36. void ReleaseAllTextures(RenderInterface* render_interface);
  37. private:
  38. struct FileTextureEntry {
  39. TextureHandle texture_handle = {};
  40. Vector2i dimensions;
  41. bool load_texture_failed = false;
  42. };
  43. FileTextureEntry LoadTextureEntry(RenderInterface* render_interface, const String& source);
  44. FileTextureEntry& EnsureLoaded(RenderInterface* render_interface, TextureFileIndex index);
  45. Vector<FileTextureEntry> texture_list;
  46. UnorderedMap<String, TextureFileIndex> texture_map; // key: source, value: index into 'texture_list'
  47. };
  48. class TextureDatabase {
  49. public:
  50. FileTextureDatabase file_database;
  51. CallbackTextureDatabase callback_database;
  52. };
  53. } // namespace Rml