summaryrefslogtreecommitdiff
path: root/include/mbgl/renderer
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2019-04-01 16:56:24 +0200
committerKonstantin Käfer <mail@kkaefer.com>2019-04-05 11:49:17 +0200
commit66c020034e8260e5e071481e68ab61cd264723ba (patch)
treeb5263772d72175474d91ce2daa9dc037b99fab0d /include/mbgl/renderer
parenta782a6d15b80dd83105604f3f779f6c83ba222e5 (diff)
downloadqtlocation-mapboxgl-66c020034e8260e5e071481e68ab61cd264723ba.tar.gz
[core] refactor RendererBackend
Diffstat (limited to 'include/mbgl/renderer')
-rw-r--r--include/mbgl/renderer/renderer.hpp7
-rw-r--r--include/mbgl/renderer/renderer_backend.hpp92
2 files changed, 5 insertions, 94 deletions
diff --git a/include/mbgl/renderer/renderer.hpp b/include/mbgl/renderer/renderer.hpp
index 0bed4cdaa8..aa06210804 100644
--- a/include/mbgl/renderer/renderer.hpp
+++ b/include/mbgl/renderer/renderer.hpp
@@ -13,16 +13,19 @@
namespace mbgl {
-class RendererBackend;
class RendererObserver;
class RenderedQueryOptions;
class Scheduler;
class SourceQueryOptions;
class UpdateParameters;
+namespace gfx {
+class RendererBackend;
+} // namespace gfx
+
class Renderer {
public:
- Renderer(RendererBackend&, float pixelRatio_, Scheduler&,
+ Renderer(gfx::RendererBackend&, float pixelRatio_, Scheduler&,
GLContextMode = GLContextMode::Unique,
const optional<std::string> programCacheDir = {},
const optional<std::string> localFontFamily = {});
diff --git a/include/mbgl/renderer/renderer_backend.hpp b/include/mbgl/renderer/renderer_backend.hpp
deleted file mode 100644
index f75d00ebb3..0000000000
--- a/include/mbgl/renderer/renderer_backend.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-#pragma once
-
-#include <mbgl/gfx/backend_scope.hpp>
-#include <mbgl/util/image.hpp>
-#include <mbgl/util/size.hpp>
-#include <mbgl/util/util.hpp>
-
-#include <memory>
-#include <mutex>
-
-namespace mbgl {
-
-namespace gl {
-class Context;
-using ProcAddress = void (*)();
-using FramebufferID = uint32_t;
-} // namespace gl
-
-// The RendererBackend is used by the Renderer to facilitate
-// the actual rendering.
-class RendererBackend {
-public:
- RendererBackend();
- virtual ~RendererBackend();
-
- // Returns the backend's context which manages OpenGL state.
- gl::Context& getContext();
-
- // Called prior to rendering to update the internally assumed OpenGL state.
- virtual void updateAssumedState() = 0;
-
- // Called when this backend is used for rendering. Implementations should ensure that a renderable
- // object is bound and glClear/glDraw* calls can be done. They should also make sure that
- // calling .bind() repeatedly is a no-op and that the appropriate gl::Context values are
- // set to the current state.
- virtual void bind() = 0;
-
- virtual Size getFramebufferSize() const = 0;
-
-protected:
- // Called with the name of an OpenGL extension that should be loaded. RendererBackend implementations
- // must call the API-specific version that obtains the function pointer for this function,
- // or a null pointer if unsupported/unavailable.
- virtual gl::ProcAddress getExtensionFunctionPointer(const char*) = 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;
-
- // Reads the color pixel data from the currently bound framebuffer.
- PremultipliedImage readFramebuffer(const Size&) const;
-
- // A constant to signal that a framebuffer is bound, but with an unknown ID.
- static constexpr const gl::FramebufferID ImplicitFramebufferBinding =
- std::numeric_limits<gl::FramebufferID>::max();
-
- // Tells the renderer that OpenGL state has already been set by the windowing toolkit.
- // It sets the internal assumed state to the supplied values.
- void assumeFramebufferBinding(gl::FramebufferID fbo);
- void assumeViewport(int32_t x, int32_t y, const Size&);
- void assumeScissorTest(bool);
-
- // Returns true when assumed framebuffer binding hasn't changed from the implicit binding.
- bool implicitFramebufferBound();
-
- // Triggers an OpenGL state update if the internal assumed state doesn't match the
- // supplied values.
- void setFramebufferBinding(gl::FramebufferID fbo);
- void setViewport(int32_t x, int32_t y, const Size&);
- void setScissorTest(bool);
-
-protected:
- std::unique_ptr<gl::Context> context;
-
-private:
- std::once_flag initialized;
-
- friend class gfx::BackendScope;
-};
-
-MBGL_CONSTEXPR bool operator==(const RendererBackend& a, const RendererBackend& b) {
- return &a == &b;
-}
-
-} // namespace mbgl