Fixed cloning to not confuse the hardware skinning safety check
that attempts to protect users from shared materials.
This commit is contained in:
parent
271f6492dd
commit
80f4e04935
@ -409,7 +409,23 @@ public class SkeletonControl extends AbstractControl implements Cloneable, JmeCl
|
||||
// Not automatic set cloning yet
|
||||
Set<Material> newMaterials = new HashSet<Material>();
|
||||
for( Material m : this.materials ) {
|
||||
newMaterials.add(cloner.clone(m));
|
||||
Material mClone = cloner.clone(m);
|
||||
newMaterials.add(mClone);
|
||||
if( mClone != m ) {
|
||||
// Material was really cloned so clear the bone matrices in case
|
||||
// this is hardware skinned. This allows a local version to be
|
||||
// used and will be reset on the material. Really this just avoids
|
||||
// the 'safety' check in controlRenderHardware(). Right now material
|
||||
// doesn't clone itself with the cloner (and doesn't clone its parameters)
|
||||
// else this would be unnecessary.
|
||||
MatParam boneMatrices = mClone.getParam("BoneMatrices");
|
||||
|
||||
// ...because for some strange reason you can't clear a non-existant
|
||||
// parameter.
|
||||
if( boneMatrices != null ) {
|
||||
mClone.clearParam("BoneMatrices");
|
||||
}
|
||||
}
|
||||
}
|
||||
this.materials = newMaterials;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user