PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
graphics_resource_cache.h
1#pragma once
2
3#include "pixelbullet/serialization/node.h"
4
5#include <chrono>
6#include <map>
7#include <memory>
8#include <typeindex>
9#include <unordered_map>
10
11namespace pixelbullet
12{
14
15class GraphicsResourceCache
16{
17public:
18 GraphicsResourceCache();
19 ~GraphicsResourceCache() = default;
20
21 void Update();
22 [[nodiscard]] std::shared_ptr<GraphicsResource> Find(const std::type_index& typeIndex, const Node& node) const;
23
24 template <typename T>
25 [[nodiscard]] std::shared_ptr<T> Find(const Node& node) const
26 {
27 return std::dynamic_pointer_cast<T>(Find(typeid(T), node));
28 }
29
30 void Add(const Node& node, const std::shared_ptr<GraphicsResource>& resource);
31 bool Remove(const std::type_index& type_index, const Node& node);
32
33 template <typename T>
34 bool Remove(const Node& node)
35 {
36 return Remove(typeid(T), node);
37 }
38
39 void Remove(const std::shared_ptr<GraphicsResource>& resource);
40 void Clear();
41
42private:
43 std::unordered_map<std::type_index, std::map<Node, std::shared_ptr<GraphicsResource>>> resources_;
44 std::chrono::steady_clock::time_point last_purge_time_;
45 std::chrono::seconds purge_interval_ = std::chrono::seconds(5);
46};
47} // namespace pixelbullet
Definition graphics_resource.h:8
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:49