diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/mbgl/gfx/backend.hpp | 44 | ||||
-rw-r--r-- | include/mbgl/gfx/renderer_backend.hpp | 5 | ||||
-rw-r--r-- | include/mbgl/gl/renderer_backend.hpp | 3 |
3 files changed, 49 insertions, 3 deletions
diff --git a/include/mbgl/gfx/backend.hpp b/include/mbgl/gfx/backend.hpp new file mode 100644 index 0000000000..eed63dfcba --- /dev/null +++ b/include/mbgl/gfx/backend.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include <cstdint> +#include <cstdlib> +#include <memory> + +namespace mbgl { +namespace gfx { + +class Backend { +public: + enum class Type : uint8_t { + OpenGL, + }; + + static constexpr Type DefaultType = Type::OpenGL; + + static void SetType(const Type value) { + if (Value(value) != value) { + abort(); // SetType must be called prior to any GetType calls. + } + } + + static Type GetType() { + return Value(DefaultType); + } + + template <typename T, typename... Args> + static std::unique_ptr<T> Create(Args... args) { + return Create<Type::OpenGL, T, Args...>(std::forward<Args>(args)...); + } + +private: + template <Type, typename T, typename... Args> + static std::unique_ptr<T> Create(Args...); + + static Type Value(Type value) { + static const Type type = value; + return type; + } +}; + +} // namespace gfx +} // namespace mbgl diff --git a/include/mbgl/gfx/renderer_backend.hpp b/include/mbgl/gfx/renderer_backend.hpp index 29f6b43a8f..aa76d7e502 100644 --- a/include/mbgl/gfx/renderer_backend.hpp +++ b/include/mbgl/gfx/renderer_backend.hpp @@ -30,6 +30,11 @@ public: // Returns the device's context. Context& getContext(); + template <typename T> + T& getContext() { + return static_cast<T&>(getContext()); + } + bool contextIsShared() const { return contextMode == ContextMode::Shared; } diff --git a/include/mbgl/gl/renderer_backend.hpp b/include/mbgl/gl/renderer_backend.hpp index ba87e4ce4f..cfa28ddaeb 100644 --- a/include/mbgl/gl/renderer_backend.hpp +++ b/include/mbgl/gl/renderer_backend.hpp @@ -17,9 +17,6 @@ public: RendererBackend(gfx::ContextMode); ~RendererBackend() override; - // Returns the backend's context which manages OpenGL state. - Context& getGLContext(); - // Called prior to rendering to update the internally assumed OpenGL state. virtual void updateAssumedState() = 0; |