Fixed MikktSpaceTangentGenerator that was not replacing existing Tangent buffers on the mesh. That could cause crashes when the old tangent buffer did not have the same amount of components

This commit is contained in:
Nehon 2016-12-30 10:08:21 +01:00
parent 8d818a21bc
commit bf2369a50a
2 changed files with 5 additions and 8 deletions
jme3-core/src/main/java/com/jme3/util/mikktspace

@ -21,13 +21,10 @@ public class MikkTSpaceImpl implements MikkTSpaceContext {
public MikkTSpaceImpl(Mesh mesh) {
this.mesh = mesh;
VertexBuffer tangentBuffer = mesh.getBuffer(VertexBuffer.Type.Tangent);
if(tangentBuffer == null){
FloatBuffer fb = BufferUtils.createFloatBuffer(mesh.getVertexCount() * 4);
mesh.setBuffer(VertexBuffer.Type.Tangent, 4, fb);
}
//TODO ensure the Tangent buffer exists, else create one.
//replacing any existing tangent buffer, if you came here you want them new.
mesh.clearBuffer(VertexBuffer.Type.Tangent);
FloatBuffer fb = BufferUtils.createFloatBuffer(mesh.getVertexCount() * 4);
mesh.setBuffer(VertexBuffer.Type.Tangent, 4, fb);
}
@Override

@ -512,7 +512,7 @@ public class MikktspaceTangentGenerator {
}
}
//TODO Nehon : Not used...seemsit's used in the original version if the structure to store the data in the regular method failed...
//TODO Nehon : Not used...seems it's used in the original version if the structure to store the data in the regular method failed...
static void generateSharedVerticesIndexListSlow(int piTriList_in_and_out[], final MikkTSpaceContext mikkTSpace, final int iNrTrianglesIn) {
int iNumUniqueVerts = 0;
for (int t = 0; t < iNrTrianglesIn; t++) {