From 93cc092ee1104abf1d225be5409523a33e382e54 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sat, 14 Mar 2026 06:07:05 -0700 Subject: [PATCH] fix(render): narrow glow-card mesh suppression --- src/rendering/m2_renderer.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/rendering/m2_renderer.cpp b/src/rendering/m2_renderer.cpp index 067181c8..aad92ab5 100644 --- a/src/rendering/m2_renderer.cpp +++ b/src/rendering/m2_renderer.cpp @@ -1168,7 +1168,6 @@ bool M2Renderer::loadModel(const pipeline::M2Model& model, uint32_t modelId) { gpuModel.isLanternLike = (lowerName.find("lantern") != std::string::npos) || (lowerName.find("lamp") != std::string::npos) || - (lowerName.find("torch") != std::string::npos) || (lowerName.find("light") != std::string::npos); gpuModel.isKoboldFlame = (lowerName.find("kobold") != std::string::npos) && @@ -1545,7 +1544,6 @@ bool M2Renderer::loadModel(const pipeline::M2Model& model, uint32_t modelId) { const bool modelLanternFamily = (lowerName.find("lantern") != std::string::npos) || (lowerName.find("lamp") != std::string::npos) || - (lowerName.find("torch") != std::string::npos) || (lowerName.find("light") != std::string::npos); bgpu.lanternGlowHint = exactLanternGlowTexture || @@ -2656,7 +2654,12 @@ void M2Renderer::render(VkCommandBuffer cmd, VkDescriptorSet perFrameSet, const (batch.blendMode >= 3) || batch.colorKeyBlack || ((batch.materialFlags & 0x01) != 0); - if (cardLikeSkipMesh || (batch.glowCardLike && lanternLikeModel)) { + const bool lanternGlowCardSkip = + lanternLikeModel && + batch.lanternGlowHint && + smallCardLikeBatch && + cardLikeSkipMesh; + if (lanternGlowCardSkip || (cardLikeSkipMesh && !lanternLikeModel)) { continue; } } @@ -2852,16 +2855,25 @@ void M2Renderer::render(VkCommandBuffer cmd, VkDescriptorSet perFrameSet, const // Skip glow sprites (handled after loop) const bool batchUnlit = (batch.materialFlags & 0x01) != 0; + const bool koboldFlameCard = batch.colorKeyBlack && model.isKoboldFlame; + const bool smallCardLikeBatch = + (batch.glowSize <= 1.35f) || + (batch.lanternGlowHint && batch.glowSize <= 6.0f); const bool shouldUseGlowSprite = - !batch.colorKeyBlack && + !koboldFlameCard && (model.isElvenLike || model.isLanternLike) && !model.isSpellEffect && - (batch.glowSize <= 1.35f || (batch.lanternGlowHint && batch.glowSize <= 6.0f)) && + smallCardLikeBatch && (batch.lanternGlowHint || (batch.blendMode >= 3) || (batch.colorKeyBlack && batchUnlit && batch.blendMode >= 1)); if (shouldUseGlowSprite) { const bool cardLikeSkipMesh = (batch.blendMode >= 3) || batch.colorKeyBlack || batchUnlit; - if (cardLikeSkipMesh || (batch.glowCardLike && model.isLanternLike)) + const bool lanternGlowCardSkip = + model.isLanternLike && + batch.lanternGlowHint && + smallCardLikeBatch && + cardLikeSkipMesh; + if (lanternGlowCardSkip || (cardLikeSkipMesh && !model.isLanternLike)) continue; }