diff --git a/engine/src/core/com/jme3/material/MatParam.java b/engine/src/core/com/jme3/material/MatParam.java
index 9e9a696e2..127f2809b 100644
--- a/engine/src/core/com/jme3/material/MatParam.java
+++ b/engine/src/core/com/jme3/material/MatParam.java
@@ -32,15 +32,22 @@
package com.jme3.material;
+import com.jme3.asset.TextureKey;
import com.jme3.export.InputCapsule;
import com.jme3.export.JmeExporter;
import com.jme3.export.JmeImporter;
import com.jme3.export.OutputCapsule;
import com.jme3.export.Savable;
+import com.jme3.math.ColorRGBA;
+import com.jme3.math.Quaternion;
+import com.jme3.math.Vector2f;
+import com.jme3.math.Vector3f;
+import com.jme3.math.Vector4f;
import com.jme3.renderer.GL1Renderer;
import com.jme3.renderer.Renderer;
-import com.jme3.shader.Uniform;
import com.jme3.shader.VarType;
+import com.jme3.texture.Texture;
+import com.jme3.texture.Texture.WrapMode;
import java.io.IOException;
public class MatParam implements Savable, Cloneable {
@@ -49,7 +56,6 @@ public class MatParam implements Savable, Cloneable {
protected String name;
protected Object value;
protected FixedFuncBinding ffBinding;
-// protected Uniform uniform;
public MatParam(VarType type, String name, Object value, FixedFuncBinding ffBinding){
this.type = type;
@@ -85,13 +91,66 @@ public class MatParam implements Savable, Cloneable {
this.value = value;
}
-// public Uniform getUniform() {
-// return uniform;
-// }
-//
-// public void setUniform(Uniform uniform) {
-// this.uniform = uniform;
-// }
+ /**
+ * Returns the material parameter value as it would appear in a J3M
+ * file. E.g.
+ *
+ * MaterialParameters {
+ * ABC : 1 2 3 4
+ * }
+ *
+ * Assuming "ABC" is a Vector4 parameter, then the value
+ * "1 2 3 4" would be returned by this method.
+ *
+ * @return material parameter value as it would appear in a J3M file.
+ */
+ public String getValueAsString(){
+ switch (type){
+ case Boolean:
+ case Float:
+ case Int:
+ return value.toString();
+ case Vector2:
+ Vector2f v2 = (Vector2f) value;
+ return v2.getX() + " " + v2.getY();
+ case Vector3:
+ Vector3f v3 = (Vector3f) value;
+ return v3.getX() + " " + v3.getY() + " " + v3.getZ();
+ case Vector4:
+ // can be either ColorRGBA, Vector4f or Quaternion
+ if (value instanceof Vector4f){
+ Vector4f v4 = (Vector4f) value;
+ return v4.getX() + " " + v4.getY() + " " +
+ v4.getZ() + " " + v4.getW();
+ }else if (value instanceof ColorRGBA){
+ ColorRGBA color = (ColorRGBA) value;
+ return color.getRed() + " " + color.getGreen() + " " +
+ color.getBlue() + " " + color.getAlpha();
+ }else if (value instanceof Quaternion){
+ Quaternion quat = (Quaternion) value;
+ return quat.getX() + " " + quat.getY() + " " +
+ quat.getZ() + " " + quat.getW();
+ }else{
+ throw new UnsupportedOperationException("Unexpected Vector4 type: " + value);
+ }
+ case Texture2D:
+ case Texture3D:
+ case TextureArray:
+ case TextureBuffer:
+ case TextureCubeMap:
+ Texture texVal = (Texture) value;
+ TextureKey texKey = (TextureKey) texVal.getKey();
+ String ret = "";
+ if (texKey.isFlipY())
+ ret += "Flip ";
+ if (texVal.getWrap(Texture.WrapAxis.S) == WrapMode.Repeat)
+ ret += "Repeat ";
+
+ return ret + texKey.getName();
+ default:
+ return null; // parameter type not supported in J3M
+ }
+ }
@Override
public MatParam clone(){