12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- From 9e187647d01b2994d8ba4eb0c925c3e4522d562a Mon Sep 17 00:00:00 2001
- From: MeFisto94 <[email protected]>
- Date: Wed, 25 May 2016 17:40:00 +0200
- Subject: [PATCH] Fix Hardware Skinning in 3.1 by implementing proper Array
- Serialization for MatParams and making the Shared Materials Check only a
- warning (it would pop up once each time you load the j3o and if you really
- use Shared Materials you have weird animations and some log spamming)
- ---
- .../java/com/jme3/animation/SkeletonControl.java | 3 +-
- .../src/main/java/com/jme3/material/MatParam.java | 37 ++++++++++++++++++++++
- 2 files changed, 39 insertions(+), 1 deletion(-)
- diff --git a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
- index b753ad2..1d14fa6 100644
- --- a/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
- +++ b/jme3-core/src/main/java/com/jme3/animation/SkeletonControl.java
- @@ -255,7 +255,8 @@ public class SkeletonControl extends AbstractControl implements Cloneable, JmeCl
- // is operating on this material, in that case, user
- // is sharing materials between models which is NOT allowed
- // when hardware skinning used.
- - throw new UnsupportedOperationException(
- +
- + Logger.getLogger(SkeletonControl.class.getName()).log(Level.SEVERE,
- "Material instances cannot be shared when hardware skinning is used. " +
- "Ensure all models use unique material instances."
- );
- diff --git a/jme3-core/src/main/java/com/jme3/material/MatParam.java b/jme3-core/src/main/java/com/jme3/material/MatParam.java
- index 8d965e3..6c069a1 100644
- --- a/jme3-core/src/main/java/com/jme3/material/MatParam.java
- +++ b/jme3-core/src/main/java/com/jme3/material/MatParam.java
- @@ -309,6 +309,8 @@ When arrays can be inserted in J3M files
- } else if (value instanceof Boolean) {
- Boolean b = (Boolean) value;
- oc.write(b.booleanValue(), "value_bool", false);
- + } else if (value.getClass().isArray() && value instanceof Savable[]) {
- + oc.write((Savable[])value, "value_savable_array", null);
- }
- }
-
- @@ -327,6 +329,41 @@ When arrays can be inserted in J3M files
- case Int:
- value = ic.readInt("value_int", 0);
- break;
- + case Vector2Array:
- + Savable[] savableArray = ic.readSavableArray("value_savable_array", null);
- + if (savableArray != null) {
- + value = new Vector2f[savableArray.length];
- + System.arraycopy(savableArray, 0, value, 0, savableArray.length);
- + }
- + break;
- + case Vector3Array:
- + savableArray = ic.readSavableArray("value_savable_array", null);
- + if (savableArray != null) {
- + value = new Vector3f[savableArray.length];
- + System.arraycopy(savableArray, 0, value, 0, savableArray.length);
- + }
- + break;
- + case Vector4Array:
- + savableArray = ic.readSavableArray("value_savable_array", null);
- + if (savableArray != null) {
- + value = new Vector4f[savableArray.length];
- + System.arraycopy(savableArray, 0, value, 0, savableArray.length);
- + }
- + break;
- + case Matrix3Array:
- + savableArray = ic.readSavableArray("value_savable_array", null);
- + if (savableArray != null) {
- + value = new Matrix3f[savableArray.length];
- + System.arraycopy(savableArray, 0, value, 0, savableArray.length);
- + }
- + break;
- + case Matrix4Array:
- + savableArray = ic.readSavableArray("value_savable_array", null);
- + if (savableArray != null) {
- + value = new Matrix4f[savableArray.length];
- + System.arraycopy(savableArray, 0, value, 0, savableArray.length);
- + }
- + break;
- default:
- value = ic.readSavable("value_savable", null);
- break;
- --
- 1.8.4
|