diff --git a/engine/src/blender/com/jme3/scene/plugins/blender/curves/CurvesHelper.java b/engine/src/blender/com/jme3/scene/plugins/blender/curves/CurvesHelper.java index 9de0b7d8b..6d3f5901f 100644 --- a/engine/src/blender/com/jme3/scene/plugins/blender/curves/CurvesHelper.java +++ b/engine/src/blender/com/jme3/scene/plugins/blender/curves/CurvesHelper.java @@ -32,6 +32,8 @@ package com.jme3.scene.plugins.blender.curves; import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.ShortBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -52,6 +54,7 @@ import com.jme3.math.Vector4f; import com.jme3.scene.Geometry; import com.jme3.scene.Mesh; import com.jme3.scene.VertexBuffer.Type; +import com.jme3.scene.mesh.IndexBuffer; import com.jme3.scene.plugins.blender.AbstractBlenderHelper; import com.jme3.scene.plugins.blender.BlenderContext; import com.jme3.scene.plugins.blender.exceptions.BlenderFileException; @@ -535,10 +538,10 @@ public class CurvesHelper extends AbstractBlenderHelper { for (int i = 0; i < vertexBuffers.length; ++i) { Mesh mesh = new Mesh(); mesh.setBuffer(Type.Position, 3, vertexBuffers[i]); - if(indexBuffers[i].getIntBuffer() != null) { - mesh.setBuffer(Type.Index, 3, indexBuffers[i].getIntBuffer()); + if(indexBuffers[i].getBuffer() instanceof IntBuffer) { + mesh.setBuffer(Type.Index, 3, (IntBuffer)indexBuffers[i].getBuffer()); } else { - mesh.setBuffer(Type.Index, 3, indexBuffers[i].getShortBuffer()); + mesh.setBuffer(Type.Index, 3, (ShortBuffer)indexBuffers[i].getBuffer()); } mesh.setBuffer(Type.Normal, 3, normalBuffers[i]); Geometry g = new Geometry("g" + i, mesh); @@ -583,7 +586,7 @@ public class CurvesHelper extends AbstractBlenderHelper { Map normalMap = new TreeMap(); Vector3f[] allVerts = BufferUtils.getVector3Array(points); - for (int i = 0; i < indexes.limit(); i += 3) { + for (int i = 0; i < indexes.size(); i += 3) { int index1 = indexes.get(i); int index2 = indexes.get(i + 1); int index3 = indexes.get(i + 2); @@ -620,19 +623,20 @@ public class CurvesHelper extends AbstractBlenderHelper { * @return index buffer for the mesh */ private IndexBuffer generateIndexes(int bevelShapeVertexCount, int bevelRepeats, boolean smooth) { + int putIndex = 0; if(smooth) { int indexBufferSize = (bevelRepeats - 1) * (bevelShapeVertexCount - 1) * 6; - IndexBuffer result = new IndexBuffer(indexBufferSize); + IndexBuffer result = IndexBuffer.createIndexBuffer(indexBufferSize, indexBufferSize); for (int i = 0; i < bevelRepeats - 1; ++i) { for (int j = 0; j < bevelShapeVertexCount - 1; ++j) { - result.put(i * bevelShapeVertexCount + j); - result.put(i * bevelShapeVertexCount + j + 1); - result.put((i + 1) * bevelShapeVertexCount + j); + result.put(putIndex++, i * bevelShapeVertexCount + j); + result.put(putIndex++, i * bevelShapeVertexCount + j + 1); + result.put(putIndex++, (i + 1) * bevelShapeVertexCount + j); - result.put(i * bevelShapeVertexCount + j + 1); - result.put((i + 1) * bevelShapeVertexCount + j + 1); - result.put((i + 1) * bevelShapeVertexCount + j); + result.put(putIndex++, i * bevelShapeVertexCount + j + 1); + result.put(putIndex++, (i + 1) * bevelShapeVertexCount + j + 1); + result.put(putIndex++, (i + 1) * bevelShapeVertexCount + j); } } return result; @@ -642,9 +646,9 @@ public class CurvesHelper extends AbstractBlenderHelper { //so the amount of triangles is: bevelShapeVertexCount * 2 * (bevelRepeats - 1) //and this gives the amount of vertices in non smooth shape as below ... int indexBufferSize = bevelShapeVertexCount * bevelRepeats * 6;//6 = 2 * 3 where 2 is stated above and 3 is the count of vertices for each triangle - IndexBuffer result = new IndexBuffer(indexBufferSize); + IndexBuffer result = IndexBuffer.createIndexBuffer(indexBufferSize, indexBufferSize); for (int i = 0; i < indexBufferSize; ++i) { - result.put(i); + result.put(putIndex++, i); } return result; } diff --git a/engine/src/blender/com/jme3/scene/plugins/blender/curves/IndexBuffer.java b/engine/src/blender/com/jme3/scene/plugins/blender/curves/IndexBuffer.java deleted file mode 100644 index 84ac99ac1..000000000 --- a/engine/src/blender/com/jme3/scene/plugins/blender/curves/IndexBuffer.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.jme3.scene.plugins.blender.curves; - -import java.nio.IntBuffer; -import java.nio.ShortBuffer; - -import com.jme3.util.BufferUtils; - -/** - * A simple helping class to create index buffer. Depending on the size of the - * buffer either ShorBuffer or IntBuffer is used to save memory. - * - * @author Marcin Roguski (Kaelthas) - */ -/* package */class IndexBuffer { - /** The buffer used for larger objects. */ - private IntBuffer intBuffer; - /** The buffer used for smaller objects. */ - private ShortBuffer shortBuffer; - - /** - * Creates the buffer depending on the given size. - * - * @param bufferSize - * the size of the buffer - */ - public IndexBuffer(int bufferSize) { - if (bufferSize < Short.MAX_VALUE) { - shortBuffer = BufferUtils.createShortBuffer(bufferSize); - } else { - intBuffer = BufferUtils.createIntBuffer(bufferSize); - } - } - - /** - * Puts a value to the created buffer. - * - * @param value - * the value to be put to the buffer - */ - public void put(int value) { - if (intBuffer != null) { - intBuffer.put(value); - } else { - shortBuffer.put((short) value); - } - } - - /** - * Returns the value on the given index. Take in mind that onlye int - * is returned, no matter if short or int buffer is used. - * - * @param index - * the index of the value - * @return the value from the buffer - */ - public int get(int index) { - if (intBuffer != null) { - return intBuffer.get(index); - } - return shortBuffer.get(index); - } - - /** - * @return the limit of the buffer - */ - public int limit() { - if (intBuffer != null) { - return intBuffer.limit(); - } - return shortBuffer.limit(); - } - - /** - * @return integer buffer - */ - public IntBuffer getIntBuffer() { - return intBuffer; - } - - /** - * @return short buffer - */ - public ShortBuffer getShortBuffer() { - return shortBuffer; - } -}