summaryrefslogtreecommitdiff
path: root/include/mbgl/gfx/renderer_backend.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/gfx/renderer_backend.hpp')
-rw-r--r--include/mbgl/gfx/renderer_backend.hpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/mbgl/gfx/renderer_backend.hpp b/include/mbgl/gfx/renderer_backend.hpp
new file mode 100644
index 0000000000..032c7021da
--- /dev/null
+++ b/include/mbgl/gfx/renderer_backend.hpp
@@ -0,0 +1,57 @@
+#pragma once
+
+#include <mbgl/util/util.hpp>
+
+#include <memory>
+#include <mutex>
+
+namespace mbgl {
+namespace gfx {
+
+class Context;
+class Renderable;
+class BackendScope;
+
+// TODO: Rename to "Device"
+class RendererBackend {
+protected:
+ explicit RendererBackend();
+
+public:
+ virtual ~RendererBackend();
+ RendererBackend(const RendererBackend&) = delete;
+ RendererBackend& operator=(const RendererBackend&) = delete;
+
+ // Returns the device's context.
+ Context& getContext();
+
+ // Returns a reference to the default surface that should be rendered on.
+ virtual Renderable& getDefaultRenderable() = 0;
+
+protected:
+ virtual std::unique_ptr<Context> createContext() = 0;
+
+ // Called when the backend's GL context needs to be made active or inactive. These are called,
+ // as a matched pair, exclusively through BackendScope, in two situations:
+ //
+ // 1. When releasing GL resources during Renderer destruction
+ // (Including calling CustomLayerHost::deinitialize during RenderCustomLayer destruction)
+ // 2. When renderering through Renderer::render()
+ // (Including calling CustomLayerHost::initialize for newly added custom layers and
+ // CustomLayerHost::deinitialize on layer removal)
+ virtual void activate() = 0;
+ virtual void deactivate() = 0;
+
+protected:
+ std::unique_ptr<Context> context;
+ std::once_flag initialized;
+
+ friend class BackendScope;
+};
+
+MBGL_CONSTEXPR bool operator==(const RendererBackend& a, const RendererBackend& b) {
+ return &a == &b;
+}
+
+} // namespace gfx
+} // namespace mbgl