Fixed an issue that prevented the preview to be displayed properly in the material editor

experimental
Nehon 10 years ago
parent 55195bd996
commit 0e1619c01b
  1. 18
      sdk/jme3-materialeditor/src/com/jme3/gde/materials/MaterialPreviewRenderer.java
  2. 20
      sdk/jme3-materialeditor/src/com/jme3/gde/materials/multiview/widgets/MaterialPreviewWidget.java

@ -97,14 +97,14 @@ public class MaterialPreviewRenderer implements SceneListener {
showMaterial(m, null); showMaterial(m, null);
} }
public void showMaterial(final Material m,final String techniqueName) { public void showMaterial(final Material m, final String techniqueName) {
if (!init) { if (!init) {
init(); init();
} }
SceneApplication.getApplication().enqueue(new Callable<Material>() { SceneApplication.getApplication().enqueue(new Callable<Material>() {
public Material call() throws Exception { public Material call() throws Exception {
if(techniqueName!= null){ if (techniqueName != null) {
try { try {
m.selectTechnique(techniqueName, SceneApplication.getApplication().getRenderManager()); m.selectTechnique(techniqueName, SceneApplication.getApplication().getRenderManager());
} catch (Exception e) { } catch (Exception e) {
@ -142,9 +142,10 @@ public class MaterialPreviewRenderer implements SceneListener {
} }
private int lastErrorHash = 0; private int lastErrorHash = 0;
private void smartLog(String expText, String message){
private void smartLog(String expText, String message) {
int hash = message.hashCode(); int hash = message.hashCode();
if(hash != lastErrorHash){ if (hash != lastErrorHash) {
Logger.getLogger(MaterialPreviewRenderer.class.getName()).log(Level.SEVERE, expText, message); Logger.getLogger(MaterialPreviewRenderer.class.getName()).log(Level.SEVERE, expText, message);
lastErrorHash = hash; lastErrorHash = hash;
} }
@ -152,7 +153,7 @@ public class MaterialPreviewRenderer implements SceneListener {
public Material reloadMaterial(Material mat) { public Material reloadMaterial(Material mat) {
((ProjectAssetManager)mat.getMaterialDef().getAssetManager()).clearCache(); ((ProjectAssetManager) mat.getMaterialDef().getAssetManager()).clearCache();
//creating a dummy mat with the mat def of the mat to reload //creating a dummy mat with the mat def of the mat to reload
Material dummy = new Material(mat.getMaterialDef()); Material dummy = new Material(mat.getMaterialDef());
@ -160,7 +161,9 @@ public class MaterialPreviewRenderer implements SceneListener {
for (MatParam matParam : mat.getParams()) { for (MatParam matParam : mat.getParams()) {
dummy.setParam(matParam.getName(), matParam.getVarType(), matParam.getValue()); dummy.setParam(matParam.getName(), matParam.getVarType(), matParam.getValue());
} }
if (mat.getActiveTechnique() != null) {
dummy.selectTechnique(mat.getActiveTechnique().getDef().getName(), SceneApplication.getApplication().getRenderManager()); dummy.selectTechnique(mat.getActiveTechnique().getDef().getName(), SceneApplication.getApplication().getRenderManager());
}
dummy.getAdditionalRenderState().set(mat.getAdditionalRenderState()); dummy.getAdditionalRenderState().set(mat.getAdditionalRenderState());
//creating a dummy geom and assigning the dummy material to it //creating a dummy geom and assigning the dummy material to it
@ -181,8 +184,10 @@ public class MaterialPreviewRenderer implements SceneListener {
} }
}); });
return null; return null;
} catch (NullPointerException npe){ } catch (NullPointerException npe) {
//utterly bad, but for some reason I get random NPE here and can't figure out why so to avoid bigger issues, I just catch it. //utterly bad, but for some reason I get random NPE here and can't figure out why so to avoid bigger issues, I just catch it.
//the printStackTrace is intended, it will show up in debug mode, but won't be displayed in standzrd mode
npe.printStackTrace();
return null; return null;
} }
@ -191,7 +196,6 @@ public class MaterialPreviewRenderer implements SceneListener {
return dummy; return dummy;
} }
public void switchDisplay(DisplayType type) { public void switchDisplay(DisplayType type) {
switch (type) { switch (type) {
case Box: case Box:

@ -10,29 +10,9 @@
*/ */
package com.jme3.gde.materials.multiview.widgets; package com.jme3.gde.materials.multiview.widgets;
import com.jme3.asset.DesktopAssetManager;
import com.jme3.asset.MaterialKey;
import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.ProjectAssetManager;
import com.jme3.gde.core.scene.PreviewRequest;
import com.jme3.gde.core.scene.SceneApplication;
import com.jme3.gde.core.scene.SceneListener;
import com.jme3.gde.core.scene.SceneRequest; import com.jme3.gde.core.scene.SceneRequest;
import com.jme3.gde.materials.MaterialPreviewRenderer; import com.jme3.gde.materials.MaterialPreviewRenderer;
import com.jme3.material.MatParam;
import com.jme3.material.Material;
import com.jme3.math.FastMath;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RendererException;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.scene.shape.Quad;
import com.jme3.scene.shape.Sphere;
import com.jme3.util.MaterialDebugAppState;
import com.jme3.util.TangentBinormalGenerator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
/** /**
* *

Loading…
Cancel
Save