summaryrefslogtreecommitdiff
path: root/src/mbgl/programs/binary_program.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/programs/binary_program.cpp')
-rw-r--r--src/mbgl/programs/binary_program.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/mbgl/programs/binary_program.cpp b/src/mbgl/programs/binary_program.cpp
index da629194b4..598a547252 100644
--- a/src/mbgl/programs/binary_program.cpp
+++ b/src/mbgl/programs/binary_program.cpp
@@ -52,9 +52,14 @@ BinaryProgram::BinaryProgram(std::string&& data) {
uniforms.emplace_back(parseBinding<gl::UniformLocation>(pbf.get_message()));
break;
case 5: // identifier
- default:
binaryIdentifier = pbf.get_string();
break;
+ case 6: // uniform
+ textures.emplace_back(parseBinding<gl::UniformLocation>(pbf.get_message()));
+ break;
+ default:
+ pbf.skip();
+ break;
}
}
@@ -68,12 +73,14 @@ BinaryProgram::BinaryProgram(
std::string&& binaryCode_,
std::string binaryIdentifier_,
std::vector<std::pair<const std::string, gl::AttributeLocation>>&& attributes_,
- std::vector<std::pair<const std::string, gl::UniformLocation>>&& uniforms_)
+ std::vector<std::pair<const std::string, gl::UniformLocation>>&& uniforms_,
+ std::vector<std::pair<const std::string, gl::UniformLocation>>&& textures_)
: binaryFormat(binaryFormat_),
binaryCode(std::move(binaryCode_)),
binaryIdentifier(std::move(binaryIdentifier_)),
attributes(std::move(attributes_)),
- uniforms(std::move(uniforms_)) {
+ uniforms(std::move(uniforms_)),
+ textures(std::move(textures_)) {
}
std::string BinaryProgram::serialize() const {
@@ -92,6 +99,11 @@ std::string BinaryProgram::serialize() const {
pbf_binding.add_string(1 /* name */, binding.first);
pbf_binding.add_uint32(2 /* value */, binding.second);
}
+ for (const auto& binding : textures) {
+ protozero::pbf_writer pbf_binding(pbf, 6 /* texture */);
+ pbf_binding.add_string(1 /* name */, binding.first);
+ pbf_binding.add_uint32(2 /* value */, binding.second);
+ }
if (!binaryIdentifier.empty()) {
pbf.add_string(5 /* identifier */, binaryIdentifier);
}
@@ -116,4 +128,13 @@ gl::UniformLocation BinaryProgram::uniformLocation(const std::string& name) cons
return -1;
}
+gl::UniformLocation BinaryProgram::textureLocation(const std::string& name) const {
+ for (const auto& pair : textures) {
+ if (pair.first == name) {
+ return pair.second;
+ }
+ }
+ return -1;
+}
+
} // namespace mbgl