From 80ba13be896824e1bb8743bd8aec7ec601159e1a Mon Sep 17 00:00:00 2001 From: RainWarrior Date: Tue, 15 Dec 2015 23:31:09 +0300 Subject: [PATCH] LightUtil.pack and .unpack now work correctly with unpacked arrays of size <4. --- .../client/model/pipeline/LightUtil.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/LightUtil.java b/src/main/java/net/minecraftforge/client/model/pipeline/LightUtil.java index 00773d4fe0..4a5a8036f5 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/LightUtil.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/LightUtil.java @@ -136,7 +136,8 @@ public class LightUtil public static void unpack(int[] from, float[] to, VertexFormat formatFrom, int v, int e) { VertexFormatElement element = formatFrom.getElement(e); - for(int i = 0; i < 4; i++) + int length = 4 <+ to.length ? 4 : to.length; + for(int i = 0; i < length; i++) { if(i < element.getElementCount()) { @@ -193,20 +194,21 @@ public class LightUtil int offset = pos & 3; int bits = 0; int mask = (256 << (8 * (element.getType().getSize() - 1))) - 1; + float f = i < from.length ? from[i] : 0; switch(element.getType()) { case FLOAT: - bits = Float.floatToRawIntBits(from[i]); + bits = Float.floatToRawIntBits(f); break; case UBYTE: case USHORT: case UINT: - bits = (int)(from[i] * mask); + bits = (int)(f * mask); break; case BYTE: case SHORT: case INT: - bits = (int)(from[i] * mask / 2); + bits = (int)(f * mask / 2); break; } to[index] &= ~(mask << (offset * 8));