diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index ce77434ed..25029963b 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -26,17 +26,18 @@ std::unique_ptr ContentBuilder::build() { def.rt.tags.insert(tags.add(tag)); } + auto isSolid = [](const Variant& variant) { + return variant.model.type == BlockModelType::BLOCK || + variant.culling == CullingMode::OPTIONAL; + }; + if (def.variants) { for (auto& variant : def.variants->variants) { - variant.rt.solid = - variant.model.type == BlockModelType::BLOCK || - def.explictlySolid; + variant.rt.solid = isSolid(variant) || def.explictlySolid; } def.defaults = def.variants->variants.at(0); } else { - def.defaults.rt.solid = - def.defaults.model.type == BlockModelType::BLOCK || - def.explictlySolid; + def.defaults.rt.solid = isSolid(def.defaults) || def.explictlySolid; } const float EPSILON = 0.01f; diff --git a/src/frontend/ContentGfxCache.cpp b/src/frontend/ContentGfxCache.cpp index b8ce69a5f..9cdcdf70e 100644 --- a/src/frontend/ContentGfxCache.cpp +++ b/src/frontend/ContentGfxCache.cpp @@ -30,6 +30,7 @@ void ContentGfxCache::refreshVariant( uint8_t variantIndex, const Atlas& atlas ) { + std::unordered_map optionalTextures; bool denseRender = settings.denseRender.get(); for (uint side = 0; side < 6; side++) { std::string tex = variant.textureFaces[side]; @@ -43,6 +44,7 @@ void ContentGfxCache::refreshVariant( texOpaque = tex; } else if (variant.culling == CullingMode::OPTIONAL && !denseRender) { tex = texOpaque; + optionalTextures[variant.textureFaces[side]] = texOpaque; } size_t index = getRegionIndex(def.rt.id, variantIndex, side, false); sideregions[index] = atlas.get(tex); @@ -56,7 +58,12 @@ void ContentGfxCache::refreshVariant( if (pos == std::string::npos) { continue; } - if (auto region = atlas.getIf(mesh.texture.substr(pos+1))) { + std::string texture = mesh.texture.substr(pos+1); + const auto& found = optionalTextures.find(texture); + if (found != optionalTextures.end()) { + texture = found->second; + } + if (auto region = atlas.getIf(texture)) { for (auto& vertex : mesh.vertices) { vertex.uv = region->apply(vertex.uv); } diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index 0aae42010..33ecc8e17 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -538,7 +538,6 @@ void BlocksRenderer::render( break; } case BlockModelType::CUSTOM: { - if (!denseRender) blockCustomModel( {x, y, z}, def,