diff --git a/repositories.gradle b/repositories.gradle index 45729e1..51d4dea 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -1,4 +1,5 @@ // Add any additional repositiroes for your dependencies here repositories { + mavenLocal() } diff --git a/src/main/java/codechicken/lib/asm/RedirectorTransformer.java b/src/main/java/codechicken/lib/asm/RedirectorTransformer.java index c5df6d6..fdda8b5 100644 --- a/src/main/java/codechicken/lib/asm/RedirectorTransformer.java +++ b/src/main/java/codechicken/lib/asm/RedirectorTransformer.java @@ -59,7 +59,12 @@ public class RedirectorTransformer implements IClassTransformer, Opcodes { "hasBrightness", "brightness", "side", - "lc" + "lc", + "normalAttrib", + "colourAttrib", + "lightCoordAttrib", + "sideAttrib", + "lightingAttrib" ); Collections.addAll(redirectedSimpleMethods, "reset", "pullLightmap", "pushLightmap", "setDynamic", "draw"); diff --git a/src/main/java/codechicken/lib/lighting/LightModel.java b/src/main/java/codechicken/lib/lighting/LightModel.java index 4aead9d..299c68c 100644 --- a/src/main/java/codechicken/lib/lighting/LightModel.java +++ b/src/main/java/codechicken/lib/lighting/LightModel.java @@ -81,8 +81,8 @@ public class LightModel implements CCRenderState.IVertexOperation { public boolean load(CCRenderState state) { if (!state.computeLighting) return false; - state.pipeline.addDependency(CCRenderState.normalAttrib); - state.pipeline.addDependency(CCRenderState.colourAttrib); + state.pipeline.addDependency(CCRenderState.normalAttrib()); + state.pipeline.addDependency(CCRenderState.colourAttrib()); return true; } diff --git a/src/main/java/codechicken/lib/lighting/PlanarLightMatrix.java b/src/main/java/codechicken/lib/lighting/PlanarLightMatrix.java index 17ac278..c75456c 100644 --- a/src/main/java/codechicken/lib/lighting/PlanarLightMatrix.java +++ b/src/main/java/codechicken/lib/lighting/PlanarLightMatrix.java @@ -40,7 +40,7 @@ public class PlanarLightMatrix extends PlanarLightModel { @Override public boolean load(CCRenderState state) { - state.pipeline.addDependency(CCRenderState.sideAttrib); + state.pipeline.addDependency(CCRenderState.sideAttrib()); return true; } diff --git a/src/main/java/codechicken/lib/lighting/PlanarLightModel.java b/src/main/java/codechicken/lib/lighting/PlanarLightModel.java index ba4100f..93f777f 100644 --- a/src/main/java/codechicken/lib/lighting/PlanarLightModel.java +++ b/src/main/java/codechicken/lib/lighting/PlanarLightModel.java @@ -20,8 +20,8 @@ public class PlanarLightModel implements CCRenderState.IVertexOperation { public boolean load(CCRenderState state) { if (!state.computeLighting) return false; - state.pipeline.addDependency(CCRenderState.sideAttrib); - state.pipeline.addDependency(CCRenderState.colourAttrib); + state.pipeline.addDependency(CCRenderState.sideAttrib()); + state.pipeline.addDependency(CCRenderState.colourAttrib()); return true; } diff --git a/src/main/java/codechicken/lib/lighting/SimpleBrightnessModel.java b/src/main/java/codechicken/lib/lighting/SimpleBrightnessModel.java index 21c05ff..7c5d15d 100644 --- a/src/main/java/codechicken/lib/lighting/SimpleBrightnessModel.java +++ b/src/main/java/codechicken/lib/lighting/SimpleBrightnessModel.java @@ -40,7 +40,7 @@ public class SimpleBrightnessModel implements CCRenderState.IVertexOperation { @Override public boolean load(CCRenderState state) { - state.pipeline.addDependency(CCRenderState.sideAttrib); + state.pipeline.addDependency(CCRenderState.sideAttrib()); return true; } diff --git a/src/main/java/codechicken/lib/render/BlockRenderer.java b/src/main/java/codechicken/lib/render/BlockRenderer.java index 9393e6e..212f8f4 100644 --- a/src/main/java/codechicken/lib/render/BlockRenderer.java +++ b/src/main/java/codechicken/lib/render/BlockRenderer.java @@ -20,12 +20,12 @@ public class BlockRenderer { @Override public T getAttributes(CCRenderState.VertexAttribute attr) { - return attr == CCRenderState.lightCoordAttrib && lcComputed ? (T) lightCoords : null; + return attr == CCRenderState.lightCoordAttrib() && lcComputed ? (T) lightCoords : null; } @Override public boolean hasAttribute(CCRenderState.VertexAttribute attr) { - return attr == CCRenderState.sideAttrib || attr == CCRenderState.lightCoordAttrib && lcComputed; + return attr == CCRenderState.sideAttrib() || attr == CCRenderState.lightCoordAttrib() && lcComputed; } @Override @@ -136,12 +136,12 @@ public class BlockRenderer { @Override public T getAttributes(VertexAttribute attr) { - return attr == CCRenderState.lightCoordAttrib ? (T) lightCoords : null; + return attr == CCRenderState.lightCoordAttrib() ? (T) lightCoords : null; } @Override public boolean hasAttribute(VertexAttribute attr) { - return attr == CCRenderState.sideAttrib || attr == CCRenderState.lightCoordAttrib; + return attr == CCRenderState.sideAttrib() || attr == CCRenderState.lightCoordAttrib(); } @Override @@ -164,7 +164,7 @@ public class BlockRenderer { /** * Renders faces of a block-like model based on a sideMask. Eg for side 2, verts 8-11 will be rendered - * + * * @param sideMask A mask of faces not to render */ // public static void renderFaces(int sideMask) { @@ -184,7 +184,7 @@ public class BlockRenderer { /** * Renders faces of a cuboid with texture coordinates mapped to match a standard minecraft block - * + * * @param bounds The bounding cuboid to render * @param sideMask A mask of faces not to render */ diff --git a/src/main/java/codechicken/lib/render/CCModel.java b/src/main/java/codechicken/lib/render/CCModel.java index 662bf89..62cfd99 100644 --- a/src/main/java/codechicken/lib/render/CCModel.java +++ b/src/main/java/codechicken/lib/render/CCModel.java @@ -68,7 +68,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { } public Vector3[] normals() { - return getAttributes(CCRenderState.normalAttrib); + return getAttributes(CCRenderState.normalAttrib()); } @Override @@ -102,7 +102,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Each pixel corresponds to one unit of position when generating the model - * + * * @param i Vertex index to start generating at * @param x1 The minX bound of the box * @param y1 The minY bound of the box @@ -195,7 +195,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Generates a box, uv mapped to be the same as a minecraft block with the same bounds - * + * * @param i The vertex index to start generating at * @param bounds The bounds of the block, 0 to 1 * @return The generated model. When rendering an icon will need to be supplied for the UV transformation. @@ -222,7 +222,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Generates a box, uv mapped to be the same as a minecraft block with the same bounds - * + * * @param i The vertex index to start generating at * @param x1 minX * @param y1 minY @@ -311,7 +311,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Computes the normals of all faces in the model. Uses the cross product of the vectors along 2 sides of the face - * + * * @param start The first vertex to generate normals for * @param length The number of vertices to generate normals for. Note this must be a multiple of 3 for triangles or * 4 for quads @@ -321,7 +321,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { if (length % vp != 0 || start % vp != 0) throw new IllegalArgumentException("Cannot generate normals across polygons"); - Vector3[] normals = getOrAllocate(CCRenderState.normalAttrib); + Vector3[] normals = getOrAllocate(CCRenderState.normalAttrib()); for (int k = 0; k < length; k += vp) { int i = k + start; Vector3 diff1 = verts[i + 1].vec.copy().subtract(verts[i].vec); @@ -336,14 +336,14 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Computes lighting using the normals add a light model If the model is rotated, the lighting will no longer be * valid - * + * * @return The model */ public CCModel computeLighting(LightModel light) { Vector3[] normals = normals(); - int[] colours = getAttributes(CCRenderState.lightingAttrib); + int[] colours = getAttributes(CCRenderState.lightingAttrib()); if (colours == null) { - colours = getOrAllocate(CCRenderState.lightingAttrib); + colours = getOrAllocate(CCRenderState.lightingAttrib()); Arrays.fill(colours, -1); } for (int k = 0; k < verts.length; k++) colours[k] = light.apply(colours[k], normals[k]); @@ -351,18 +351,18 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { } public CCModel setColour(int c) { - int[] colours = getOrAllocate(CCRenderState.colourAttrib); + int[] colours = getOrAllocate(CCRenderState.colourAttrib()); Arrays.fill(colours, c); return this; } /** * Computes the minecraft lighting coordinates for use with a LightMatrix - * + * * @return The model */ public CCModel computeLightCoords() { - LC[] lcs = getOrAllocate(CCRenderState.lightCoordAttrib); + LC[] lcs = getOrAllocate(CCRenderState.lightCoordAttrib()); Vector3[] normals = normals(); for (int i = 0; i < verts.length; i++) lcs[i] = new LC().compute(verts[i].vec, normals[i]); return this; @@ -370,7 +370,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Averages all normals at the same position to produce a smooth lighting effect. - * + * * @return The model */ public CCModel smoothNormals() { @@ -461,7 +461,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Renders vertices start through start+length-1 of the model - * + * * @param start The first vertex index to render * @param end The vertex index to render until * @param ops Operations to apply @@ -520,7 +520,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Parses vertices, texture coords, normals and polygons from a WaveFront Obj file - * + * * @param input An input stream to a obj file * @param vertexMode The vertex mode to create the model for (GL_TRIANGLES or GL_QUADS) * @param coordSystem The cooridnate system transformation to apply @@ -624,7 +624,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Parses vertices, texture coords, normals and polygons from a WaveFront Obj file - * + * * @param res The resource for the obj file * @return A map of group names to models */ @@ -634,7 +634,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Parses vertices, texture coords, normals and polygons from a WaveFront Obj file - * + * * @param res The resource for the obj file * @param coordSystem The cooridnate system transformation to apply * @return A map of group names to models @@ -652,7 +652,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Parses vertices, texture coords, normals and polygons from a WaveFront Obj file - * + * * @param res The resource for the obj file * @param vertexMode The vertex mode to create the model for (GL_TRIANGLES or GL_QUADS) * @param coordSystem The cooridnate system transformation to apply @@ -678,7 +678,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { boolean hasNormals = polys.get(0)[2] > 0; CCModel model = CCModel.newModel(vertexMode, polys.size()); - if (hasNormals) model.getOrAllocate(CCRenderState.normalAttrib); + if (hasNormals) model.getOrAllocate(CCRenderState.normalAttrib()); for (int i = 0; i < polys.size(); i++) { int[] ai = polys.get(i); @@ -807,7 +807,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Generate models rotated to the other 5 sides of the block - * + * * @param models An array of 6 models * @param side The side of this model * @param point The rotation point @@ -822,7 +822,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Generate models rotated to the other 3 horizontal of the block - * + * * @param models An array of 4 models * @param side The side of this model * @param point The rotation point @@ -841,7 +841,7 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable { /** * Generates copies of faces with clockwise vertices - * + * * @return The model */ public static CCModel generateBackface(CCModel src, int srcpos, CCModel dst, int destpos, int length) { diff --git a/src/main/java/codechicken/lib/render/CCRenderState.java b/src/main/java/codechicken/lib/render/CCRenderState.java index aa07caa..1eb74f1 100644 --- a/src/main/java/codechicken/lib/render/CCRenderState.java +++ b/src/main/java/codechicken/lib/render/CCRenderState.java @@ -169,7 +169,27 @@ public class CCRenderState { } } - public static VertexAttribute normalAttrib = new VertexAttribute<>() { + public static VertexAttribute normalAttrib() { + return instances.get().normalAttrib; + } + + public static VertexAttribute colourAttrib() { + return instances.get().colourAttrib; + } + + public static VertexAttribute lightCoordAttrib() { + return instances.get().lightCoordAttrib; + } + + public static VertexAttribute sideAttrib() { + return instances.get().sideAttrib; + } + + public static VertexAttribute lightingAttrib() { + return instances.get().lightingAttrib; + } + + public VertexAttribute normalAttrib = new VertexAttribute<>() { private Vector3[] normalRef; @@ -197,7 +217,7 @@ public class CCRenderState { else state.setNormalInstance(Rotation.axes[state.side]); } }; - public static VertexAttribute colourAttrib = new VertexAttribute<>() { + public VertexAttribute colourAttrib = new VertexAttribute<>() { private int[] colourRef; @@ -219,7 +239,7 @@ public class CCRenderState { else state.setColourInstance(state.baseColour); } }; - public static VertexAttribute lightingAttrib = new VertexAttribute<>() { + public VertexAttribute lightingAttrib = new VertexAttribute<>() { private int[] colourRef; @@ -245,7 +265,7 @@ public class CCRenderState { state.setColourInstance(ColourRGBA.multiply(state.colour, colourRef[state.vertexIndex])); } }; - public static VertexAttribute sideAttrib = new VertexAttribute<>() { + public VertexAttribute sideAttrib = new VertexAttribute<>() { private int[] sideRef; @@ -272,7 +292,7 @@ public class CCRenderState { /** * Uses the position of the lightmatrix to compute LC if not provided */ - public static VertexAttribute lightCoordAttrib = new VertexAttribute<>() { + public VertexAttribute lightCoordAttrib = new VertexAttribute<>() { private LC[] lcRef; private final Vector3 vec = new Vector3(); // for computation diff --git a/src/main/java/codechicken/lib/vec/Transformation.java b/src/main/java/codechicken/lib/vec/Transformation.java index a7cca46..56b63c3 100644 --- a/src/main/java/codechicken/lib/vec/Transformation.java +++ b/src/main/java/codechicken/lib/vec/Transformation.java @@ -14,14 +14,14 @@ public abstract class Transformation extends ITransformation