Fixed how Hardware BoneIndex and BoneWeight buffers are handled in extractVertexData when used for a shared mesh.
All buffers are now properly initialized and data copied over if needed. git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10855 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
27a7fde24d
commit
f6ca843f03
@ -1166,28 +1166,30 @@ public class Mesh implements Savable, Cloneable {
|
||||
// Now, create the vertex buffers
|
||||
SafeArrayList<VertexBuffer> 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);
|
||||
//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 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);
|
||||
// Copy the vertex attribute from the old index
|
||||
// to the new index
|
||||
oldVb.copyElement(oldIndex, newVb, i);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the buffer on the mesh
|
||||
|
Loading…
x
Reference in New Issue
Block a user