diff --git a/engine/src/core/com/jme3/scene/Mesh.java b/engine/src/core/com/jme3/scene/Mesh.java index 46a2f2e41..abfed0634 100644 --- a/engine/src/core/com/jme3/scene/Mesh.java +++ b/engine/src/core/com/jme3/scene/Mesh.java @@ -1166,28 +1166,30 @@ public class Mesh implements Savable, Cloneable { // Now, create the vertex buffers SafeArrayList oldVertexData = other.getBufferList(); for (VertexBuffer oldVb : oldVertexData) { - if (oldVb.getBufferType() == VertexBuffer.Type.Index - ||oldVb.getBufferType() == VertexBuffer.Type.HWBoneIndex - || oldVb.getBufferType() == VertexBuffer.Type.HWBoneWeight ) { + if (oldVb.getBufferType() == VertexBuffer.Type.Index) { // ignore the index buffer continue; } - // Create a new vertex buffer with similar configuration, but - // with the capacity of number of unique vertices - Buffer buffer = VertexBuffer.createBuffer(oldVb.getFormat(), oldVb.getNumComponents(), newNumVerts); - VertexBuffer newVb = new VertexBuffer(oldVb.getBufferType()); newVb.setNormalized(oldVb.isNormalized()); - newVb.setupData(oldVb.getUsage(), oldVb.getNumComponents(), oldVb.getFormat(), buffer); - - // Copy the vertex data from the old buffer into the new buffer - for (int i = 0; i < newNumVerts; i++) { - int oldIndex = newIndicesToOldIndices.get(i); - - // Copy the vertex attribute from the old index - // to the new index - oldVb.copyElement(oldIndex, newVb, i); + //check for data before copying, some buffers are just empty shells + //for caching purpose (HW skinning buffers), and will be filled when + //needed + if(oldVb.getData()!=null){ + // Create a new vertex buffer with similar configuration, but + // with the capacity of number of unique vertices + Buffer buffer = VertexBuffer.createBuffer(oldVb.getFormat(), oldVb.getNumComponents(), newNumVerts); + newVb.setupData(oldVb.getUsage(), oldVb.getNumComponents(), oldVb.getFormat(), buffer); + + // Copy the vertex data from the old buffer into the new buffer + for (int i = 0; i < newNumVerts; i++) { + int oldIndex = newIndicesToOldIndices.get(i); + + // Copy the vertex attribute from the old index + // to the new index + oldVb.copyElement(oldIndex, newVb, i); + } } // Set the buffer on the mesh