* support for new terrain texture limit

* better threading

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7760 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
bre..ns 14 years ago
parent d9c3df086d
commit 4df19663dd
  1. 90
      sdk/jme3-terrain-editor/src/com/jme3/gde/terraineditor/TerrainEditorController.java
  2. 58
      sdk/jme3-terrain-editor/src/com/jme3/gde/terraineditor/TerrainEditorTopComponent.java
  3. 2
      sdk/nbproject/genfiles.properties
  4. 5
      sdk/nbproject/platform.properties

@ -83,13 +83,14 @@ public class TerrainEditorController {
private Node terrainNode;
private Node rootNode;
private AssetDataObject currentFileObject;
private TerrainEditorTopComponent topComponent;
// texture settings
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 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_TEXTURE_LAYERS = 7-BASE_TEXTURE_COUNT; // 16 max, minus the ones we are reserving
protected final int MAX_DIFFUSE = 12;
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);
this.currentFileObject = currentFileObject;
this.currentFileObject.setSaveCookie(terrainSaveCookie);
this.topComponent = topComponent;
}
public void setToolController(TerrainToolController toolController) {
@ -398,30 +400,6 @@ public class TerrainEditorController {
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.
@ -736,10 +714,10 @@ public class TerrainEditorController {
Texture tex = manager.loadAsset(new TextureKey(alphaBlendFileName, false));
if (i == 0)
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);
else if (i == 2)
mat.setTexture("AlphaMap_2", tex);*/
mat.setTexture("AlphaMap_2", tex);
}
// give the first layer default texture
@ -936,6 +914,60 @@ public class TerrainEditorController {
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.
@ -965,7 +997,7 @@ public class TerrainEditorController {
int count = 0;
for (int i=0; i<MAX_TEXTURE_LAYERS; i++) {
for (int i=0; i<MAX_TEXTURES; i++) {
Texture tex = doGetDiffuseTexture(i);
if (tex != null)
count++;

@ -126,13 +126,12 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
TerrainToolController toolController;
TerrainEditorController editorController;
private SceneRequest currentRequest;
private int currentTextureCount;
private boolean alreadyChoosing = false; // used for texture table selection
private CreateTerrainWizardAction terrainWizard;
private SkyboxWizardAction skyboxWizard;
private JmeSpatial selectedSpat;
private TerrainNodeListener terrainDeletedNodeListener;
private boolean availableNormalTextures;
private HelpCtx ctx = new HelpCtx("sdk.terrain_editor");
@ -628,13 +627,25 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
return;
int index = getTableModel().getRowCount(); // get the last row
addNewTextureLayer(index);
if (currentTextureCount >= editorController.MAX_TEXTURE_LAYERS)
addTextureButton.setEnabled(false);
if (currentTextureCount > 0)
removeTextureButton.setEnabled(true);
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
editorController.enableTextureButtons();
}//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
if (editorController == null || editorController.getTerrain(null) == null)
return;
@ -642,11 +653,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
return;
int index = getTableModel().getRowCount() - 1; // get the last row
removeTextureLayer(index);
if (currentTextureCount == 0)
removeTextureButton.setEnabled(false);
if (currentTextureCount < editorController.MAX_TEXTURE_LAYERS)
addTextureButton.setEnabled(true);
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
editorController.enableTextureButtons();
}//GEN-LAST:event_removeTextureButtonActionPerformed
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);
// editorController.getAlphaSaveDataObject(this);
editorController.setNeedsSave(true);
currentTextureCount = editorController.getNumUsedTextures();
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
editorController.enableTextureButtons();
reinitTextureTable(); // update the UI
@ -1003,7 +1007,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
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());
@ -1017,6 +1021,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
SceneApplication.getApplication().requestScene(request);
terrainDeletedNodeListener = new TerrainNodeListener();
editorController.enableTextureButtons();
}
// run on GL thread
@ -1177,8 +1182,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
else
toolController.setSelectedTextureIndex(-1);
currentTextureCount = editorController.getNumUsedTextures();
remainingTexturesLabel.setText(""+(editorController.MAX_TEXTURE_LAYERS-currentTextureCount));
editorController.enableTextureButtons();
triPlanarCheckBox.setSelected(editorController.isTriPlanarEnabled());
}
@ -1230,7 +1234,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
removeRow(0);
// 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))
continue;
@ -1268,7 +1272,7 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
// and add it to the actual material
setTexture(newIndex, (String)null);
setTextureScale(newIndex, scale);
currentTextureCount = editorController.getNumUsedTextures();
editorController.enableTextureButtons();
}
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) {
setValueAt(index, index, 2);
editorController.setNormalMap(index, texturePath);
currentTextureCount = editorController.getNumUsedTextures();
editorController.enableTextureButtons();
}
protected void setNormal(final int index, final Texture texture) {
setValueAt(index, index, 2);
editorController.setNormalMap(index, texture);
currentTextureCount = editorController.getNumUsedTextures();
editorController.enableTextureButtons();
}
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) {
removeRow(index);
editorController.removeTextureLayer(index);
currentTextureCount = editorController.getNumUsedTextures();
editorController.enableTextureButtons();
}
}
@ -1383,6 +1387,8 @@ public final class TerrainEditorTopComponent extends TopComponent implements Sce
try {
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);
Component view = editor.getCustomEditor();
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

@ -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.
nbproject/build-impl.xml.data.CRC32=cbef27ca
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.jemmy,\
org.netbeans.modules.languages,\
org.netbeans.modules.maven,\
org.netbeans.modules.maven.embedder,\
org.netbeans.modules.maven.grammar,\
org.netbeans.modules.maven.graph,\
org.netbeans.modules.maven.hints,\
org.netbeans.modules.maven.indexer,\
org.netbeans.modules.maven.junit,\
org.netbeans.modules.maven.kit,\
org.netbeans.modules.maven.model,\
org.netbeans.modules.maven.osgi,\
org.netbeans.modules.maven.persistence,\
org.netbeans.modules.maven.repository,\
@ -72,7 +68,6 @@ disabled.modules=\
org.netbeans.modules.spellchecker.dictionary_en,\
org.netbeans.modules.spellchecker.kit,\
org.netbeans.modules.spring.beans,\
org.netbeans.modules.swing.validation,\
org.netbeans.modules.swingapp,\
org.netbeans.modules.websvc.saas.codegen.java,\
org.netbeans.modules.xml.wsdl.model,\

Loading…
Cancel
Save