Browse Source

Merge pull request #2338 from jMonkeyEngine/yaRnMcDonuts-patch-1

Fix NullPointer in MikktspaceTangentGenerator
Ryan McDonough 8 months ago
parent
commit
f90188e64a

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

@@ -34,6 +34,7 @@ package com.jme3.util.mikktspace;
 import com.jme3.math.FastMath;
 import com.jme3.math.Vector3f;
 import com.jme3.scene.*;
+import com.jme3.scene.VertexBuffer.Type;
 import com.jme3.util.*;
 
 import java.util.ArrayList;
@@ -129,12 +130,19 @@ public class MikktspaceTangentGenerator {
     private static boolean generateTangents(Mesh mesh) {
         Mesh.Mode mode = mesh.getMode();
         boolean hasTriangles;
+        
+        if (mesh.getBuffer(Type.TexCoord) == null || mesh.getBuffer(Type.Normal) == null) {
+            logger.log(Level.SEVERE, "Tangent generation requires both a normal and texCoord buffer");
+            return false;
+        }    
+        
         switch (mode) {
             case Points:
             case Lines:
             case LineStrip:
             case LineLoop:
                 hasTriangles = false; // skip this mesh
+                logger.log(Level.SEVERE, "Tangent generation requires a mesh with Triangles", mode);
                 break;
 
             case Triangles:
@@ -148,12 +156,12 @@ public class MikktspaceTangentGenerator {
                 logger.log(Level.SEVERE, "Tangent generation isn't implemented for mode={0}", mode);
                 return false;
         }
-
+        
         if (hasTriangles) {
             MikkTSpaceImpl context = new MikkTSpaceImpl(mesh);
-            boolean result = genTangSpaceDefault(context);
+            boolean results = genTangSpaceDefault(context);
             TangentUtils.generateBindPoseTangentsIfNecessary(mesh);
-            return result;
+            return results;
         }
         return false;
     }