summaryrefslogtreecommitdiff
path: root/platform/default/src/mbgl/gl
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 /platform/default/src/mbgl/gl
parenta782a6d15b80dd83105604f3f779f6c83ba222e5 (diff)
downloadqtlocation-mapboxgl-66c020034e8260e5e071481e68ab61cd264723ba.tar.gz
[core] refactor RendererBackend
Diffstat (limited to 'platform/default/src/mbgl/gl')
-rw-r--r--platform/default/src/mbgl/gl/headless_backend.cpp40
-rw-r--r--platform/default/src/mbgl/gl/headless_frontend.cpp3
2 files changed, 26 insertions, 17 deletions
diff --git a/platform/default/src/mbgl/gl/headless_backend.cpp b/platform/default/src/mbgl/gl/headless_backend.cpp
index 4d05be1675..cbf451d80b 100644
--- a/platform/default/src/mbgl/gl/headless_backend.cpp
+++ b/platform/default/src/mbgl/gl/headless_backend.cpp
@@ -1,4 +1,5 @@
#include <mbgl/gl/headless_backend.hpp>
+#include <mbgl/gl/renderable_resource.hpp>
#include <mbgl/gl/context.hpp>
#include <mbgl/gfx/backend_scope.hpp>
@@ -7,27 +8,38 @@
#include <type_traits>
namespace mbgl {
+namespace gl {
-class HeadlessBackend::View {
+class HeadlessRenderableResource final : public gl::RenderableResource {
public:
- View(gl::Context& context, Size size_)
- : color(context.createRenderbuffer<gfx::RenderbufferPixelType::RGBA>(size_)),
+ HeadlessRenderableResource(gl::Context& context_, Size size_)
+ : context(context_),
+ color(context.createRenderbuffer<gfx::RenderbufferPixelType::RGBA>(size_)),
depthStencil(context.createRenderbuffer<gfx::RenderbufferPixelType::DepthStencil>(size_)),
framebuffer(context.createFramebuffer(color, depthStencil)) {
}
+ void bind() override {
+ context.bindFramebuffer = framebuffer.framebuffer;
+ context.scissorTest = false;
+ context.viewport = { 0, 0, framebuffer.size };
+ }
+
+ gl::Context& context;
gfx::Renderbuffer<gfx::RenderbufferPixelType::RGBA> color;
gfx::Renderbuffer<gfx::RenderbufferPixelType::DepthStencil> depthStencil;
gl::Framebuffer framebuffer;
};
HeadlessBackend::HeadlessBackend(Size size_)
- : size(size_) {
+ : mbgl::gfx::Renderable(size_, nullptr) {
}
HeadlessBackend::~HeadlessBackend() {
gfx::BackendScope guard { *this };
- view.reset();
+ resource.reset();
+ // Explicitly reset the context so that it is destructed and cleaned up before we destruct
+ // the impl object.
context.reset();
}
@@ -53,16 +65,11 @@ void HeadlessBackend::deactivate() {
active = false;
}
-void HeadlessBackend::bind() {
- gl::Context& context_ = getContext();
-
- if (!view) {
- view = std::make_unique<View>(context_, size);
+gfx::Renderable& HeadlessBackend::getDefaultRenderable() {
+ if (!resource) {
+ resource = std::make_unique<HeadlessRenderableResource>(static_cast<gl::Context&>(getContext()), size);
}
-
- context_.bindFramebuffer = view->framebuffer.framebuffer;
- context_.scissorTest = false;
- context_.viewport = { 0, 0, size };
+ return *this;
}
Size HeadlessBackend::getFramebufferSize() const {
@@ -75,11 +82,12 @@ void HeadlessBackend::updateAssumedState() {
void HeadlessBackend::setSize(Size size_) {
size = size_;
- view.reset();
+ resource.reset();
}
PremultipliedImage HeadlessBackend::readStillImage() {
- return getContext().readFramebuffer<PremultipliedImage>(size);
+ return static_cast<gl::Context&>(getContext()).readFramebuffer<PremultipliedImage>(size);
}
+} // namespace gl
} // namespace mbgl
diff --git a/platform/default/src/mbgl/gl/headless_frontend.cpp b/platform/default/src/mbgl/gl/headless_frontend.cpp
index 3c8188c8a3..406c197904 100644
--- a/platform/default/src/mbgl/gl/headless_frontend.cpp
+++ b/platform/default/src/mbgl/gl/headless_frontend.cpp
@@ -1,4 +1,5 @@
#include <mbgl/gl/headless_frontend.hpp>
+#include <mbgl/gfx/backend_scope.hpp>
#include <mbgl/renderer/renderer.hpp>
#include <mbgl/renderer/renderer_state.hpp>
#include <mbgl/renderer/update_parameters.hpp>
@@ -58,7 +59,7 @@ Renderer* HeadlessFrontend::getRenderer() {
return renderer.get();
}
-RendererBackend* HeadlessFrontend::getBackend() {
+gfx::RendererBackend* HeadlessFrontend::getBackend() {
return &backend;
}