summaryrefslogtreecommitdiff
path: root/include/mbgl/gfx/renderable.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/gfx/renderable.hpp')
-rw-r--r--include/mbgl/gfx/renderable.hpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/include/mbgl/gfx/renderable.hpp b/include/mbgl/gfx/renderable.hpp
new file mode 100644
index 0000000000..3a973e6693
--- /dev/null
+++ b/include/mbgl/gfx/renderable.hpp
@@ -0,0 +1,44 @@
+#pragma once
+
+#include <mbgl/util/size.hpp>
+
+#include <memory>
+#include <cassert>
+
+namespace mbgl {
+namespace gfx {
+
+class RenderableResource {
+protected:
+ explicit RenderableResource() = default;
+
+public:
+ virtual ~RenderableResource() = default;
+ RenderableResource(const RenderableResource&) = delete;
+ RenderableResource& operator=(const RenderableResource&) = delete;
+};
+
+class Renderable {
+protected:
+ Renderable(const Size size_, std::unique_ptr<RenderableResource> resource_)
+ : size(size_), resource(std::move(resource_)) {
+ }
+
+public:
+ Size getSize() const {
+ return size;
+ }
+
+ template <typename T>
+ T& getResource() const {
+ assert(resource);
+ return static_cast<T&>(*resource);
+ }
+
+protected:
+ Size size;
+ std::unique_ptr<RenderableResource> resource;
+};
+
+} // namespace gfx
+} // namespace mbgl