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 11:49:17 +0200 |
commit | 66c020034e8260e5e071481e68ab61cd264723ba (patch) | |
tree | b5263772d72175474d91ce2daa9dc037b99fab0d /platform/android/src | |
parent | a782a6d15b80dd83105604f3f779f6c83ba222e5 (diff) | |
download | qtlocation-mapboxgl-66c020034e8260e5e071481e68ab61cd264723ba.tar.gz |
[core] refactor RendererBackend
Diffstat (limited to 'platform/android/src')
-rwxr-xr-x | platform/android/src/android_renderer_backend.cpp | 51 | ||||
-rwxr-xr-x | platform/android/src/android_renderer_backend.hpp | 48 | ||||
-rw-r--r-- | platform/android/src/map_renderer.cpp | 4 |
3 files changed, 56 insertions, 47 deletions
diff --git a/platform/android/src/android_renderer_backend.cpp b/platform/android/src/android_renderer_backend.cpp index 52a9a93170..09c9e85ad5 100755 --- a/platform/android/src/android_renderer_backend.cpp +++ b/platform/android/src/android_renderer_backend.cpp @@ -1,6 +1,8 @@ #include "android_renderer_backend.hpp" +#include <mbgl/gfx/backend_scope.hpp> #include <mbgl/gl/context.hpp> +#include <mbgl/gl/renderable_resource.hpp> #include <EGL/egl.h> @@ -9,18 +11,27 @@ namespace mbgl { namespace android { -/** - * From mbgl::View - */ -void AndroidRendererBackend::bind() { - assert(gfx::BackendScope::exists()); - setFramebufferBinding(0); - setViewport(0, 0, getFramebufferSize()); +class AndroidGLRenderableResource final : public mbgl::gl::RenderableResource { +public: + AndroidGLRenderableResource(AndroidRendererBackend& backend_) : backend(backend_) { + } + + void bind() override { + assert(gfx::BackendScope::exists()); + backend.setFramebufferBinding(0); + backend.setViewport(0, 0, backend.getSize()); + } + +private: + AndroidRendererBackend& backend; +}; + +AndroidRendererBackend::AndroidRendererBackend() + : mbgl::gfx::Renderable({ 64, 64 }, std::make_unique<AndroidGLRenderableResource>(*this)) { } -/** - * From mbgl::RendererBackend. - */ +AndroidRendererBackend::~AndroidRendererBackend() = default; + gl::ProcAddress AndroidRendererBackend::getExtensionFunctionPointer(const char* name) { assert(gfx::BackendScope::exists()); return eglGetProcAddress(name); @@ -28,34 +39,26 @@ gl::ProcAddress AndroidRendererBackend::getExtensionFunctionPointer(const char* void AndroidRendererBackend::updateViewPort() { assert(gfx::BackendScope::exists()); - setViewport(0, 0, getFramebufferSize()); + setViewport(0, 0, size); } void AndroidRendererBackend::resizeFramebuffer(int width, int height) { - fbWidth = width; - fbHeight = height; + size = { static_cast<uint32_t>(width), static_cast<uint32_t>(height) }; } -PremultipliedImage AndroidRendererBackend::readFramebuffer() const { +PremultipliedImage AndroidRendererBackend::readFramebuffer() { assert(gfx::BackendScope::exists()); - return RendererBackend::readFramebuffer(getFramebufferSize()); -} - -mbgl::Size AndroidRendererBackend::getFramebufferSize() const { - return { static_cast<uint32_t>(fbWidth), static_cast<uint32_t>(fbHeight) }; + return gl::RendererBackend::readFramebuffer(size); } -/** - * From mbgl::RendererBackend. - */ void AndroidRendererBackend::updateAssumedState() { assumeFramebufferBinding(0); - assumeViewport(0, 0, getFramebufferSize()); + assumeViewport(0, 0, size); } void AndroidRendererBackend::markContextLost() { if (context) { - context->setCleanupOnDestruction(false); + getGLContext().setCleanupOnDestruction(false); } } diff --git a/platform/android/src/android_renderer_backend.hpp b/platform/android/src/android_renderer_backend.hpp index d2c100dcc1..f06f38e688 100755 --- a/platform/android/src/android_renderer_backend.hpp +++ b/platform/android/src/android_renderer_backend.hpp @@ -1,40 +1,42 @@ #pragma once -#include <mbgl/renderer/renderer_backend.hpp> +#include <mbgl/gfx/renderable.hpp> +#include <mbgl/gl/renderer_backend.hpp> namespace mbgl { namespace android { -class AndroidRendererBackend : public RendererBackend { +class AndroidRendererBackend : public gl::RendererBackend, public mbgl::gfx::Renderable { public: + AndroidRendererBackend(); + ~AndroidRendererBackend() override; - // mbgl::RendererBackend // - void bind() override; - void updateAssumedState() override; - mbgl::Size getFramebufferSize() const override; + void updateViewPort(); - // Ensures the current context is not - // cleaned up when destroyed + // Ensures the current context is not cleaned up when destroyed void markContextLost(); - void updateViewPort(); - void resizeFramebuffer(int width, int height); - PremultipliedImage readFramebuffer() const; - -protected: - // mbgl::RendererBackend // - gl::ProcAddress getExtensionFunctionPointer(const char*) override; - void activate() override {}; - void deactivate() override {}; + PremultipliedImage readFramebuffer(); + // mbgl::gfx::RendererBackend implementation +public: + mbgl::gfx::Renderable& getDefaultRenderable() override { + return *this; + } -private: - - // Minimum texture size according to OpenGL ES 2.0 specification. - int fbWidth = 64; - int fbHeight = 64; - +protected: + void activate() override { + // no-op + } + void deactivate() override { + // no-op + } + + // mbgl::gl::RendererBackend implementation +protected: + mbgl::gl::ProcAddress getExtensionFunctionPointer(const char*) override; + void updateAssumedState() override; }; } // namespace android diff --git a/platform/android/src/map_renderer.cpp b/platform/android/src/map_renderer.cpp index f0273cee50..7fefa457b1 100644 --- a/platform/android/src/map_renderer.cpp +++ b/platform/android/src/map_renderer.cpp @@ -1,6 +1,7 @@ #include "map_renderer.hpp" #include <mbgl/renderer/renderer.hpp> +#include <mbgl/gfx/backend_scope.hpp> #include <mbgl/util/shared_thread_pool.hpp> #include <mbgl/util/run_loop.hpp> @@ -159,6 +160,9 @@ void MapRenderer::onSurfaceCreated(JNIEnv&) { // Lock as the initialization can come from the main thread or the GL thread first std::lock_guard<std::mutex> lock(initialisationMutex); + // The GL context is already active if get a new surface. + gfx::BackendScope backendGuard { *backend, gfx::BackendScope::ScopeType::Implicit }; + // The android system will have already destroyed the underlying // GL resources if this is not the first initialization and an // attempt to clean them up will fail |