- Material Support: Improve save to texture feature

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10215 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent cc9379b42a
commit 6732c15731
  1. 8
      sdk/jme3-materialeditor/nbproject/genfiles.properties
  2. 39
      sdk/jme3-materialeditor/src/com/jme3/gde/materials/EditableMaterialFile.java

@ -1,8 +1,8 @@
build.xml.data.CRC32=3c35bd02 build.xml.data.CRC32=5c252103
build.xml.script.CRC32=f284e28d build.xml.script.CRC32=f284e28d
build.xml.stylesheet.CRC32=a56c6a5b@2.49.1 build.xml.stylesheet.CRC32=a56c6a5b@2.50.1
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=3c35bd02 nbproject/build-impl.xml.data.CRC32=5c252103
nbproject/build-impl.xml.script.CRC32=56cee44d nbproject/build-impl.xml.script.CRC32=56cee44d
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.49.1 nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.50.1

@ -4,9 +4,12 @@
*/ */
package com.jme3.gde.materials; package com.jme3.gde.materials;
import com.jme3.asset.TextureKey;
import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.ProjectAssetManager;
import com.jme3.gde.core.util.Beans;
import com.jme3.gde.materials.wizards.StoreTextureWizardWizardAction; import com.jme3.gde.materials.wizards.StoreTextureWizardWizardAction;
import com.jme3.material.MatParam; import com.jme3.material.MatParam;
import com.jme3.material.MatParamTexture;
import com.jme3.material.Material; import com.jme3.material.Material;
import com.jme3.texture.Image; import com.jme3.texture.Image;
import com.jme3.texture.Texture; import com.jme3.texture.Texture;
@ -494,11 +497,7 @@ public class EditableMaterialFile {
setMatDefName(mat.getMaterialDef().getAssetName()); setMatDefName(mat.getMaterialDef().getAssetName());
createBaseMaterialFile(); createBaseMaterialFile();
materialParameters.clear(); materialParameters.clear();
Collection<MatParam> params = mat.getParams(); checkPackedTextureProps(mat);
for (Iterator<MatParam> it = params.iterator(); it.hasNext();) {
MatParam matParam = it.next();
checkPackedTextureProps(mat, matParam);
}
additionalRenderStates.put("Wireframe", new MaterialProperty("OnOff", "Wireframe", mat.getAdditionalRenderState().isWireframe() ? "On" : "Off")); additionalRenderStates.put("Wireframe", new MaterialProperty("OnOff", "Wireframe", mat.getAdditionalRenderState().isWireframe() ? "On" : "Off"));
additionalRenderStates.put("DepthWrite", new MaterialProperty("OnOff", "DepthWrite", mat.getAdditionalRenderState().isDepthWrite() ? "On" : "Off")); additionalRenderStates.put("DepthWrite", new MaterialProperty("OnOff", "DepthWrite", mat.getAdditionalRenderState().isDepthWrite() ? "On" : "Off"));
additionalRenderStates.put("DepthTest", new MaterialProperty("OnOff", "DepthTest", mat.getAdditionalRenderState().isDepthTest() ? "On" : "Off")); additionalRenderStates.put("DepthTest", new MaterialProperty("OnOff", "DepthTest", mat.getAdditionalRenderState().isDepthTest() ? "On" : "Off"));
@ -518,9 +517,11 @@ public class EditableMaterialFile {
* @param mat * @param mat
* @param param * @param param
*/ */
private void checkPackedTextureProps(Material mat, MatParam param) { private void checkPackedTextureProps(Material mat) {
Collection<MatParam> params = mat.getParams();
for (Iterator<MatParam> it = new ArrayList<MatParam>(params).iterator(); it.hasNext();) {
MatParam param = it.next();
MaterialProperty prop = new MaterialProperty(param); MaterialProperty prop = new MaterialProperty(param);
materialParameters.put(param.getName(), prop);
if (prop.getValue() == null) { if (prop.getValue() == null) {
switch (param.getVarType()) { switch (param.getVarType()) {
case Texture2D: case Texture2D:
@ -529,7 +530,8 @@ public class EditableMaterialFile {
case TextureBuffer: case TextureBuffer:
case TextureCubeMap: case TextureCubeMap:
try { try {
Texture tex = mat.getTextureParam(param.getName()).getTextureValue(); MatParamTexture texParam = mat.getTextureParam(param.getName());
Texture tex = texParam.getTextureValue();
Image img = tex.getImage(); Image img = tex.getImage();
if (img == null) { if (img == null) {
logger.log(Level.INFO, "No image found"); logger.log(Level.INFO, "No image found");
@ -545,17 +547,30 @@ public class EditableMaterialFile {
imgWrtr.write(null, new IIOImage(image, null, null), jpgWrtPrm); imgWrtr.write(null, new IIOImage(image, null, null), jpgWrtPrm);
imgOutStrm.close(); imgOutStrm.close();
out.close(); out.close();
String name = material.getName(); String texturePath = material.getName();
name = "Textures/" + name + "-" + param.getName() + ".png"; texturePath = "Textures/" + texturePath + "-" + param.getName() + ".png";
StoreTextureWizardWizardAction act = new StoreTextureWizardWizardAction(manager, out.toByteArray(), name); StoreTextureWizardWizardAction act = new StoreTextureWizardWizardAction(manager, out.toByteArray(), texturePath);
act.actionPerformed(null); act.actionPerformed(null);
prop.setValue(act.getName()); texturePath = act.getName();
TextureKey texKey = new TextureKey(texturePath);
TextureKey oldKey = (TextureKey)tex.getKey();
if(oldKey!=null){
Beans.copyProperties(texKey, oldKey);
}
//TODO: seems like flip is removed due to ImageToAwt
texKey.setFlipY(false);
Texture texture = manager.loadTexture(texKey);
MatParamTexture newParam = new MatParamTexture(texParam.getVarType(), texParam.getName(), texture, texParam.getUnit());
materialParameters.put(newParam.getName(), new MaterialProperty(newParam));
} catch (Exception ex) { } catch (Exception ex) {
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} }
break; break;
default: default:
} }
} else {
materialParameters.put(param.getName(), prop);
}
} }
} }

Loading…
Cancel
Save