Skip to content

Commit

Permalink
Fix MeshCollisionShape crash when loaded from j3o: always create BVH …
Browse files Browse the repository at this point in the history
…before scaling.
  • Loading branch information
riccardobl committed Feb 6, 2017
1 parent 69cd160 commit 1ae6e98
Showing 1 changed file with 9 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ public MeshCollisionShape(ByteBuffer indices, ByteBuffer vertices, boolean memor
this.vertexStride = 12;
this.triangleIndexStride = 12;
this.memoryOptimized = memoryOptimized;
this.createShape(true);
this.createShape(null);
}

private void createCollisionMesh(Mesh mesh) {
Expand Down Expand Up @@ -150,7 +150,7 @@ private void createCollisionMesh(Mesh mesh) {
vertices.rewind();
vertices.clear();

this.createShape(true);
this.createShape(null);
}

@Override
Expand Down Expand Up @@ -191,25 +191,19 @@ public void read(final JmeImporter im) throws IOException {
this.vertexBase = BufferUtils.createByteBuffer(capsule.readByteArray(MeshCollisionShape.VERTEX_BASE, null));

byte[] nativeBvh = capsule.readByteArray(MeshCollisionShape.NATIVE_BVH, null);
if (nativeBvh == null) {
// Either using non memory optimized BVH or old J3O file
memoryOptimized = false;
createShape(true);
} else {
// Using memory optimized BVH, load from J3O, then assign it.
memoryOptimized = true;
createShape(false);
nativeBVHBuffer = setBVH(nativeBvh, this.objectId);
}
memoryOptimized=nativeBvh != null;
createShape(nativeBvh);
}

private void createShape(boolean buildBvt) {
private void createShape(byte bvh[]) {
boolean buildBvh=bvh==null||bvh.length==0;
this.meshId = NativeMeshUtil.createTriangleIndexVertexArray(this.triangleIndexBase, this.vertexBase, this.numTriangles, this.numVertices, this.vertexStride, this.triangleIndexStride);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Mesh {0}", Long.toHexString(this.meshId));
this.objectId = createShape(memoryOptimized, buildBvt, this.meshId);
this.objectId = createShape(memoryOptimized, buildBvh, this.meshId);
Logger.getLogger(this.getClass().getName()).log(Level.FINE, "Created Shape {0}", Long.toHexString(this.objectId));
if(!buildBvh) nativeBVHBuffer = setBVH(bvh, this.objectId);
this.setScale(this.scale);
this.setMargin(this.margin);
this.setMargin(this.margin);
}

/**
Expand Down

0 comments on commit 1ae6e98

Please sign in to comment.