diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-03-07 17:50:02 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-03-12 11:03:54 +0100 |
commit | e27f33062994a1b0155b44b9d471e48e93b09f8e (patch) | |
tree | eff2ba71134b9721c16fd53378b9256b94396712 /src/mbgl/gl/texture.hpp | |
parent | cb64c380fbbd209cb68af60e76b7a770805353a8 (diff) | |
download | qtlocation-mapboxgl-e27f33062994a1b0155b44b9d471e48e93b09f8e.tar.gz |
[core] add texture bindings to draw call instead of Context member fn
Diffstat (limited to 'src/mbgl/gl/texture.hpp')
-rw-r--r-- | src/mbgl/gl/texture.hpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/mbgl/gl/texture.hpp b/src/mbgl/gl/texture.hpp new file mode 100644 index 0000000000..8230be1652 --- /dev/null +++ b/src/mbgl/gl/texture.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include <mbgl/gfx/texture.hpp> +#include <mbgl/gl/uniform.hpp> +#include <mbgl/util/ignore.hpp> + +#include <vector> +#include <string> + +namespace mbgl { +namespace gl { + +class Context; + +void bindTexture(gl::Context&, uint8_t unit, const gfx::TextureBinding&); + +template <class> +class Textures; + +template <class... Ts> +class Textures<TypeList<Ts...>> { + using State = + IndexedTuple<TypeList<Ts...>, TypeList<ExpandToType<Ts, gl::UniformState<uint8_t>>...>>; + using NamedLocations = std::vector<std::pair<const std::string, gl::UniformLocation>>; + +public: + void queryLocations(const ProgramID& id) { + state = State{ gl::uniformLocation(id, Ts::name())... }; + } + + template <class BinaryProgram> + void loadNamedLocations(const BinaryProgram& program) { + state = State{ program.textureLocation(Ts::name())... }; + } + + NamedLocations getNamedLocations() const { + return NamedLocations{ { Ts::name(), state.template get<Ts>().location }... }; + } + + void bind(gl::Context& context, const gfx::TextureBindings<TypeList<Ts...>>& bindings) { + util::ignore( + { (state.template get<Ts>() = TypeIndex<Ts, Ts...>::value, + gl::bindTexture(context, TypeIndex<Ts, Ts...>::value, bindings.template get<Ts>()), + 0)... }); + } + +private: + State state; +}; + +} // namespace gl +} // namespace mbgl |