BatchNode and GeometryBatchFactory now uses the material's isEqual method to gather the geometries to batch
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9257 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
55b8188d20
commit
1945a0c1c0
@ -236,6 +236,14 @@ public class BatchNode extends Node implements Savable {
|
|||||||
throw new IllegalStateException("No material is set for Geometry: " + g.getName() + " please set a material before batching");
|
throw new IllegalStateException("No material is set for Geometry: " + g.getName() + " please set a material before batching");
|
||||||
}
|
}
|
||||||
List<Geometry> list = map.get(g.getMaterial());
|
List<Geometry> list = map.get(g.getMaterial());
|
||||||
|
if (list == null) {
|
||||||
|
//trying to compare materials with the isEqual method
|
||||||
|
for (Material mat : map.keySet()) {
|
||||||
|
if (g.getMaterial().isEqual(mat)) {
|
||||||
|
list = map.get(mat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (list == null) {
|
if (list == null) {
|
||||||
list = new ArrayList<Geometry>();
|
list = new ArrayList<Geometry>();
|
||||||
map.put(g.getMaterial(), list);
|
map.put(g.getMaterial(), list);
|
||||||
@ -648,7 +656,7 @@ public class BatchNode extends Node implements Savable {
|
|||||||
this.needsFullRebatch = needsFullRebatch;
|
this.needsFullRebatch = needsFullRebatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getOffsetIndex(Geometry batchedGeometry){
|
public int getOffsetIndex(Geometry batchedGeometry) {
|
||||||
return batchedGeometry.startIndex;
|
return batchedGeometry.startIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ public class GeometryBatchFactory {
|
|||||||
outBuf.put(offset + i * components + 1, tan.y);
|
outBuf.put(offset + i * components + 1, tan.y);
|
||||||
outBuf.put(offset + i * components + 2, tan.z);
|
outBuf.put(offset + i * components + 2, tan.z);
|
||||||
|
|
||||||
if (components == 4){
|
if (components == 4) {
|
||||||
outBuf.put(offset + i * components + 3, inBuf.get(i * components + 3));
|
outBuf.put(offset + i * components + 3, inBuf.get(i * components + 3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ public class GeometryBatchFactory {
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (VertexBuffer vb : geom.getMesh().getBufferList().getArray()){
|
for (VertexBuffer vb : geom.getMesh().getBufferList().getArray()) {
|
||||||
compsForBuf[vb.getBufferType().ordinal()] = vb.getNumComponents();
|
compsForBuf[vb.getBufferType().ordinal()] = vb.getNumComponents();
|
||||||
formatForBuf[vb.getBufferType().ordinal()] = vb.getFormat();
|
formatForBuf[vb.getBufferType().ordinal()] = vb.getFormat();
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ public class GeometryBatchFactory {
|
|||||||
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly();
|
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly();
|
||||||
FloatBuffer outPos = (FloatBuffer) outBuf.getData();
|
FloatBuffer outPos = (FloatBuffer) outBuf.getData();
|
||||||
doTransformNorms(inPos, globalVertIndex, outPos, worldMatrix);
|
doTransformNorms(inPos, globalVertIndex, outPos, worldMatrix);
|
||||||
}else if(Type.Tangent.ordinal() == bufType){
|
} else if (Type.Tangent.ordinal() == bufType) {
|
||||||
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly();
|
FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly();
|
||||||
FloatBuffer outPos = (FloatBuffer) outBuf.getData();
|
FloatBuffer outPos = (FloatBuffer) outBuf.getData();
|
||||||
int components = inBuf.getNumComponents();
|
int components = inBuf.getNumComponents();
|
||||||
@ -288,6 +288,14 @@ public class GeometryBatchFactory {
|
|||||||
|
|
||||||
for (Geometry geom : geometries) {
|
for (Geometry geom : geometries) {
|
||||||
List<Geometry> outList = matToGeom.get(geom.getMaterial());
|
List<Geometry> outList = matToGeom.get(geom.getMaterial());
|
||||||
|
if (outList == null) {
|
||||||
|
//trying to compare materials with the isEqual method
|
||||||
|
for (Material mat : matToGeom.keySet()) {
|
||||||
|
if (geom.getMaterial().isEqual(mat)) {
|
||||||
|
outList = matToGeom.get(mat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (outList == null) {
|
if (outList == null) {
|
||||||
outList = new ArrayList<Geometry>();
|
outList = new ArrayList<Geometry>();
|
||||||
matToGeom.put(geom.getMaterial(), outList);
|
matToGeom.put(geom.getMaterial(), outList);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user