From a73b4f27cb4682df538682f7277424f6b912df64 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sat, 25 May 2024 16:07:35 +0200 Subject: [PATCH] Make item alpha rendering consistent with their definition --- src/client/hud.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 6bb9c234b..60eabc1f9 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -23,6 +23,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "EMaterialTypes.h" +#include "itemdef.h" +#include "mapnode.h" #include "settings.h" #include "util/numeric.h" #include "log.h" @@ -1143,7 +1146,23 @@ void drawItemStack( } video::SMaterial &material = buf->getMaterial(); - material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + material.MaterialTypeParam = 0.0f; // render everything with alpha > 0 + if (def.type == ITEM_NODE) { + switch (client->ndef()->get(def.name).alpha) { + case ALPHAMODE_OPAQUE: + material.MaterialType = video::EMT_SOLID; + break; + case ALPHAMODE_CLIP: + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; + material.MaterialTypeParam = 0.5f; + break; + case ALPHAMODE_BLEND: + break; + default: + assert(false); + } + } material.Lighting = false; driver->setMaterial(material); driver->drawMeshBuffer(buf);