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