From 2c092882022037f65d7a76db6ec3637c6a7addb3 Mon Sep 17 00:00:00 2001 From: Toru the Red Fox Date: Tue, 10 Mar 2026 11:46:35 +0000 Subject: [PATCH] Add smoothBlend functionality to crispBlend for transparent textures fixes water opacity in default texture pack --- Minecraft.Client/Texture.cpp | 61 +++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/Minecraft.Client/Texture.cpp b/Minecraft.Client/Texture.cpp index b7e58d5fa..c4dd6ab17 100644 --- a/Minecraft.Client/Texture.cpp +++ b/Minecraft.Client/Texture.cpp @@ -716,38 +716,47 @@ int Texture::crispBlend(int c0, int c1) int a0 = static_cast(((c0 & 0xff000000) >> 24)) & 0xff; int a1 = static_cast(((c1 & 0xff000000) >> 24)) & 0xff; - int a = 255; - if (a0 + a1 < 255) + // continue with crisp blend if it's likely to be an opaque/cutout tile in the atlas + if (a0 >= 0xfa || a1 >= 0xfa) { - a = 0; - a0 = 1; - a1 = 1; - } - else if (a0 > a1) - { - a0 = 255; - a1 = 1; - } - else - { - a0 = 1; - a1 = 255; + int a = 255; - } + if (a0 + a1 < 255) + { + a = 0; + a0 = 1; + a1 = 1; + } + else if (a0 > a1) + { + a0 = 255; + a1 = 1; + } + else + { + a0 = 1; + a1 = 255; + + } - int r0 = ((c0 >> 16) & 0xff) * a0; - int g0 = ((c0 >> 8) & 0xff) * a0; - int b0 = ((c0) & 0xff) * a0; + int r0 = ((c0 >> 16) & 0xff) * a0; + int g0 = ((c0 >> 8) & 0xff) * a0; + int b0 = ((c0) & 0xff) * a0; - int r1 = ((c1 >> 16) & 0xff) * a1; - int g1 = ((c1 >> 8) & 0xff) * a1; - int b1 = ((c1) & 0xff) * a1; + int r1 = ((c1 >> 16) & 0xff) * a1; + int g1 = ((c1 >> 8) & 0xff) * a1; + int b1 = ((c1) & 0xff) * a1; - int r = (r0 + r1) / (a0 + a1); - int g = (g0 + g1) / (a0 + a1); - int b = (b0 + b1) / (a0 + a1); + int r = (r0 + r1) / (a0 + a1); + int g = (g0 + g1) / (a0 + a1); + int b = (b0 + b1) / (a0 + a1); - return (a << 24) | (r << 16) | (g << 8) | b; + return (a << 24) | (r << 16) | (g << 8) | b; + } + else // smoothblend if it's transparent + { + return (((a0 + a1) >> 1) << 24) | (((c0 & 0xfefefe) + (c1 & 0xfefefe)) >> 1); + } } int Texture::getManagerId()