From be7a22e3d5eaed0ca04b7e136e411b9589b8d359 Mon Sep 17 00:00:00 2001 From: "Sha..rd" Date: Tue, 28 Feb 2012 03:57:54 +0000 Subject: [PATCH] * Remove most common usage of IntMap.iterator() * Correct small typo in UniformBinding * Make IntMap.iterator() make new iterator each time * Prevent TangentBinormalGenerator from crashing when it encounters some mesh without texcoord/normal buffers * AWTLoader now properly fails when AWT can't load the image instead of returning null git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9219 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../core/com/jme3/renderer/RenderManager.java | 7 +++-- engine/src/core/com/jme3/scene/BatchNode.java | 6 ++--- engine/src/core/com/jme3/scene/Mesh.java | 26 ++++++++----------- .../core/com/jme3/shader/UniformBinding.java | 2 +- engine/src/core/com/jme3/util/IntMap.java | 7 +++-- .../jme3/util/TangentBinormalGenerator.java | 12 ++++++--- .../com/jme3/texture/plugins/AWTLoader.java | 14 ++++++---- .../jme3/scene/plugins/ogre/MeshLoader.java | 5 ++-- .../converters/model/ModelConverter.java | 4 +-- .../optimize/GeometryBatchFactory.java | 8 +++--- 10 files changed, 47 insertions(+), 44 deletions(-) diff --git a/engine/src/core/com/jme3/renderer/RenderManager.java b/engine/src/core/com/jme3/renderer/RenderManager.java index 86305c5ca..a0f5fdfe5 100644 --- a/engine/src/core/com/jme3/renderer/RenderManager.java +++ b/engine/src/core/com/jme3/renderer/RenderManager.java @@ -730,10 +730,9 @@ public class RenderManager { gm.getMaterial().preload(this); Mesh mesh = gm.getMesh(); if (mesh != null) { - for (Entry entry : mesh.getBuffers()) { - VertexBuffer buf = entry.getValue(); - if (buf.getData() != null) { - renderer.updateBufferData(buf); + for (VertexBuffer vb : mesh.getBufferList().getArray()) { + if (vb.getData() != null) { + renderer.updateBufferData(vb); } } } diff --git a/engine/src/core/com/jme3/scene/BatchNode.java b/engine/src/core/com/jme3/scene/BatchNode.java index bc1b2cb50..79abb7d31 100644 --- a/engine/src/core/com/jme3/scene/BatchNode.java +++ b/engine/src/core/com/jme3/scene/BatchNode.java @@ -408,9 +408,9 @@ public class BatchNode extends Node implements Savable { throw new UnsupportedOperationException(); } - for (Entry entry : geom.getMesh().getBuffers()) { - compsForBuf[entry.getKey()] = entry.getValue().getNumComponents(); - formatForBuf[entry.getKey()] = entry.getValue().getFormat(); + for (VertexBuffer vb : geom.getMesh().getBufferList().getArray()) { + compsForBuf[vb.getBufferType().ordinal()] = vb.getNumComponents(); + formatForBuf[vb.getBufferType().ordinal()] = vb.getFormat(); } if (mode != null && mode != listMode) { diff --git a/engine/src/core/com/jme3/scene/Mesh.java b/engine/src/core/com/jme3/scene/Mesh.java index 7f7fc9cad..036e52567 100644 --- a/engine/src/core/com/jme3/scene/Mesh.java +++ b/engine/src/core/com/jme3/scene/Mesh.java @@ -43,7 +43,6 @@ import com.jme3.math.Matrix4f; import com.jme3.math.Triangle; import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; -import com.jme3.scene.VertexBuffer; import com.jme3.scene.VertexBuffer.Format; import com.jme3.scene.VertexBuffer.Type; import com.jme3.scene.VertexBuffer.Usage; @@ -55,8 +54,6 @@ import com.jme3.util.SafeArrayList; import java.io.IOException; import java.nio.*; import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; /** * Mesh is used to store rendering data. @@ -237,9 +234,9 @@ public class Mesh implements Savable, Cloneable { clone.buffers = new IntMap(); clone.buffersList = new SafeArrayList(VertexBuffer.class); - for (Entry ent : buffers){ - VertexBuffer bufClone = ent.getValue().clone(); - clone.buffers.put(ent.getKey(), bufClone); + for (VertexBuffer vb : buffersList.getArray()){ + VertexBuffer bufClone = vb.clone(); + clone.buffers.put(vb.getBufferType().ordinal(), bufClone); clone.buffersList.add(bufClone); } @@ -540,8 +537,8 @@ public class Mesh implements Savable, Cloneable { * for all {@link VertexBuffer vertex buffers} on this Mesh. */ public void setStatic() { - for (Entry entry : buffers){ - entry.getValue().setUsage(Usage.Static); + for (VertexBuffer vb : buffersList.getArray()){ + vb.setUsage(Usage.Static); } } @@ -551,8 +548,8 @@ public class Mesh implements Savable, Cloneable { * for all {@link VertexBuffer vertex buffers} on this Mesh. */ public void setDynamic() { - for (Entry entry : buffers){ - entry.getValue().setUsage(Usage.Dynamic); + for (VertexBuffer vb : buffersList.getArray()){ + vb.setUsage(Usage.Dynamic); } } @@ -562,8 +559,8 @@ public class Mesh implements Savable, Cloneable { * for all {@link VertexBuffer vertex buffers} on this Mesh. */ public void setStreamed(){ - for (Entry entry : buffers){ - entry.getValue().setUsage(Usage.Stream); + for (VertexBuffer vb : buffersList.getArray()){ + vb.setUsage(Usage.Stream); } } @@ -575,9 +572,8 @@ public class Mesh implements Savable, Cloneable { @Deprecated public void setInterleaved(){ ArrayList vbs = new ArrayList(); - for (Entry entry : buffers){ - vbs.add(entry.getValue()); - } + vbs.addAll(buffersList); + // ArrayList vbs = new ArrayList(buffers.values()); // index buffer not included when interleaving vbs.remove(getBuffer(Type.Index)); diff --git a/engine/src/core/com/jme3/shader/UniformBinding.java b/engine/src/core/com/jme3/shader/UniformBinding.java index a30f58d81..6bd4ca939 100644 --- a/engine/src/core/com/jme3/shader/UniformBinding.java +++ b/engine/src/core/com/jme3/shader/UniformBinding.java @@ -73,7 +73,7 @@ public enum UniformBinding { WorldViewProjectionMatrix, /** - * The view projection matrix. Converts Model space to Clip/Projection + * The view projection matrix. Converts World space to Clip/Projection * space. * Type: mat4 */ diff --git a/engine/src/core/com/jme3/util/IntMap.java b/engine/src/core/com/jme3/util/IntMap.java index edf659bab..1b9111980 100644 --- a/engine/src/core/com/jme3/util/IntMap.java +++ b/engine/src/core/com/jme3/util/IntMap.java @@ -44,8 +44,6 @@ import java.util.Map; * @author Nate */ public final class IntMap implements Iterable>, Cloneable { - - private final IntMapIterator iterator = new IntMapIterator(); private Entry[] table; private final float loadFactor; @@ -200,8 +198,9 @@ public final class IntMap implements Iterable>, Cloneable { } public Iterator> iterator() { - iterator.beginUse(); - return iterator; + IntMapIterator it = new IntMapIterator(); + it.beginUse(); + return it; } final class IntMapIterator implements Iterator> { diff --git a/engine/src/core/com/jme3/util/TangentBinormalGenerator.java b/engine/src/core/com/jme3/util/TangentBinormalGenerator.java index 88f68220f..8816b9159 100644 --- a/engine/src/core/com/jme3/util/TangentBinormalGenerator.java +++ b/engine/src/core/com/jme3/util/TangentBinormalGenerator.java @@ -117,7 +117,13 @@ public class TangentBinormalGenerator { } } else { Geometry geom = (Geometry) scene; - generate(geom.getMesh()); + Mesh mesh = geom.getMesh(); + + // Check to ensure mesh has texcoords and normals before generating + if (mesh.getBuffer(Type.TexCoord) != null + && mesh.getBuffer(Type.Normal) != null){ + generate(geom.getMesh()); + } } } @@ -640,7 +646,7 @@ public class TangentBinormalGenerator { lineMesh.setBuffer(Type.Color, 4, lineColor); lineMesh.setStatic(); - lineMesh.setInterleaved(); + //lineMesh.setInterleaved(); return lineMesh; } @@ -733,7 +739,7 @@ public class TangentBinormalGenerator { lineMesh.setBuffer(Type.Color, 4, lineColor); lineMesh.setStatic(); - lineMesh.setInterleaved(); + //lineMesh.setInterleaved(); return lineMesh; } } diff --git a/engine/src/desktop/com/jme3/texture/plugins/AWTLoader.java b/engine/src/desktop/com/jme3/texture/plugins/AWTLoader.java index 3f471f70b..9513bcf56 100644 --- a/engine/src/desktop/com/jme3/texture/plugins/AWTLoader.java +++ b/engine/src/desktop/com/jme3/texture/plugins/AWTLoader.java @@ -33,6 +33,7 @@ package com.jme3.texture.plugins; import com.jme3.asset.AssetInfo; +import com.jme3.asset.AssetLoadException; import com.jme3.asset.AssetLoader; import com.jme3.asset.TextureKey; import com.jme3.texture.Image; @@ -185,27 +186,30 @@ public class AWTLoader implements AssetLoader { public Image load(InputStream in, boolean flipY) throws IOException{ ImageIO.setUseCache(false); BufferedImage img = ImageIO.read(in); - if (img == null) + if (img == null){ return null; - + } return load(img, flipY); } public Object load(AssetInfo info) throws IOException { - if (ImageIO.getImageWritersBySuffix(info.getKey().getExtension()) != null){ - + if (ImageIO.getImageReadersBySuffix(info.getKey().getExtension()) != null){ boolean flip = ((TextureKey) info.getKey()).isFlipY(); InputStream in = null; try { in = info.openStream(); Image img = load(in, flip); + if (img == null){ + throw new AssetLoadException("The given image cannot be loaded " + info.getKey()); + } return img; } finally { if (in != null){ in.close(); } } + }else{ + throw new AssetLoadException("The extension " + info.getKey().getExtension() + " is not supported"); } - return null; } } diff --git a/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java b/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java index e7f4b10c0..fc8cc6b83 100644 --- a/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java +++ b/engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java @@ -712,9 +712,8 @@ public class MeshLoader extends DefaultHandler implements AssetLoader { } else if (qName.equals("geometry") || qName.equals("sharedgeometry")) { // finish writing to buffers - IntMap bufs = mesh.getBuffers(); - for (Entry entry : bufs) { - Buffer data = entry.getValue().getData(); + for (VertexBuffer buf : mesh.getBufferList().getArray()) { + Buffer data = buf.getData(); if (data.position() != 0) { data.flip(); } diff --git a/engine/src/tools/jme3tools/converters/model/ModelConverter.java b/engine/src/tools/jme3tools/converters/model/ModelConverter.java index 2539574ef..6383d4366 100644 --- a/engine/src/tools/jme3tools/converters/model/ModelConverter.java +++ b/engine/src/tools/jme3tools/converters/model/ModelConverter.java @@ -69,7 +69,7 @@ public class ModelConverter { ts.setListsOnly(listOnly); ts.setMinStripSize(minStripSize); - IndexBuffer ib = mesh.getIndexBuffer(); + IndexBuffer ib = mesh.getIndicesAsList(); int[] indices = new int[ib.size()]; for (int i = 0; i < indices.length; i++) indices[i] = ib.get(i); @@ -157,7 +157,7 @@ public class ModelConverter { mesh.setBuffer(vb); } } - mesh.setInterleaved(); + //mesh.setInterleaved(); } private static void optimizeScene(Spatial source, boolean toFixed){ diff --git a/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java b/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java index 34c3dc83d..121d75c91 100644 --- a/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java +++ b/engine/src/tools/jme3tools/optimize/GeometryBatchFactory.java @@ -130,9 +130,9 @@ public class GeometryBatchFactory { throw new UnsupportedOperationException(); } - for (Entry entry : geom.getMesh().getBuffers()) { - compsForBuf[entry.getKey()] = entry.getValue().getNumComponents(); - formatForBuf[entry.getKey()] = entry.getValue().getFormat(); + for (VertexBuffer vb : geom.getMesh().getBufferList().getArray()){ + compsForBuf[vb.getBufferType().ordinal()] = vb.getNumComponents(); + formatForBuf[vb.getBufferType().ordinal()] = vb.getFormat(); } if (mode != null && mode != listMode) { @@ -209,7 +209,7 @@ public class GeometryBatchFactory { FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly(); FloatBuffer outPos = (FloatBuffer) outBuf.getData(); doTransformNorms(inPos, globalVertIndex, outPos, worldMatrix); - }else if(Type.Tangent.ordinal() == bufType){ + }else if(Type.Tangent.ordinal() == bufType){ FloatBuffer inPos = (FloatBuffer) inBuf.getDataReadOnly(); FloatBuffer outPos = (FloatBuffer) outBuf.getData(); int components = inBuf.getNumComponents();