Revision: 41000
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41000
Author:   campbellbarton
Date:     2011-10-14 02:31:04 +0000 (Fri, 14 Oct 2011)
Log Message:
-----------
fix [#28909] OpenCollada export / import sintel lite v2.1 crashes on import.

Modified Paths:
--------------
    trunk/blender/source/blender/collada/AnimationImporter.cpp
    trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py
    trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp

Modified: trunk/blender/source/blender/collada/AnimationImporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/AnimationImporter.cpp  2011-10-14 
02:30:58 UTC (rev 40999)
+++ trunk/blender/source/blender/collada/AnimationImporter.cpp  2011-10-14 
02:31:04 UTC (rev 41000)
@@ -962,30 +962,32 @@
                        for (unsigned int j = 0; j < matBinds.getCount(); j++) {
                                const COLLADAFW::UniqueId & matuid = 
matBinds[j].getReferencedMaterial();
                                const COLLADAFW::Effect *ef = 
(COLLADAFW::Effect *) (FW_object_map[matuid]);
-                               const COLLADAFW::CommonEffectPointerArray& 
commonEffects  =  ef->getCommonEffects();
-                               COLLADAFW::EffectCommon *efc = commonEffects[0];
-                               if((animType->material & MATERIAL_SHININESS) != 
0){
-                                       const COLLADAFW::FloatOrParam *shin = 
&(efc->getShininess());
-                                       const COLLADAFW::UniqueId& listid =  
shin->getAnimationList();
-                                       Assign_float_animations( listid, 
AnimCurves , "specular_hardness" );
-                               }
+                               if (ef != NULL) { /* can be NULL [#28909] */
+                                       const 
COLLADAFW::CommonEffectPointerArray& commonEffects  =  ef->getCommonEffects();
+                                       COLLADAFW::EffectCommon *efc = 
commonEffects[0];
+                                       if((animType->material & 
MATERIAL_SHININESS) != 0){
+                                               const COLLADAFW::FloatOrParam 
*shin = &(efc->getShininess());
+                                               const COLLADAFW::UniqueId& 
listid =  shin->getAnimationList();
+                                               Assign_float_animations( 
listid, AnimCurves , "specular_hardness" );
+                                       }
 
-                               if((animType->material & MATERIAL_IOR) != 0){
-                                       const COLLADAFW::FloatOrParam *ior = 
&(efc->getIndexOfRefraction());
-                                       const COLLADAFW::UniqueId& listid =  
ior->getAnimationList();
-                                       Assign_float_animations( listid, 
AnimCurves , "raytrace_transparency.ior" );
-                               }
+                                       if((animType->material & MATERIAL_IOR) 
!= 0){
+                                               const COLLADAFW::FloatOrParam 
*ior = &(efc->getIndexOfRefraction());
+                                               const COLLADAFW::UniqueId& 
listid =  ior->getAnimationList();
+                                               Assign_float_animations( 
listid, AnimCurves , "raytrace_transparency.ior" );
+                                       }
 
-                               if((animType->material & MATERIAL_SPEC_COLOR) 
!= 0){
-                                       const COLLADAFW::ColorOrTexture *cot = 
&(efc->getSpecular());
-                                       const COLLADAFW::UniqueId& listid =  
cot->getColor().getAnimationList();
-                                       Assign_color_animations( listid, 
AnimCurves , "specular_color" );
-                               }
+                                       if((animType->material & 
MATERIAL_SPEC_COLOR) != 0){
+                                               const COLLADAFW::ColorOrTexture 
*cot = &(efc->getSpecular());
+                                               const COLLADAFW::UniqueId& 
listid =  cot->getColor().getAnimationList();
+                                               Assign_color_animations( 
listid, AnimCurves , "specular_color" );
+                                       }
 
-                               if((animType->material & MATERIAL_DIFF_COLOR) 
!= 0){
-                                       const COLLADAFW::ColorOrTexture *cot = 
&(efc->getDiffuse());
-                                       const COLLADAFW::UniqueId& listid =  
cot->getColor().getAnimationList();
-                                       Assign_color_animations( listid, 
AnimCurves , "diffuse_color" );
+                                       if((animType->material & 
MATERIAL_DIFF_COLOR) != 0){
+                                               const COLLADAFW::ColorOrTexture 
*cot = &(efc->getDiffuse());
+                                               const COLLADAFW::UniqueId& 
listid =  cot->getColor().getAnimationList();
+                                               Assign_color_animations( 
listid, AnimCurves , "diffuse_color" );
+                                       }
                                }
                        }
                }       
@@ -1051,14 +1053,16 @@
                for (unsigned int j = 0; j < matBinds.getCount(); j++) {
                        const COLLADAFW::UniqueId & matuid = 
matBinds[j].getReferencedMaterial();
                        const COLLADAFW::Effect *ef = (COLLADAFW::Effect *) 
(FW_object_map[matuid]);
-                       const COLLADAFW::CommonEffectPointerArray& 
commonEffects  =  ef->getCommonEffects();
-                       if(!commonEffects.empty()) {
-                               COLLADAFW::EffectCommon *efc = commonEffects[0];
-                               types->material =  
setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS);
-                               types->material =  
setAnimType(&(efc->getSpecular().getColor()),(types->material), 
MATERIAL_SPEC_COLOR);
-                               types->material =  
setAnimType(&(efc->getDiffuse().getColor()),(types->material), 
MATERIAL_DIFF_COLOR);
-                               // types->material =  
setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY);
-                               types->material =  
setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR);
+                       if (ef != NULL) { /* can be NULL [#28909] */
+                               const COLLADAFW::CommonEffectPointerArray& 
commonEffects = ef->getCommonEffects();
+                               if(!commonEffects.empty()) {
+                                       COLLADAFW::EffectCommon *efc = 
commonEffects[0];
+                                       types->material =  
setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS);
+                                       types->material =  
setAnimType(&(efc->getSpecular().getColor()),(types->material), 
MATERIAL_SPEC_COLOR);
+                                       types->material =  
setAnimType(&(efc->getDiffuse().getColor()),(types->material), 
MATERIAL_DIFF_COLOR);
+                                       // types->material =  
setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY);
+                                       types->material =  
setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR);
+                               }
                        }
                }
        }
@@ -1067,10 +1071,10 @@
 
 int AnimationImporter::setAnimType ( const COLLADAFW::Animatable * prop , int 
types, int addition)
 {
-               const COLLADAFW::UniqueId& listid =  prop->getAnimationList();
-               if (animlist_map.find(listid) != animlist_map.end()) 
-                               return types|addition;
-               else return types;
+       const COLLADAFW::UniqueId& listid =  prop->getAnimationList();
+       if (animlist_map.find(listid) != animlist_map.end())
+               return types|addition;
+       else return types;
 }              
 
 // Is not used anymore.

Modified: trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py
===================================================================
--- trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py    
2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner.py    
2011-10-14 02:31:04 UTC (rev 41000)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python3.1
+#! /usr/bin/env python3
 
 """
 This script is used to help cleaning RNA api.

Modified: trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py
===================================================================
--- trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py      
2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py      
2011-10-14 02:31:04 UTC (rev 41000)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python3.1
+#! /usr/bin/env python3
 
 import sys
 

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2011-10-14 02:30:58 UTC (rev 40999)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2011-10-14 02:31:04 UTC (rev 41000)
@@ -1596,7 +1596,7 @@
                                        objprop.m_boundclass = KX_BOUNDPOLYTOPE;
                                        break;
                                }
-                               // Object is not a mesh... fall through 
OB_BOUND_POLYH to 
+                               // Object is not a mesh... fall through 
OB_BOUND_TRIANGLE_MESH to
                                // OB_BOUND_SPHERE
                        case OB_BOUND_TRIANGLE_MESH:
                                if (blenderobject->type == OB_MESH)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to