diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-07-05 20:08:51 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-07-18 10:45:12 +0200 |
commit | 46c43510d7ac5fe078010d5f0f5d39c4d5df3305 (patch) | |
tree | 5dc78959e174dc0e83198a4d92e86f65f33bb168 /include/mbgl/renderer/renderer_backend.hpp | |
parent | ee205ca9ca3f808fa2cc16295ebde0a7c3867381 (diff) | |
download | qtlocation-mapboxgl-46c43510d7ac5fe078010d5f0f5d39c4d5df3305.tar.gz |
[core] rename backend to renderer backend
Diffstat (limited to 'include/mbgl/renderer/renderer_backend.hpp')
-rw-r--r-- | include/mbgl/renderer/renderer_backend.hpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/include/mbgl/renderer/renderer_backend.hpp b/include/mbgl/renderer/renderer_backend.hpp new file mode 100644 index 0000000000..9d967fd51b --- /dev/null +++ b/include/mbgl/renderer/renderer_backend.hpp @@ -0,0 +1,84 @@ +#pragma once + +#include <mbgl/map/view.hpp> +#include <mbgl/renderer/backend_scope.hpp> +#include <mbgl/util/image.hpp> +#include <mbgl/util/size.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; + + virtual BackendScope::ScopeType getScopeType() const { + return BackendScope::ScopeType::Explicit; + } + +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 initializeExtension(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 CustomLayerDeinitializeFunction during RenderCustomLayer destruction) + // 2. When renderering through Renderer::render() + // (Including calling CustomLayerDeinitializeFunction for newly added custom layers and + // CustomLayerDeinitializeFunction 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 BackendScope; +}; + +} // namespace mbgl |