update ContentGfxCache

This commit is contained in:
MihailRis
2025-07-24 22:51:53 +03:00
parent 4a6ccf4847
commit 799d712447
5 changed files with 69 additions and 35 deletions
+18 -3
View File
@@ -14,9 +14,11 @@ class Assets;
class Atlas;
class Block;
struct UVRegion;
struct Variant;
struct GraphicsSettings;
inline constexpr int MAX_VARIANTS = 16;
inline constexpr int GFXC_MAX_VARIANTS = 16;
inline constexpr int GFXC_SIDES = 6;
class ContentGfxCache {
const Content& content;
@@ -26,6 +28,13 @@ class ContentGfxCache {
// array of block sides uv regions (6 per block)
std::unique_ptr<UVRegion[]> sideregions;
std::unordered_map<blockid_t, model::Model> models;
void refreshVariant(
const Block& def,
const Variant& variant,
uint8_t variantIndex,
const Atlas& atlas
);
public:
ContentGfxCache(
const Content& content,
@@ -34,8 +43,14 @@ public:
);
~ContentGfxCache();
inline const UVRegion& getRegion(blockid_t id, uint8_t variant, int side) const {
return sideregions[(id * 6 + side) * MAX_VARIANTS + variant];
static inline size_t getRegionIndex(
blockid_t id, uint8_t variant, int side, bool opaque
) {
return ((id * GFXC_SIDES + side) * GFXC_MAX_VARIANTS + variant) * 2 + opaque;
}
inline const UVRegion& getRegion(blockid_t id, uint8_t variant, int side, bool dense) const {
return sideregions[getRegionIndex(id, variant, side, !dense)];
}
const model::Model& getModel(blockid_t id) const;