From 141e995806576364d185626176c1b993fc519291 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 28 Oct 2016 16:39:50 -0700 Subject: [core] Add support for data-driven styling --- src/mbgl/gl/uniform.hpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'src/mbgl/gl/uniform.hpp') diff --git a/src/mbgl/gl/uniform.hpp b/src/mbgl/gl/uniform.hpp index 726cd4fe10..92136b61c2 100644 --- a/src/mbgl/gl/uniform.hpp +++ b/src/mbgl/gl/uniform.hpp @@ -50,32 +50,49 @@ template using UniformMatrix = Uniform>; #define MBGL_DEFINE_UNIFORM_SCALAR(type_, name_) \ - struct name_ : ::mbgl::gl::UniformScalar { static constexpr auto name = #name_; } + struct name_ : ::mbgl::gl::UniformScalar { static auto name() { return #name_; } } #define MBGL_DEFINE_UNIFORM_VECTOR(type_, n_, name_) \ - struct name_ : ::mbgl::gl::UniformVector { static constexpr auto name = #name_; } + struct name_ : ::mbgl::gl::UniformVector { static auto name() { return #name_; } } #define MBGL_DEFINE_UNIFORM_MATRIX(type_, n_, name_) \ - struct name_ : ::mbgl::gl::UniformMatrix { static constexpr auto name = #name_; } + struct name_ : ::mbgl::gl::UniformMatrix { static auto name() { return #name_; } } UniformLocation uniformLocation(ProgramID, const char * name); template class Uniforms { public: + using Types = TypeList; using State = IndexedTuple, TypeList>; using Values = IndexedTuple, TypeList>; static State state(const ProgramID& id) { - return State { { uniformLocation(id, Us::name) }... }; + return State { { uniformLocation(id, Us::name()) }... }; } - static std::function binder(State& state, Values&& values_) { - return [&state, values = std::move(values_)] () mutable { - util::ignore({ (state.template get() = values.template get(), 0)... }); - }; + static void bind(State& state, Values&& values) { + util::ignore({ (state.template get() = values.template get(), 0)... }); } }; + +namespace detail { + +template +struct ConcatenateUniforms; + +template +struct ConcatenateUniforms, TypeList> { + using Type = Uniforms; +}; + +} // namespace detail + +template +using ConcatenateUniforms = typename detail::ConcatenateUniforms< + typename A::Types, + typename B::Types>::Type; + } // namespace gl } // namespace mbgl -- cgit v1.2.1