Mesh.getTriangle not working with UnsignedInt index buffer + patch

I stumbled over the issue that i cant get a triangle from a mesh if the meshs index buffer is of type UnsignedInt and not UnsignedShort.



So i changed it to use IndexBuffer instead in

getTriangle(int index, Vector3f v1, Vector3f v2, Vector3f v3) and

getTriangle(int index, int[] indices)



[patch]Index: src/core/com/jme3/scene/Mesh.java

===================================================================

— src/core/com/jme3/scene/Mesh.java (revision 7250)

+++ src/core/com/jme3/scene/Mesh.java (working copy)

@@ -442,25 +442,20 @@



public void getTriangle(int index, Vector3f v1, Vector3f v2, Vector3f v3){

VertexBuffer pb = getBuffer(Type.Position);

  •    VertexBuffer ib = getBuffer(Type.Index);<br />
    

-

+

if (pb.getFormat() == Format.Float){

FloatBuffer fpb = (FloatBuffer) pb.getData();

  •        IndexBuffer ib = getIndexBuffer();<br />
    

- if (ib.getFormat() == Format.UnsignedShort){
- // accepted format for buffers
- ShortBuffer sib = (ShortBuffer) ib.getData();
-
- // aquire triangle's vertex indices
- int vertIndex = index * 3;
- int vert1 = sib.get(vertIndex);
- int vert2 = sib.get(vertIndex+1);
- int vert3 = sib.get(vertIndex+2);
+ // aquire triangle's vertex indices
+ int vertIndex = index * 3;
+ int vert1 = ib.get(vertIndex);
+ int vert2 = ib.get(vertIndex+1);
+ int vert3 = ib.get(vertIndex+2);

- BufferUtils.populateFromBuffer(v1, fpb, vert1);
- BufferUtils.populateFromBuffer(v2, fpb, vert2);
- BufferUtils.populateFromBuffer(v3, fpb, vert3);
- }
+ BufferUtils.populateFromBuffer(v1, fpb, vert1);
+ BufferUtils.populateFromBuffer(v2, fpb, vert2);
+ BufferUtils.populateFromBuffer(v3, fpb, vert3);
}
}

@@ -470,17 +465,12 @@
}

public void getTriangle(int index, int[] indices){
- VertexBuffer ib = getBuffer(Type.Index);
- if (ib.getFormat() == Format.UnsignedShort){
- // accepted format for buffers
- ShortBuffer sib = (ShortBuffer) ib.getData();
-
- // acquire triangle's vertex indices
- int vertIndex = index * 3;
- indices[0] = sib.get(vertIndex);
- indices[1] = sib.get(vertIndex+1);
- indices[2] = sib.get(vertIndex+2);
- }
+ IndexBuffer ib = getIndexBuffer();
+ // acquire triangle's vertex indices
+ int vertIndex = index * 3;
+ indices[0] = ib.get(vertIndex);
+ indices[1] = ib.get(vertIndex+1);
+ indices[2] = ib.get(vertIndex+2);
}

public int getId(){
[/patch]