diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-04-01 16:56:24 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-04-05 10:47:19 +0200 |
commit | be7a78e6a040b0e4b88a1ba8088b7389e7da9a69 (patch) | |
tree | 716449276ec4a1e463bc1abd71c283f94859fc93 /include/mbgl/gfx | |
parent | 25c2844e6f9bb8188104bc3f8a856ef6a8a37a1f (diff) | |
download | qtlocation-mapboxgl-be7a78e6a040b0e4b88a1ba8088b7389e7da9a69.tar.gz |
[core] refactor RendererBackend
Diffstat (limited to 'include/mbgl/gfx')
-rw-r--r-- | include/mbgl/gfx/backend_scope.hpp | 3 | ||||
-rw-r--r-- | include/mbgl/gfx/renderer_backend.hpp | 57 |
2 files changed, 58 insertions, 2 deletions
diff --git a/include/mbgl/gfx/backend_scope.hpp b/include/mbgl/gfx/backend_scope.hpp index b92334ae0f..ae42123e97 100644 --- a/include/mbgl/gfx/backend_scope.hpp +++ b/include/mbgl/gfx/backend_scope.hpp @@ -1,11 +1,10 @@ #pragma once namespace mbgl { +namespace gfx { class RendererBackend; -namespace gfx { - class BackendScope { public: // There are two types of scopes: Creating an "Implicit" scope tells Mapbox GL that the 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 |