5 #ifndef FLUTTER_IMPELLER_SHADER_ARCHIVE_SHADER_ARCHIVE_H_
6 #define FLUTTER_IMPELLER_SHADER_ARCHIVE_SHADER_ARCHIVE_H_
10 #include <unordered_map>
12 #include "flutter/fml/hash_combine.h"
13 #include "flutter/fml/mapping.h"
15 #include "third_party/abseil-cpp/absl/status/statusor.h"
21 static absl::StatusOr<ShaderArchive>
Create(
22 std::shared_ptr<fml::Mapping> payload);
31 std::string name)
const;
35 const std::string& name,
36 const std::shared_ptr<fml::Mapping>& mapping)>&)
40 explicit ShaderArchive(std::shared_ptr<fml::Mapping> payload);
48 return fml::HashCombine(
49 static_cast<std::underlying_type_t<decltype(key.
type)
>>(key.type),
55 bool operator()(
const ShaderKey& lhs,
const ShaderKey& rhs)
const {
56 return lhs.type == rhs.type && lhs.name == rhs.name;
61 using Shaders = std::unordered_map<
ShaderKey,
62 std::shared_ptr<fml::Mapping>,
66 std::shared_ptr<fml::Mapping> payload_;
69 ShaderArchive(std::shared_ptr<fml::Mapping> payload, Shaders shaders);
ShaderArchive(ShaderArchive &&)
size_t IterateAllShaders(const std::function< bool(ArchiveShaderType type, const std::string &name, const std::shared_ptr< fml::Mapping > &mapping)> &) const
static absl::StatusOr< ShaderArchive > Create(std::shared_ptr< fml::Mapping > payload)
size_t GetShaderCount() const
std::shared_ptr< fml::Mapping > GetMapping(ArchiveShaderType type, std::string name) const
bool operator()(const ShaderKey &lhs, const ShaderKey &rhs) const
size_t operator()(const ShaderKey &key) const