소스 검색

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

Nehon 8 년 전
부모
커밋
bf2369a50a

+ 4 - 7
jme3-core/src/main/java/com/jme3/util/mikktspace/MikkTSpaceImpl.java

@@ -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

+ 1 - 1
jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java

@@ -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++) {