diff --git a/src/main/java/mods/betterfoliage/client/texture/generator/LeafGenerator.java b/src/main/java/mods/betterfoliage/client/texture/generator/LeafGenerator.java index 0324ac29..5569037f 100644 --- a/src/main/java/mods/betterfoliage/client/texture/generator/LeafGenerator.java +++ b/src/main/java/mods/betterfoliage/client/texture/generator/LeafGenerator.java @@ -9,6 +9,7 @@ import mods.betterfoliage.BetterFoliage; import mods.betterfoliage.client.BetterFoliageClient; import mods.betterfoliage.client.integration.ShadersModIntegration; +import mods.betterfoliage.client.util.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.TextureStitchEvent; @@ -53,11 +54,11 @@ protected BufferedImage generateLeaf(ResourceLocation originalResource) throws I if (!ShadersModIntegration.isSpecialTexture(originalResource)) { // load alpha mask of appropriate size BufferedImage maskImage = loadLeafMaskImage(defaultMask, size * 2); - int scale = size * 2 / maskImage.getWidth(); + if (maskImage == null) maskImage = loadLeafMaskImage(defaultMask, RenderUtils.nextPowerOf2(size * 2)); for (int x = 0; x < genIcon.getWidth(); x++) for (int y = 0; y < genIcon.getHeight(); y++) { long origPixel = genIcon.getRGB(x, y) & 0xFFFFFFFFl; - long maskPixel = maskImage.getRGB(x / scale, y / scale) & 0xFF000000l | 0x00FFFFFF; + long maskPixel = maskImage.getRGB(x * maskImage.getWidth() / genIcon.getWidth(), y * maskImage.getWidth() / genIcon.getWidth()) & 0xFF000000l | 0x00FFFFFF; genIcon.setRGB(x, y, (int) (origPixel & maskPixel)); } } diff --git a/src/main/java/mods/betterfoliage/client/util/RenderUtils.java b/src/main/java/mods/betterfoliage/client/util/RenderUtils.java index f6732963..cd2184e2 100644 --- a/src/main/java/mods/betterfoliage/client/util/RenderUtils.java +++ b/src/main/java/mods/betterfoliage/client/util/RenderUtils.java @@ -107,4 +107,8 @@ public static Integer calculateTextureColor(TextureAtlasSprite icon) { return null; } } + + public static int nextPowerOf2(int x) { + return 1 << (x == 0 ? 0 : 32 - Integer.numberOfLeadingZeros(x - 1)); + } }