diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-06-13 10:50:16 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-07-18 10:45:12 +0200 |
commit | 3832f8d0d8194b81ea34a045e19b0d5bc7a89e25 (patch) | |
tree | bbb4b277e1e74bde457271b9b9a5b6a9ec3ad5fb /test/src | |
parent | 39a732d7ae3cb1b927d94c4b1154b42d9565356a (diff) | |
download | qtlocation-mapboxgl-3832f8d0d8194b81ea34a045e19b0d5bc7a89e25.tar.gz |
[core] renderer interface
Diffstat (limited to 'test/src')
-rw-r--r-- | test/src/mbgl/test/stub_renderer_frontend.cpp | 52 | ||||
-rw-r--r-- | test/src/mbgl/test/stub_renderer_frontend.hpp | 44 | ||||
-rw-r--r-- | test/src/mbgl/test/util.cpp | 2 |
3 files changed, 97 insertions, 1 deletions
diff --git a/test/src/mbgl/test/stub_renderer_frontend.cpp b/test/src/mbgl/test/stub_renderer_frontend.cpp new file mode 100644 index 0000000000..7edcfd397e --- /dev/null +++ b/test/src/mbgl/test/stub_renderer_frontend.cpp @@ -0,0 +1,52 @@ +#include <mbgl/test/stub_renderer_frontend.hpp> + +#include <mbgl/map/view.hpp> +#include <mbgl/renderer/renderer.hpp> + +namespace mbgl { + +StubRendererFrontend::StubRendererFrontend(std::unique_ptr<Renderer> renderer_, InvalidateCallback invalidate) + : renderer(std::move(renderer_)) + , asyncInvalidate([this, invalidate=std::move(invalidate)]() { + invalidate(*this); + }) { +} + +StubRendererFrontend::StubRendererFrontend(std::unique_ptr<Renderer> renderer_, View& view) + : renderer(std::move(renderer_)) + , asyncInvalidate([&]() { + this->render(view); + }) { +} + +StubRendererFrontend::~StubRendererFrontend() { + reset(); +} + +void StubRendererFrontend::reset() { + if (renderer) { + renderer.reset(); + } +} + +void StubRendererFrontend::setObserver(RendererObserver& observer) { + if (!renderer) return; + renderer->setObserver(&observer); +} + +void StubRendererFrontend::update(std::shared_ptr<UpdateParameters> params) { + updateParameters = std::move(params); + asyncInvalidate.send(); +} + +void StubRendererFrontend::render(View& view) { + if (!updateParameters || !renderer) return; + renderer->render(view, *updateParameters); +} + +Renderer* StubRendererFrontend::getRenderer() { + return renderer.get(); +} + +} // namespace mbgl + diff --git a/test/src/mbgl/test/stub_renderer_frontend.hpp b/test/src/mbgl/test/stub_renderer_frontend.hpp new file mode 100644 index 0000000000..f6dd1d0472 --- /dev/null +++ b/test/src/mbgl/test/stub_renderer_frontend.hpp @@ -0,0 +1,44 @@ + +#pragma once + +#include <mbgl/renderer/renderer_frontend.hpp> +#include <mbgl/util/async_task.hpp> +#include <mbgl/util/geo.hpp> +#include <mbgl/util/feature.hpp> +#include <mbgl/renderer/query.hpp> + +#include <functional> +#include <memory> + +namespace mbgl { + +class Renderer; +class View; + +class StubRendererFrontend : public RendererFrontend { +public: + // Calls the provided callback when it's time to render + using InvalidateCallback = std::function<void (StubRendererFrontend&)>; + StubRendererFrontend(std::unique_ptr<Renderer>, InvalidateCallback); + + // Will render async + StubRendererFrontend(std::unique_ptr<Renderer>, View&); + + ~StubRendererFrontend() override; + + void reset() override; + + void setObserver(RendererObserver&) override; + + void update(std::shared_ptr<UpdateParameters>) override; + void render(View& view); + + Renderer* getRenderer(); + +private: + std::unique_ptr<Renderer> renderer; + std::shared_ptr<UpdateParameters> updateParameters; + util::AsyncTask asyncInvalidate; +}; + +} // namespace mbgl diff --git a/test/src/mbgl/test/util.cpp b/test/src/mbgl/test/util.cpp index 7ca2d72504..f3b0bbc96f 100644 --- a/test/src/mbgl/test/util.cpp +++ b/test/src/mbgl/test/util.cpp @@ -106,7 +106,7 @@ std::shared_ptr<HeadlessDisplay> sharedDisplay() { PremultipliedImage render(Map& map, OffscreenView& view) { PremultipliedImage result; - map.renderStill(view, [&](std::exception_ptr) { + map.renderStill([&](std::exception_ptr) { result = view.readStillImage(); }); |