diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-11-22 15:17:51 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-11-22 20:58:51 +0100 |
commit | 117863f1114551407c481abc752f5fcfd139c878 (patch) | |
tree | 4c408a8a3809df59fdfac1bc622ea79fbdbe611e /platform/default | |
parent | 3bc79e316e343d59f77811bca4ed6c594431e91c (diff) | |
download | qtlocation-mapboxgl-117863f1114551407c481abc752f5fcfd139c878.tar.gz |
[build] move headless rendering files to platform/default
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/headless_backend_osmesa.cpp | 2 | ||||
-rw-r--r-- | platform/default/mbgl/gl/headless_backend.cpp (renamed from platform/default/headless_backend.cpp) | 4 | ||||
-rw-r--r-- | platform/default/mbgl/gl/headless_backend.hpp | 57 | ||||
-rw-r--r-- | platform/default/mbgl/gl/headless_display.cpp (renamed from platform/default/headless_display.cpp) | 2 | ||||
-rw-r--r-- | platform/default/mbgl/gl/headless_display.hpp | 20 | ||||
-rw-r--r-- | platform/default/mbgl/gl/offscreen_view.cpp (renamed from platform/default/offscreen_view.cpp) | 2 | ||||
-rw-r--r-- | platform/default/mbgl/gl/offscreen_view.hpp | 33 |
7 files changed, 115 insertions, 5 deletions
diff --git a/platform/default/headless_backend_osmesa.cpp b/platform/default/headless_backend_osmesa.cpp index 04709d4a1b..3dac5913ac 100644 --- a/platform/default/headless_backend_osmesa.cpp +++ b/platform/default/headless_backend_osmesa.cpp @@ -1,4 +1,4 @@ -#include <mbgl/platform/default/headless_backend.hpp> +#include <mbgl/gl/headless_backend.hpp> #include <mbgl/platform/log.hpp> #include <GL/osmesa.h> diff --git a/platform/default/headless_backend.cpp b/platform/default/mbgl/gl/headless_backend.cpp index 30ce8d2230..0bfdf11c98 100644 --- a/platform/default/headless_backend.cpp +++ b/platform/default/mbgl/gl/headless_backend.cpp @@ -1,5 +1,5 @@ -#include <mbgl/platform/default/headless_backend.hpp> -#include <mbgl/platform/default/headless_display.hpp> +#include <mbgl/gl/headless_backend.hpp> +#include <mbgl/gl/headless_display.hpp> #include <cassert> #include <stdexcept> diff --git a/platform/default/mbgl/gl/headless_backend.hpp b/platform/default/mbgl/gl/headless_backend.hpp new file mode 100644 index 0000000000..da8c55e044 --- /dev/null +++ b/platform/default/mbgl/gl/headless_backend.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include <mbgl/gl/extension.hpp> + +#include <mbgl/map/backend.hpp> + +#include <memory> +#include <functional> + +namespace mbgl { + +class HeadlessDisplay; + +class HeadlessBackend : public Backend { +public: + HeadlessBackend(); + HeadlessBackend(std::shared_ptr<HeadlessDisplay>); + ~HeadlessBackend() override; + + void invalidate() override; + void activate() override; + void deactivate() override; + void notifyMapChange(MapChange) override; + + void setMapChangeCallback(std::function<void(MapChange)>&& cb) { mapChangeCallback = std::move(cb); } + + struct Impl { + virtual ~Impl() {} + virtual void activateContext() = 0; + virtual void deactivateContext() {} + }; + +private: + // Implementation specific functions + static gl::glProc initializeExtension(const char*); + + bool hasContext() const { return bool(impl); } + bool hasDisplay(); + + void createContext(); + +private: + void destroyContext(); + + void activateContext(); + void deactivateContext(); + + std::unique_ptr<Impl> impl; + std::shared_ptr<HeadlessDisplay> display; + + bool extensionsLoaded = false; + bool active = false; + + std::function<void(MapChange)> mapChangeCallback; +}; + +} // namespace mbgl diff --git a/platform/default/headless_display.cpp b/platform/default/mbgl/gl/headless_display.cpp index 4ab111f775..6247046c29 100644 --- a/platform/default/headless_display.cpp +++ b/platform/default/mbgl/gl/headless_display.cpp @@ -1,4 +1,4 @@ -#include <mbgl/platform/default/headless_display.hpp> +#include <mbgl/gl/headless_display.hpp> namespace mbgl { diff --git a/platform/default/mbgl/gl/headless_display.hpp b/platform/default/mbgl/gl/headless_display.hpp new file mode 100644 index 0000000000..a5c95085b8 --- /dev/null +++ b/platform/default/mbgl/gl/headless_display.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include <memory> + +namespace mbgl { + +class HeadlessDisplay { +public: + HeadlessDisplay(); + ~HeadlessDisplay(); + + template <typename DisplayAttribute> + DisplayAttribute attribute() const; + +private: + class Impl; + std::unique_ptr<Impl> impl; +}; + +} // namespace mbgl diff --git a/platform/default/offscreen_view.cpp b/platform/default/mbgl/gl/offscreen_view.cpp index 574686ebc9..16faf6a4a9 100644 --- a/platform/default/offscreen_view.cpp +++ b/platform/default/mbgl/gl/offscreen_view.cpp @@ -1,4 +1,4 @@ -#include <mbgl/platform/default/offscreen_view.hpp> +#include <mbgl/gl/offscreen_view.hpp> #include <mbgl/gl/context.hpp> #include <cstring> diff --git a/platform/default/mbgl/gl/offscreen_view.hpp b/platform/default/mbgl/gl/offscreen_view.hpp new file mode 100644 index 0000000000..0e839e14cc --- /dev/null +++ b/platform/default/mbgl/gl/offscreen_view.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include <mbgl/map/view.hpp> +#include <mbgl/gl/framebuffer.hpp> +#include <mbgl/gl/renderbuffer.hpp> +#include <mbgl/util/optional.hpp> +#include <mbgl/util/image.hpp> + +namespace mbgl { + +namespace gl { +class Context; +} // namespace gl + +class OffscreenView : public View { +public: + OffscreenView(gl::Context&, Size size = { 256, 256 }); + + void bind() override; + + PremultipliedImage readStillImage(); + +public: + const Size size; + +private: + gl::Context& context; + optional<gl::Framebuffer> framebuffer; + optional<gl::Renderbuffer<gl::RenderbufferType::RGBA>> color; + optional<gl::Renderbuffer<gl::RenderbufferType::DepthStencil>> depthStencil; +}; + +} // namespace mbgl |