diff options
Diffstat (limited to 'src/mbgl/gfx/uniform.hpp')
-rw-r--r-- | src/mbgl/gfx/uniform.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/mbgl/gfx/uniform.hpp b/src/mbgl/gfx/uniform.hpp new file mode 100644 index 0000000000..bc6e7c1866 --- /dev/null +++ b/src/mbgl/gfx/uniform.hpp @@ -0,0 +1,51 @@ +#pragma once + +#include <mbgl/util/type_list.hpp> +#include <mbgl/util/indexed_tuple.hpp> + +#include <array> + +#define MBGL_DEFINE_UNIFORM_SCALAR(type_, name_) \ + struct name_ { \ + using Value = type_; \ + static constexpr auto name() { \ + return #name_; \ + } \ + } + +#define MBGL_DEFINE_UNIFORM_VECTOR(type_, n_, name_) \ + struct name_ { \ + using Value = std::array<type_, n_>; \ + static constexpr auto name() { \ + return #name_; \ + } \ + } + +#define MBGL_DEFINE_UNIFORM_MATRIX(type_, n_, name_) \ + struct name_ { \ + using Value = std::array<type_, n_ * n_>; \ + static constexpr auto name() { \ + return #name_; \ + } \ + } + +namespace mbgl { +namespace gfx { +namespace detail { + +template <class> +class UniformValues; + +template <class... Us> +class UniformValues<TypeList<Us...>> { +public: + using Type = IndexedTuple<TypeList<Us...>, TypeList<typename Us::Value...>>; +}; + +} // namespace detail + +template <class UniformTypeList> +using UniformValues = typename detail::UniformValues<UniformTypeList>::Type; + +} // namespace gfx +} // namespace mbgl |