3 #include "spdlog/fmt/fmt.h"
12 return fmt::format(
"{}:{}",
"asset",
key);
16 std::string key = asset.
key;
17 assetMap[key] = std::make_shared<Asset>(std::move(asset));
26 return set(std::move(a));
31 std::ifstream stream(path, std::ios::in | std::ios::binary);
32 if(!stream.is_open()) {
35 throw std::runtime_error(fmt::format(
"Cannot load asset, file at path {} doesn't exist.", path));
39 Asset binaryAsset(key);
41 binaryAsset.
data = std::vector<std::uint8_t>(std::istreambuf_iterator<char>(stream), {});
43 return set(std::move(binaryAsset));
46 std::shared_ptr<dai::Asset>
AssetManager::set(
const std::string& key,
const std::vector<std::uint8_t>&
data,
int alignment) {
48 Asset binaryAsset(key);
52 return set(std::move(binaryAsset));
55 std::shared_ptr<dai::Asset>
AssetManager::set(
const std::string& key, std::vector<std::uint8_t>&&
data,
int alignment) {
57 Asset binaryAsset(key);
61 return set(std::move(binaryAsset));
80 for(
const auto& asset : assets) {
81 if(
assetMap.count(asset->key) > 0)
throw std::logic_error(
"An Asset with the key: " + asset->key +
" already exists.");
82 std::string key = asset->key;
88 std::vector<std::shared_ptr<const Asset>> a;
90 a.push_back(kv.second);
96 std::vector<std::shared_ptr<Asset>> a;
98 a.push_back(kv.second);
115 auto& a = *kv.second;
119 if(a.alignment > 1 && storage.size() % a.alignment != 0) {
120 toAdd = a.alignment - (storage.size() % a.alignment);
124 std::uint32_t offset =
static_cast<uint32_t
>(storage.size()) + toAdd;
127 storage.resize(storage.size() + toAdd);
130 storage.insert(storage.end(), a.data.begin(), a.data.end());
133 mutableAssets.
set(prefix + a.key, offset,
static_cast<uint32_t
>(a.data.size()), a.alignment);
140 internal.size =
size;
141 internal.alignment = alignment;