* support for new terrain texture limit
* better threading git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7760 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
d9c3df086d
commit
4df19663dd
@ -83,13 +83,14 @@ public class TerrainEditorController {
|
|||||||
private Node terrainNode;
|
private Node terrainNode;
|
||||||
private Node rootNode;
|
private Node rootNode;
|
||||||
private AssetDataObject currentFileObject;
|
private AssetDataObject currentFileObject;
|
||||||
|
private TerrainEditorTopComponent topComponent;
|
||||||
|
|
||||||
// texture settings
|
// texture settings
|
||||||
public static final String DEFAULT_TERRAIN_TEXTURE = "com/jme3/gde/terraineditor/dirt.jpg";
|
public static final String DEFAULT_TERRAIN_TEXTURE = "com/jme3/gde/terraineditor/dirt.jpg";
|
||||||
public static final float DEFAULT_TEXTURE_SCALE = 16.0625f;
|
public static final float DEFAULT_TEXTURE_SCALE = 16.0625f;
|
||||||
public static final int NUM_ALPHA_TEXTURES = 3;
|
public static final int NUM_ALPHA_TEXTURES = 3;
|
||||||
private final int BASE_TEXTURE_COUNT = NUM_ALPHA_TEXTURES; // add any others here, like a global specular map
|
protected final int MAX_DIFFUSE = 12;
|
||||||
protected final int MAX_TEXTURE_LAYERS = 7-BASE_TEXTURE_COUNT; // 16 max, minus the ones we are reserving
|
protected final int MAX_TEXTURES = 16-NUM_ALPHA_TEXTURES; // 16 max (diffuse and normal), minus the ones we are reserving
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -113,6 +114,7 @@ public class TerrainEditorController {
|
|||||||
rootNode = this.jmeRootNode.getLookup().lookup(Node.class);
|
rootNode = this.jmeRootNode.getLookup().lookup(Node.class);
|
||||||
this.currentFileObject = currentFileObject;
|
this.currentFileObject = currentFileObject;
|
||||||
this.currentFileObject.setSaveCookie(terrainSaveCookie);
|
this.currentFileObject.setSaveCookie(terrainSaveCookie);
|
||||||
|
this.topComponent = topComponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setToolController(TerrainToolController toolController) {
|
public void setToolController(TerrainToolController toolController) {
|
||||||
@ -398,30 +400,6 @@ public class TerrainEditorController {
|
|||||||
return tex;
|
return tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the diffuse texture at the specified layer.
|
|
||||||
* Run this on the GL thread!
|
|
||||||
*/
|
|
||||||
private Texture doGetAlphaTextureFromDiffuse(Terrain terrain, int diffuseLayer) {
|
|
||||||
int alphaIdx = diffuseLayer/4; // 4 = rgba = 4 textures
|
|
||||||
|
|
||||||
return doGetAlphaTexture(terrain, alphaIdx);
|
|
||||||
/* Terrain terrain = (Terrain) getTerrain(null);
|
|
||||||
MatParam matParam = null;
|
|
||||||
//TODO: add when supported
|
|
||||||
// if (alphaIdx == 0)
|
|
||||||
matParam = terrain.getMaterial().getParam("AlphaMap");
|
|
||||||
// else
|
|
||||||
// matParam = terrain.getMaterial().getParam("AlphaMap_"+alphaIdx);
|
|
||||||
|
|
||||||
if (matParam == null || matParam.getValue() == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Texture tex = (Texture) matParam.getValue();
|
|
||||||
return tex;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the diffuse texture at the specified layer.
|
* Set the diffuse texture at the specified layer.
|
||||||
@ -736,10 +714,10 @@ public class TerrainEditorController {
|
|||||||
Texture tex = manager.loadAsset(new TextureKey(alphaBlendFileName, false));
|
Texture tex = manager.loadAsset(new TextureKey(alphaBlendFileName, false));
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
mat.setTexture("AlphaMap", tex);
|
mat.setTexture("AlphaMap", tex);
|
||||||
/*else if (i == 1) // add these in when they are supported
|
else if (i == 1) // add these in when they are supported
|
||||||
mat.setTexture("AlphaMap_1", tex);
|
mat.setTexture("AlphaMap_1", tex);
|
||||||
else if (i == 2)
|
else if (i == 2)
|
||||||
mat.setTexture("AlphaMap_2", tex);*/
|
mat.setTexture("AlphaMap_2", tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// give the first layer default texture
|
// give the first layer default texture
|
||||||
@ -936,6 +914,60 @@ public class TerrainEditorController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the add and remove texture buttons based
|
||||||
|
* on how many textures are currently being used.
|
||||||
|
*/
|
||||||
|
protected void enableTextureButtons() {
|
||||||
|
final int numAvailable = MAX_TEXTURES-doGetNumUsedTextures();
|
||||||
|
final boolean add = doGetNumDiffuseTextures() < MAX_DIFFUSE && numAvailable > 0;
|
||||||
|
final boolean remove = doGetNumDiffuseTextures() > 1;
|
||||||
|
|
||||||
|
java.awt.EventQueue.invokeLater(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
topComponent.enableAddTextureButton(add);
|
||||||
|
topComponent.enableRemoveTextureButton(remove);
|
||||||
|
topComponent.updateTextureCountLabel(numAvailable);
|
||||||
|
topComponent.setAddNormalTextureEnabled(numAvailable>0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How many diffuse textures are being used.
|
||||||
|
* Blocking call on GL thread
|
||||||
|
*/
|
||||||
|
protected int getNumDiffuseTextures() {
|
||||||
|
try {
|
||||||
|
Integer count =
|
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Integer>() {
|
||||||
|
public Integer call() throws Exception {
|
||||||
|
return doGetNumDiffuseTextures();
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
return count;
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int doGetNumDiffuseTextures() {
|
||||||
|
Terrain terrain = (Terrain) getTerrain(null);
|
||||||
|
if (terrain == null)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
for (int i=0; i<MAX_TEXTURES; i++) {
|
||||||
|
Texture tex = doGetDiffuseTexture(i);
|
||||||
|
if (tex != null)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many textures are currently being used.
|
* How many textures are currently being used.
|
||||||
@ -965,7 +997,7 @@ public class TerrainEditorController {
|
|||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
for (int i=0; i<MAX_TEXTURE_LAYERS; i++) {
|
for (int i=0; i<MAX_TEXTURES; i++) {
|
||||||
Texture tex = doGetDiffuseTexture(i);
|
Texture tex = doGetDiffuseTexture(i);
|
||||||
if (tex != null)
|
if (tex != null)
|
||||||
count++;
|
count++;
|
||||||
|
@ -126,13 +126,12 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
TerrainToolController toolController;
|
TerrainToolController toolController;
|
||||||
TerrainEditorController editorController;
|
TerrainEditorController editorController;
|
||||||
private SceneRequest currentRequest;
|
private SceneRequest currentRequest;
|
||||||
private int currentTextureCount;
|
|
||||||
private boolean alreadyChoosing = false; // used for texture table selection
|
private boolean alreadyChoosing = false; // used for texture table selection
|
||||||
private CreateTerrainWizardAction terrainWizard;
|
private CreateTerrainWizardAction terrainWizard;
|
||||||
private SkyboxWizardAction skyboxWizard;
|
private SkyboxWizardAction skyboxWizard;
|
||||||
private JmeSpatial selectedSpat;
|
private JmeSpatial selectedSpat;
|
||||||
private TerrainNodeListener terrainDeletedNodeListener;
|
private TerrainNodeListener terrainDeletedNodeListener;
|
||||||
|
private boolean availableNormalTextures;
|
||||||
|
|
||||||
private HelpCtx ctx = new HelpCtx("sdk.terrain_editor");
|
private HelpCtx ctx = new HelpCtx("sdk.terrain_editor");
|
||||||
|
|
||||||
@ -628,13 +627,25 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
return;
|
return;
|
||||||
int index = getTableModel().getRowCount(); // get the last row
|
int index = getTableModel().getRowCount(); // get the last row
|
||||||
addNewTextureLayer(index);
|
addNewTextureLayer(index);
|
||||||
if (currentTextureCount >= editorController.MAX_TEXTURE_LAYERS)
|
editorController.enableTextureButtons();
|
||||||
addTextureButton.setEnabled(false);
|
|
||||||
if (currentTextureCount > 0)
|
|
||||||
removeTextureButton.setEnabled(true);
|
|
||||||
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
|
|
||||||
}//GEN-LAST:event_addTextureButtonActionPerformed
|
}//GEN-LAST:event_addTextureButtonActionPerformed
|
||||||
|
|
||||||
|
protected void enableAddTextureButton(boolean enabled) {
|
||||||
|
addTextureButton.setEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void enableRemoveTextureButton(boolean enabled) {
|
||||||
|
removeTextureButton.setEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateTextureCountLabel(int count) {
|
||||||
|
remainingTexturesLabel.setText(""+count);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setAddNormalTextureEnabled(boolean enabled) {
|
||||||
|
availableNormalTextures = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
private void removeTextureButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTextureButtonActionPerformed
|
private void removeTextureButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeTextureButtonActionPerformed
|
||||||
if (editorController == null || editorController.getTerrain(null) == null)
|
if (editorController == null || editorController.getTerrain(null) == null)
|
||||||
return;
|
return;
|
||||||
@ -642,11 +653,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
return;
|
return;
|
||||||
int index = getTableModel().getRowCount() - 1; // get the last row
|
int index = getTableModel().getRowCount() - 1; // get the last row
|
||||||
removeTextureLayer(index);
|
removeTextureLayer(index);
|
||||||
if (currentTextureCount == 0)
|
editorController.enableTextureButtons();
|
||||||
removeTextureButton.setEnabled(false);
|
|
||||||
if (currentTextureCount < editorController.MAX_TEXTURE_LAYERS)
|
|
||||||
addTextureButton.setEnabled(true);
|
|
||||||
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
|
|
||||||
}//GEN-LAST:event_removeTextureButtonActionPerformed
|
}//GEN-LAST:event_removeTextureButtonActionPerformed
|
||||||
|
|
||||||
private void eraseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_eraseButtonActionPerformed
|
private void eraseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_eraseButtonActionPerformed
|
||||||
@ -813,12 +820,9 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
|
|
||||||
addSaveNode(selectedSpat);
|
addSaveNode(selectedSpat);
|
||||||
|
|
||||||
// editorController.getAlphaSaveDataObject(this);
|
|
||||||
|
|
||||||
editorController.setNeedsSave(true);
|
editorController.setNeedsSave(true);
|
||||||
|
|
||||||
currentTextureCount = editorController.getNumUsedTextures();
|
editorController.enableTextureButtons();
|
||||||
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
|
|
||||||
|
|
||||||
reinitTextureTable(); // update the UI
|
reinitTextureTable(); // update the UI
|
||||||
|
|
||||||
@ -1003,7 +1007,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
|
|
||||||
addSaveNode(jmeNode);
|
addSaveNode(jmeNode);
|
||||||
|
|
||||||
SceneUndoRedoManager m = Lookup.getDefault().lookup(SceneUndoRedoManager.class);//TODO remove this line
|
//SceneUndoRedoManager m = Lookup.getDefault().lookup(SceneUndoRedoManager.class);//TODO remove this line
|
||||||
|
|
||||||
Logger.getLogger(TerrainEditorTopComponent.class.getName()).finer("Terrain openScene "+file.getName());
|
Logger.getLogger(TerrainEditorTopComponent.class.getName()).finer("Terrain openScene "+file.getName());
|
||||||
|
|
||||||
@ -1017,6 +1021,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
SceneApplication.getApplication().requestScene(request);
|
SceneApplication.getApplication().requestScene(request);
|
||||||
|
|
||||||
terrainDeletedNodeListener = new TerrainNodeListener();
|
terrainDeletedNodeListener = new TerrainNodeListener();
|
||||||
|
editorController.enableTextureButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
// run on GL thread
|
// run on GL thread
|
||||||
@ -1177,8 +1182,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
else
|
else
|
||||||
toolController.setSelectedTextureIndex(-1);
|
toolController.setSelectedTextureIndex(-1);
|
||||||
|
|
||||||
currentTextureCount = editorController.getNumUsedTextures();
|
editorController.enableTextureButtons();
|
||||||
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
|
|
||||||
triPlanarCheckBox.setSelected(editorController.isTriPlanarEnabled());
|
triPlanarCheckBox.setSelected(editorController.isTriPlanarEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1230,7 +1234,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
removeRow(0);
|
removeRow(0);
|
||||||
|
|
||||||
// fill the table with the proper data
|
// fill the table with the proper data
|
||||||
for (int i=0; i<editorController.MAX_TEXTURE_LAYERS; i++) {
|
for (int i=0; i<editorController.MAX_TEXTURES; i++) {
|
||||||
if (!editorController.hasTextureAt(i))
|
if (!editorController.hasTextureAt(i))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1268,7 +1272,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
// and add it to the actual material
|
// and add it to the actual material
|
||||||
setTexture(newIndex, (String)null);
|
setTexture(newIndex, (String)null);
|
||||||
setTextureScale(newIndex, scale);
|
setTextureScale(newIndex, scale);
|
||||||
currentTextureCount = editorController.getNumUsedTextures();
|
editorController.enableTextureButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setTexture(final int index, final Texture texture) {
|
protected void setTexture(final int index, final Texture texture) {
|
||||||
@ -1284,13 +1288,13 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
protected void setNormal(final int index, final String texturePath) {
|
protected void setNormal(final int index, final String texturePath) {
|
||||||
setValueAt(index, index, 2);
|
setValueAt(index, index, 2);
|
||||||
editorController.setNormalMap(index, texturePath);
|
editorController.setNormalMap(index, texturePath);
|
||||||
currentTextureCount = editorController.getNumUsedTextures();
|
editorController.enableTextureButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setNormal(final int index, final Texture texture) {
|
protected void setNormal(final int index, final Texture texture) {
|
||||||
setValueAt(index, index, 2);
|
setValueAt(index, index, 2);
|
||||||
editorController.setNormalMap(index, texture);
|
editorController.setNormalMap(index, texture);
|
||||||
currentTextureCount = editorController.getNumUsedTextures();
|
editorController.enableTextureButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setTextureScale(int index, float scale) {
|
protected void setTextureScale(int index, float scale) {
|
||||||
@ -1300,7 +1304,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
protected void removeTexture(final int index) {
|
protected void removeTexture(final int index) {
|
||||||
removeRow(index);
|
removeRow(index);
|
||||||
editorController.removeTextureLayer(index);
|
editorController.removeTextureLayer(index);
|
||||||
currentTextureCount = editorController.getNumUsedTextures();
|
editorController.enableTextureButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1383,6 +1387,8 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Texture selectedTex = getTextureFromModel(row); // delegates to sub class
|
Texture selectedTex = getTextureFromModel(row); // delegates to sub class
|
||||||
|
if (selectedTex == null && !availableNormalTextures) // bail if we are at our texture limit
|
||||||
|
return;
|
||||||
TexturePropertyEditor editor = new TexturePropertyEditor(selectedTex);
|
TexturePropertyEditor editor = new TexturePropertyEditor(selectedTex);
|
||||||
Component view = editor.getCustomEditor();
|
Component view = editor.getCustomEditor();
|
||||||
view.setVisible(true);
|
view.setVisible(true);
|
||||||
@ -1466,10 +1472,6 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Component getTopComponent() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A file filter to only show images
|
* A file filter to only show images
|
||||||
|
@ -5,4 +5,4 @@ build.xml.stylesheet.CRC32=531c622b@1.31.1.7
|
|||||||
# 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=cbef27ca
|
nbproject/build-impl.xml.data.CRC32=cbef27ca
|
||||||
nbproject/build-impl.xml.script.CRC32=ce1d717c
|
nbproject/build-impl.xml.script.CRC32=ce1d717c
|
||||||
nbproject/build-impl.xml.stylesheet.CRC32=183e6ef3@1.42.1
|
nbproject/build-impl.xml.stylesheet.CRC32=183e6ef3@1.42.2
|
||||||
|
@ -51,15 +51,11 @@ disabled.modules=\
|
|||||||
org.netbeans.modules.jellytools.platform,\
|
org.netbeans.modules.jellytools.platform,\
|
||||||
org.netbeans.modules.jemmy,\
|
org.netbeans.modules.jemmy,\
|
||||||
org.netbeans.modules.languages,\
|
org.netbeans.modules.languages,\
|
||||||
org.netbeans.modules.maven,\
|
|
||||||
org.netbeans.modules.maven.embedder,\
|
|
||||||
org.netbeans.modules.maven.grammar,\
|
org.netbeans.modules.maven.grammar,\
|
||||||
org.netbeans.modules.maven.graph,\
|
org.netbeans.modules.maven.graph,\
|
||||||
org.netbeans.modules.maven.hints,\
|
org.netbeans.modules.maven.hints,\
|
||||||
org.netbeans.modules.maven.indexer,\
|
|
||||||
org.netbeans.modules.maven.junit,\
|
org.netbeans.modules.maven.junit,\
|
||||||
org.netbeans.modules.maven.kit,\
|
org.netbeans.modules.maven.kit,\
|
||||||
org.netbeans.modules.maven.model,\
|
|
||||||
org.netbeans.modules.maven.osgi,\
|
org.netbeans.modules.maven.osgi,\
|
||||||
org.netbeans.modules.maven.persistence,\
|
org.netbeans.modules.maven.persistence,\
|
||||||
org.netbeans.modules.maven.repository,\
|
org.netbeans.modules.maven.repository,\
|
||||||
@ -72,7 +68,6 @@ disabled.modules=\
|
|||||||
org.netbeans.modules.spellchecker.dictionary_en,\
|
org.netbeans.modules.spellchecker.dictionary_en,\
|
||||||
org.netbeans.modules.spellchecker.kit,\
|
org.netbeans.modules.spellchecker.kit,\
|
||||||
org.netbeans.modules.spring.beans,\
|
org.netbeans.modules.spring.beans,\
|
||||||
org.netbeans.modules.swing.validation,\
|
|
||||||
org.netbeans.modules.swingapp,\
|
org.netbeans.modules.swingapp,\
|
||||||
org.netbeans.modules.websvc.saas.codegen.java,\
|
org.netbeans.modules.websvc.saas.codegen.java,\
|
||||||
org.netbeans.modules.xml.wsdl.model,\
|
org.netbeans.modules.xml.wsdl.model,\
|
||||||
|
Loading…
x
Reference in New Issue
Block a user