Seperate colour and lighting a bit. Made baking colours easier and the distinction between dynamic and static rendering easier to manage.

Fixed invalid u coords in generateBlock
This commit is contained in:
Chicken-Bomes committed 2014-06-15 02:07:20 +10:00
1 parent 97cb16586a
commit 09bf91715b
7 files changed
+93 -41

No files matched your search

@@ -139,6 +139,9 @@ public class LightMatrix implements CCRenderState.IVertexOperation
@Override
public boolean load() {
if(!CCRenderState.computeLighting)
return false;
CCRenderState.pipeline.addDependency(CCRenderState.colourAttrib);
CCRenderState.pipeline.addDependency(CCRenderState.lightCoordAttrib);
return true;
@@ -82,6 +82,9 @@ public class LightModel implements CCRenderState.IVertexOperation
@Override
public boolean load() {
if(!CCRenderState.computeLighting)
return false;
CCRenderState.pipeline.addDependency(CCRenderState.normalAttrib);
CCRenderState.pipeline.addDependency(CCRenderState.colourAttrib);
return true;
@@ -18,6 +18,9 @@ public class PlanarLightModel implements CCRenderState.IVertexOperation
@Override
public boolean load() {
if(!CCRenderState.computeLighting)
return false;
CCRenderState.pipeline.addDependency(CCRenderState.sideAttrib);
CCRenderState.pipeline.addDependency(CCRenderState.colourAttrib);
return true;
+37 -37
View File
@@ -206,55 +206,55 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel>
if((mask&1) == 0) {//bottom face
u1 = x1; v1 = z1;
u2 = x2; v2 = z2;
verts[i++] = new Vertex5(x1, y1, z2, u1, v2);
verts[i++] = new Vertex5(x1, y1, z1, u1, v1);
verts[i++] = new Vertex5(x2, y1, z1, u2, v1);
verts[i++] = new Vertex5(x2, y1, z2, u2, v2);
verts[i++] = new Vertex5(x1, y1, z2, u1, v2, 0);
verts[i++] = new Vertex5(x1, y1, z1, u1, v1, 0);
verts[i++] = new Vertex5(x2, y1, z1, u2, v1, 0);
verts[i++] = new Vertex5(x2, y1, z2, u2, v2, 0);
}
if((mask&2) == 0) {//top face
u1 = x1+2; v1 = z1;
u2 = x2+2; v2 = z2;
verts[i++] = new Vertex5(x2, y2, z2, u2, v2);
verts[i++] = new Vertex5(x2, y2, z1, u2, v1);
verts[i++] = new Vertex5(x1, y2, z1, u1, v1);
verts[i++] = new Vertex5(x1, y2, z2, u1, v2);
u1 = x1; v1 = z1;
u2 = x2; v2 = z2;
verts[i++] = new Vertex5(x2, y2, z2, u2, v2, 1);
verts[i++] = new Vertex5(x2, y2, z1, u2, v1, 1);
verts[i++] = new Vertex5(x1, y2, z1, u1, v1, 1);
verts[i++] = new Vertex5(x1, y2, z2, u1, v2, 1);
}
if((mask&4) == 0) {//east face
u1 = 1-x1+4; v1 = 1-y2;
u2 = 1-x2+4; v2 = 1-y1;
verts[i++] = new Vertex5(x1, y1, z1, u1, v2);
verts[i++] = new Vertex5(x1, y2, z1, u1, v1);
verts[i++] = new Vertex5(x2, y2, z1, u2, v1);
verts[i++] = new Vertex5(x2, y1, z1, u2, v2);
u1 = 1-x1; v1 = 1-y2;
u2 = 1-x2; v2 = 1-y1;
verts[i++] = new Vertex5(x1, y1, z1, u1, v2, 2);
verts[i++] = new Vertex5(x1, y2, z1, u1, v1, 2);
verts[i++] = new Vertex5(x2, y2, z1, u2, v1, 2);
verts[i++] = new Vertex5(x2, y1, z1, u2, v2, 2);
}
if((mask&8) == 0) {//west face
u1 = x1+6; v1 = 1-y2;
u2 = x2+6; v2 = 1-y1;
verts[i++] = new Vertex5(x2, y1, z2, u2, v2);
verts[i++] = new Vertex5(x2, y2, z2, u2, v1);
verts[i++] = new Vertex5(x1, y2, z2, u1, v1);
verts[i++] = new Vertex5(x1, y1, z2, u1, v2);
u1 = x1; v1 = 1-y2;
u2 = x2; v2 = 1-y1;
verts[i++] = new Vertex5(x2, y1, z2, u2, v2, 3);
verts[i++] = new Vertex5(x2, y2, z2, u2, v1, 3);
verts[i++] = new Vertex5(x1, y2, z2, u1, v1, 3);
verts[i++] = new Vertex5(x1, y1, z2, u1, v2, 3);
}
if((mask&0x10) == 0) {//north face
u1 = z1+8; v1 = 1-y2;
u2 = z2+8; v2 = 1-y1;
verts[i++] = new Vertex5(x1, y1, z2, u2, v2);
verts[i++] = new Vertex5(x1, y2, z2, u2, v1);
verts[i++] = new Vertex5(x1, y2, z1, u1, v1);
verts[i++] = new Vertex5(x1, y1, z1, u1, v2);
u1 = z1; v1 = 1-y2;
u2 = z2; v2 = 1-y1;
verts[i++] = new Vertex5(x1, y1, z2, u2, v2, 4);
verts[i++] = new Vertex5(x1, y2, z2, u2, v1, 4);
verts[i++] = new Vertex5(x1, y2, z1, u1, v1, 4);
verts[i++] = new Vertex5(x1, y1, z1, u1, v2, 4);
}
if((mask&0x20) == 0) {//south face
u1 = 1-z1+10; v1 = 1-y2;
u2 = 1-z2+10; v2 = 1-y1;
verts[i++] = new Vertex5(x2, y1, z1, u1, v2);
verts[i++] = new Vertex5(x2, y2, z1, u1, v1);
verts[i++] = new Vertex5(x2, y2, z2, u2, v1);
verts[i++] = new Vertex5(x2, y1, z2, u2, v2);
u1 = 1-z1; v1 = 1-y2;
u2 = 1-z2; v2 = 1-y1;
verts[i++] = new Vertex5(x2, y1, z1, u1, v2, 5);
verts[i++] = new Vertex5(x2, y2, z1, u1, v1, 5);
verts[i++] = new Vertex5(x2, y2, z2, u2, v1, 5);
verts[i++] = new Vertex5(x2, y1, z2, u2, v2, 5);
}
return this;
@@ -299,10 +299,10 @@ public class CCModel implements CCRenderState.IVertexSource, Copyable<CCModel>
public CCModel computeLighting(LightModel light)
{
Vector3[] normals = normals();
int[] colours = getAttributes(CCRenderState.colourAttrib);
int[] colours = getAttributes(CCRenderState.lightingAttrib);
if(colours == null) {
setColour(-1);
colours = getAttributes(CCRenderState.colourAttrib);
colours = getOrAllocate(CCRenderState.lightingAttrib);
Arrays.fill(colours, -1);
}
for(int k = 0; k < verts.length; k++)
colours[k] = light.apply(colours[k], normals[k]);
@@ -84,8 +84,10 @@ public class CCRenderPipeline
if(CCRenderState.useNormals)
addAttribute(CCRenderState.normalAttrib);
if(CCRenderState.hasColour)
if(CCRenderState.useColour)
addAttribute(CCRenderState.colourAttrib);
if(CCRenderState.computeLighting)
addAttribute(CCRenderState.lightingAttrib);
for(int i = 0; i < ops.size(); i++) {
IVertexOperation op = ops.get(i);
+38 -2
View File
@@ -180,6 +180,32 @@ public class CCRenderState
setColour(baseColour);
}
};
public static VertexAttribute<int[]> lightingAttrib = new VertexAttribute<int[]>() {
private int[] colourRef;
@Override
public int[] newArray(int length) {
return new int[length];
}
@Override
public boolean load() {
if(!computeLighting || !hasColour || !model.hasAttribute(this))
return false;
colourRef = model.getAttributes(this);
if(colourRef != null) {
pipeline.addDependency(colourAttrib);
return true;
}
return false;
}
@Override
public void operate() {
setColour(ColourRGBA.multiply(colour, colourRef[vertexIndex]));
}
};
public static VertexAttribute<int[]> sideAttrib = new VertexAttribute<int[]>() {
private int[] sideRef;
@@ -251,6 +277,8 @@ public class CCRenderState
public static int baseColour;
public static int alphaOverride;
public static boolean useNormals;
public static boolean computeLighting;
public static boolean useColour;
public static LightMatrix lightMatrix = new LightMatrix();
//vertex outputs
@@ -269,8 +297,8 @@ public class CCRenderState
public static void reset() {
model = null;
pipeline.reset();
hasNormal = hasBrightness = false;
hasColour = true;
useNormals = hasNormal = hasBrightness = hasColour = false;
useColour = computeLighting = true;
baseColour = alphaOverride = -1;
}
@@ -362,6 +390,14 @@ public class CCRenderState
setBrightness((int)OpenGlHelper.lastBrightnessY << 16 | (int)OpenGlHelper.lastBrightnessX);
}
/**
* Compact helper for setting dynamic rendering context. Uses normals and doesn't compute lighting
*/
public static void setDynamic() {
useNormals = true;
computeLighting = false;
}
public static void changeTexture(String texture) {
changeTexture(new ResourceLocation(texture));
}
+6 -1
View File
@@ -30,8 +30,13 @@ public class Vertex5 implements Copyable<Vertex5>
{
this(vert, new UV(u, v));
}
public Vertex5(double x, double y, double z, double u, double v)
{
this(x, y, z, u, v, 0);
}
public Vertex5(double x, double y, double z, double u, double v, int tex)
{
this(new Vector3(x, y, z), new UV(u, v));
}