fix enable per-variant custom model caching

This commit is contained in:
eliotbyte
2025-10-28 23:09:28 +03:00
parent ed9cf8800a
commit 2a1d2f9354
4 changed files with 11 additions and 7 deletions
+3 -3
View File
@@ -62,7 +62,7 @@ void ContentGfxCache::refreshVariant(
}
}
}
models[def.rt.id] = std::move(model);
models[modelKey(def.rt.id, variantIndex)] = std::move(model);
}
}
@@ -94,8 +94,8 @@ void ContentGfxCache::refresh() {
ContentGfxCache::~ContentGfxCache() = default;
const model::Model& ContentGfxCache::getModel(blockid_t id) const {
const auto& found = models.find(id);
const model::Model& ContentGfxCache::getModel(blockid_t id, uint8_t variant) const {
const auto& found = models.find(modelKey(id, variant));
if (found == models.end()) {
throw std::runtime_error("model not found");
}
+6 -2
View File
@@ -27,7 +27,11 @@ class ContentGfxCache {
// array of block sides uv regions (6 per block)
std::unique_ptr<UVRegion[]> sideregions;
std::unordered_map<blockid_t, model::Model> models;
std::unordered_map<uint64_t, model::Model> models;
static inline uint64_t modelKey(blockid_t id, uint8_t variant) {
return (uint64_t(id) << 8) | uint64_t(variant & 0xFF);
}
void refreshVariant(
const Block& def,
@@ -53,7 +57,7 @@ public:
return sideregions[getRegionIndex(id, variant, side, !dense)];
}
const model::Model& getModel(blockid_t id) const;
const model::Model& getModel(blockid_t id, uint8_t variant) const;
void refresh(const Block& block, const Atlas& atlas);