1 #pragma once
2 
3 #include <mbgl/gl/types.hpp>
4 #include <mbgl/util/optional.hpp>
5 
6 #include <string>
7 #include <vector>
8 
9 namespace mbgl {
10 
11 class BinaryProgram {
12 public:
13     // Initialize a BinaryProgram object from a serialized represenation.
14     BinaryProgram(std::string&& data);
15 
16     BinaryProgram(gl::BinaryProgramFormat,
17                   std::string&& binaryCode,
18                   std::string binaryIdentifier,
19                   std::vector<std::pair<const std::string, gl::AttributeLocation>>&&,
20                   std::vector<std::pair<const std::string, gl::UniformLocation>>&&);
21 
22     std::string serialize() const;
23 
format() const24     gl::BinaryProgramFormat format() const {
25         return binaryFormat;
26     }
code() const27     const std::string& code() const {
28         return binaryCode;
29     }
identifier() const30     const std::string& identifier() const {
31         return binaryIdentifier;
32     }
33 
34     optional<gl::AttributeLocation> attributeLocation(const std::string& name) const;
35     gl::UniformLocation uniformLocation(const std::string& name) const;
36 
37 private:
38     gl::BinaryProgramFormat binaryFormat = 0;
39     std::string binaryCode;
40     std::string binaryIdentifier;
41     std::vector<std::pair<const std::string, gl::AttributeLocation>> attributes;
42     std::vector<std::pair<const std::string, gl::UniformLocation>> uniforms;
43 };
44 
45 } // namespace mbgl
46