|
@@ -0,0 +1,85 @@
|
|
|
|
+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
|
|
|
|
+
|