OSDN Git Service

* Prevent crash in Animation if no tracks are set on animation
authorshadowislord <shadowislord@75d07b2b-3a1a-0410-a2c5-0572b91ccdca>
Sun, 23 Oct 2011 21:03:39 +0000 (21:03 +0000)
committershadowislord <shadowislord@75d07b2b-3a1a-0410-a2c5-0572b91ccdca>
Sun, 23 Oct 2011 21:03:39 +0000 (21:03 +0000)
 * Ogre3D .material files will still load even if a single texture is not found
 * Show any exceptions that occur in material loading (if any are thrown)

git-svn-id: http://jmonkeyengine.googlecode.com/svn/trunk@8519 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

engine/src/core/com/jme3/animation/Animation.java
engine/src/ogre/com/jme3/scene/plugins/ogre/MaterialLoader.java
engine/src/ogre/com/jme3/scene/plugins/ogre/MeshLoader.java

index 330a5c8..ef1af12 100644 (file)
@@ -106,6 +106,9 @@ public class Animation implements Savable, Cloneable {
      * @param channel the animation channel
      */
     void setTime(float time, float blendAmount, AnimControl control, AnimChannel channel, TempVars vars) {
+        if (tracks == null)
+            return;
+        
         for (int i = 0; i < tracks.length; i++){
             tracks[i].setTime(time, blendAmount, control, channel, vars);
         }
index dbeaa2d..4b4f115 100644 (file)
@@ -36,6 +36,7 @@ import com.jme3.asset.AssetInfo;
 import com.jme3.asset.AssetKey;
 import com.jme3.asset.AssetLoader;
 import com.jme3.asset.AssetManager;
+import com.jme3.asset.AssetNotFoundException;
 import com.jme3.asset.TextureKey;
 import com.jme3.material.Material;
 import com.jme3.material.MaterialList;
@@ -140,7 +141,13 @@ public class MaterialLoader implements AssetLoader {
         key.setGenerateMips(genMips);
         key.setAsCube(cubic);
 
-        Texture loadedTexture = assetManager.loadTexture(key);
+        Texture loadedTexture;
+        try {
+            loadedTexture = assetManager.loadTexture(key);
+        } catch (AssetNotFoundException ex){
+            logger.log(Level.WARNING, "Failed to load texture " + key + " for material " + matName, ex);
+            loadedTexture = null;
+        }
         if (loadedTexture == null){
             ByteBuffer tempData = BufferUtils.createByteBuffer(3);
             tempData.put((byte)0xFF).put((byte)0x00).put((byte)0x00);
index 812858f..db5eba1 100644 (file)
@@ -785,12 +785,14 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
                             materialList = (MaterialList) assetManager.loadAsset(new OgreMaterialKey(folderName + materialName + ".material"));
                         } catch (AssetNotFoundException e) {
                             logger.log(Level.WARNING, "Cannot locate {0}{1}.material for model {2}{3}.{4}", new Object[]{folderName, materialName, folderName, meshName, ext});
+                            logger.log(Level.WARNING, "", e);
                         }
                     } else {
                         try {
                             materialList = (MaterialList) assetManager.loadAsset(new OgreMaterialKey(folderName + meshName + ".material"));
                         } catch (AssetNotFoundException e) {
                             logger.log(Level.WARNING, "Cannot locate {0}{1}.material for model {2}{3}.{4}", new Object[]{folderName, meshName, folderName, meshName, ext});
+                            logger.log(Level.WARNING, "", e);
                         }
                     }
                 }
@@ -799,7 +801,8 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
                     materialList = (MaterialList) assetManager.loadAsset(new OgreMaterialKey(folderName + meshName + ".material"));
                 } catch (AssetNotFoundException e) {
                     logger.log(Level.WARNING, "Cannot locate {0}{1}.material for model {2}{3}.{4}", new Object[]{folderName, meshName, folderName, meshName, ext});
-                }
+                                       logger.log(Level.WARNING, "", e);
+                               }
 
             }