summaryrefslogtreecommitdiff
path: root/src/mbgl/gl/uniform.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/gl/uniform.hpp')
-rw-r--r--src/mbgl/gl/uniform.hpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mbgl/gl/uniform.hpp b/src/mbgl/gl/uniform.hpp
index 92136b61c2..34a32aeee9 100644
--- a/src/mbgl/gl/uniform.hpp
+++ b/src/mbgl/gl/uniform.hpp
@@ -6,6 +6,7 @@
#include <mbgl/util/indexed_tuple.hpp>
#include <array>
+#include <vector>
#include <functional>
namespace mbgl {
@@ -66,11 +67,21 @@ public:
using Types = TypeList<Us...>;
using State = IndexedTuple<TypeList<Us...>, TypeList<typename Us::State...>>;
using Values = IndexedTuple<TypeList<Us...>, TypeList<typename Us::Value...>>;
+ using NamedLocations = std::vector<std::pair<const std::string, UniformLocation>>;
- static State state(const ProgramID& id) {
+ static State bindLocations(const ProgramID& id) {
return State { { uniformLocation(id, Us::name()) }... };
}
+ template <class Program>
+ static State loadNamedLocations(const Program& program) {
+ return State{ { program.uniformLocation(Us::name()) }... };
+ }
+
+ static NamedLocations getNamedLocations(const State& state) {
+ return NamedLocations{ { Us::name(), state.template get<Us>().location }... };
+ }
+
static void bind(State& state, Values&& values) {
util::ignore({ (state.template get<Us>() = values.template get<Us>(), 0)... });
}