The MaterialPreviewWidget now uses the MaterialPreviewRenderer.
Now rendering material preview is consistent for the ShaderNode editor and the material editor
This commit is contained in:
parent
7783e096cc
commit
f585e664cd
@ -41,7 +41,7 @@ public class MaterialPreviewRenderer implements SceneListener {
|
|||||||
private Geometry currentGeom;
|
private Geometry currentGeom;
|
||||||
private Material currentMaterial;
|
private Material currentMaterial;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
private JLabel label;
|
private final JLabel label;
|
||||||
|
|
||||||
public enum DisplayType {
|
public enum DisplayType {
|
||||||
|
|
||||||
@ -125,9 +125,9 @@ public class MaterialPreviewRenderer implements SceneListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Material reloadMaterial(Material mat, DesktopAssetManager assetManager) {
|
public Material reloadMaterial(Material mat, DesktopAssetManager assetManager) {
|
||||||
//clear the entire cache, there might be more clever things to do, like clearing only the matdef, and the associated shaders.
|
|
||||||
|
|
||||||
assetManager.clearCache();
|
// MaterialKey key = new MaterialKey(mat.getMaterialDef().getAssetName());
|
||||||
|
// assetManager.deleteFromCache(key);
|
||||||
|
|
||||||
//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());
|
||||||
|
@ -521,9 +521,11 @@ public final class MaterialEditorTopComponent extends CloneableTopComponent impl
|
|||||||
String text = jTextArea1.getText();
|
String text = jTextArea1.getText();
|
||||||
materialFile.setAsText(text);
|
materialFile.setAsText(text);
|
||||||
dataObject.setModified(false);
|
dataObject.setModified(false);
|
||||||
|
if( ! text.trim().equals("")){
|
||||||
materialPreviewWidget1.showMaterial(manager, materialFileName);
|
materialPreviewWidget1.showMaterial(manager, materialFileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setMatDefList(final String[] matDefs, String selected) {
|
public void setMatDefList(final String[] matDefs, String selected) {
|
||||||
EditableMaterialFile prop = materialFile;
|
EditableMaterialFile prop = materialFile;
|
||||||
|
@ -10,62 +10,46 @@
|
|||||||
*/
|
*/
|
||||||
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.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.PreviewRequest;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.gde.core.scene.SceneListener;
|
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.material.MatParam;
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
|
import com.jme3.renderer.RendererException;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
import com.jme3.scene.shape.Box;
|
import com.jme3.scene.shape.Box;
|
||||||
import com.jme3.scene.shape.Quad;
|
import com.jme3.scene.shape.Quad;
|
||||||
import com.jme3.scene.shape.Sphere;
|
import com.jme3.scene.shape.Sphere;
|
||||||
|
import com.jme3.util.MaterialDebugAppState;
|
||||||
import com.jme3.util.TangentBinormalGenerator;
|
import com.jme3.util.TangentBinormalGenerator;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Nehon
|
* @author Nehon
|
||||||
*/
|
*/
|
||||||
public class MaterialPreviewWidget extends javax.swing.JPanel implements SceneListener {
|
public class MaterialPreviewWidget extends javax.swing.JPanel {
|
||||||
|
|
||||||
private Geometry sphere;
|
|
||||||
private Geometry box;
|
|
||||||
private Geometry quad;
|
|
||||||
private Geometry currentGeom;
|
|
||||||
private Material currentMaterial;
|
|
||||||
private boolean init=false;
|
private boolean init=false;
|
||||||
|
private MaterialPreviewRenderer matRenderer;
|
||||||
/** Creates new form MaterialPreviewWidget */
|
/** Creates new form MaterialPreviewWidget */
|
||||||
public MaterialPreviewWidget() {
|
public MaterialPreviewWidget() {
|
||||||
initComponents();
|
initComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initWidget() {
|
private void initWidget() {
|
||||||
SceneApplication.getApplication().addSceneListener(this);
|
|
||||||
Sphere sphMesh = new Sphere(32, 32, 2.5f);
|
|
||||||
sphMesh.setTextureMode(Sphere.TextureMode.Projected);
|
|
||||||
sphMesh.updateGeometry(32, 32, 2.5f, false, false);
|
|
||||||
TangentBinormalGenerator.generate(sphMesh);
|
|
||||||
sphere = new Geometry("previewSphere", sphMesh);
|
|
||||||
sphere.setLocalRotation(new Quaternion().fromAngleAxis(FastMath.QUARTER_PI, Vector3f.UNIT_X));
|
|
||||||
|
|
||||||
Box boxMesh = new Box(new Vector3f(0, 0, 0), 1.75f, 1.75f, 1.75f);
|
|
||||||
TangentBinormalGenerator.generate(boxMesh);
|
|
||||||
box = new Geometry("previewBox", boxMesh);
|
|
||||||
box.setLocalRotation(new Quaternion().fromAngleAxis(-FastMath.DEG_TO_RAD * 30, Vector3f.UNIT_X).multLocal(new Quaternion().fromAngleAxis(FastMath.QUARTER_PI, Vector3f.UNIT_Y)));
|
|
||||||
|
|
||||||
Quad quadMesh = new Quad(4.5f, 4.5f);
|
|
||||||
TangentBinormalGenerator.generate(quadMesh);
|
|
||||||
quad = new Geometry("previewQuad", quadMesh);
|
|
||||||
quad.setLocalTranslation(new Vector3f(-2.25f, -2.25f, 0));
|
|
||||||
|
|
||||||
currentGeom = sphere;
|
|
||||||
sphereButton.setSelected(true);
|
sphereButton.setSelected(true);
|
||||||
|
matRenderer = new MaterialPreviewRenderer(previewLabel);
|
||||||
init=true;
|
init=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,29 +58,7 @@ public class MaterialPreviewWidget extends javax.swing.JPanel implements SceneLi
|
|||||||
if(!init){
|
if(!init){
|
||||||
initWidget();
|
initWidget();
|
||||||
}
|
}
|
||||||
try {
|
matRenderer.showMaterial(assetManager, materialFileName);
|
||||||
MaterialKey key = new MaterialKey(assetManager.getRelativeAssetPath(materialFileName));
|
|
||||||
assetManager.deleteFromCache(key);
|
|
||||||
Material mat = (Material) assetManager.loadAsset(key);
|
|
||||||
if (mat != null) {
|
|
||||||
currentMaterial = mat;
|
|
||||||
doShowMaterial(mat);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doShowMaterial(Material m) {
|
|
||||||
|
|
||||||
// geom.setLocalTranslation(-2.5f, -2.5f, 0);
|
|
||||||
// geom.lookAt(new Vector3f(5, 5, 5), Vector3f.UNIT_Y);
|
|
||||||
currentGeom.setMaterial(m);
|
|
||||||
if (currentGeom.getMaterial() != null) {
|
|
||||||
PreviewRequest request = new PreviewRequest(this, currentGeom);
|
|
||||||
request.getCameraRequest().setLocation(new Vector3f(0, 0, 7));
|
|
||||||
request.getCameraRequest().setLookAt(new Vector3f(0, 0, 0), Vector3f.UNIT_Y);
|
|
||||||
SceneApplication.getApplication().createPreview(request);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
@ -110,19 +72,7 @@ public class MaterialPreviewWidget extends javax.swing.JPanel implements SceneLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void cleanUp(){
|
public void cleanUp(){
|
||||||
SceneApplication.getApplication().removeSceneListener(this);
|
matRenderer.cleanUp();
|
||||||
}
|
|
||||||
|
|
||||||
public void previewCreated(PreviewRequest request) {
|
|
||||||
if (request.getRequester() == this) {
|
|
||||||
final ImageIcon icon = new ImageIcon(request.getImage());
|
|
||||||
java.awt.EventQueue.invokeLater(new Runnable() {
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
previewLabel.setIcon(icon);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method is called from within the constructor to
|
/** This method is called from within the constructor to
|
||||||
@ -209,18 +159,15 @@ public class MaterialPreviewWidget extends javax.swing.JPanel implements SceneLi
|
|||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
private void sphereButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sphereButtonActionPerformed
|
private void sphereButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sphereButtonActionPerformed
|
||||||
currentGeom = sphere;
|
matRenderer.switchDisplay(MaterialPreviewRenderer.DisplayType.Sphere);
|
||||||
doShowMaterial(currentMaterial);
|
|
||||||
}//GEN-LAST:event_sphereButtonActionPerformed
|
}//GEN-LAST:event_sphereButtonActionPerformed
|
||||||
|
|
||||||
private void cubeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cubeButtonActionPerformed
|
private void cubeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cubeButtonActionPerformed
|
||||||
currentGeom = box;
|
matRenderer.switchDisplay(MaterialPreviewRenderer.DisplayType.Box);
|
||||||
doShowMaterial(currentMaterial);
|
|
||||||
}//GEN-LAST:event_cubeButtonActionPerformed
|
}//GEN-LAST:event_cubeButtonActionPerformed
|
||||||
|
|
||||||
private void planeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_planeButtonActionPerformed
|
private void planeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_planeButtonActionPerformed
|
||||||
currentGeom = quad;
|
matRenderer.switchDisplay(MaterialPreviewRenderer.DisplayType.Quad);
|
||||||
doShowMaterial(currentMaterial);
|
|
||||||
}//GEN-LAST:event_planeButtonActionPerformed
|
}//GEN-LAST:event_planeButtonActionPerformed
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JToggleButton cubeButton;
|
private javax.swing.JToggleButton cubeButton;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user