Browse Source

Fixed editor doing always a fullupdate on attributes (caused a crash as ListView was destroyed while it was sending the selection event.)
Fixed LOD mode in AssetImporter not saving vertex & index buffers.

Lasse Öörni 12 years ago
parent
commit
8aee95c85b

+ 3 - 0
Bin/Data/Scripts/Editor/AttributeEditor.as

@@ -349,6 +349,9 @@ uint GetAttributeEditorCount(Array<Serializable@>@ serializables)
             AttributeInfo info = serializables[0].attributeInfos[i];
             AttributeInfo info = serializables[0].attributeInfos[i];
             if (!showNonEditableAttribute && info.mode & AM_NOEDIT != 0)
             if (!showNonEditableAttribute && info.mode & AM_NOEDIT != 0)
                 continue;
                 continue;
+            // "Is Enabled" is not inserted into the main attribute list, so do not count
+            if (info.name == "Is Enabled")
+                continue;
             if (info.type == VAR_RESOURCEREFLIST)
             if (info.type == VAR_RESOURCEREFLIST)
                 count += serializables[0].attributes[i].GetResourceRefList().length;
                 count += serializables[0].attributes[i].GetResourceRefList().length;
             else if (info.type == VAR_VARIANTVECTOR && GetVectorStruct(serializables, i) !is null)
             else if (info.type == VAR_VARIANTVECTOR && GetVectorStruct(serializables, i) !is null)

+ 2 - 2
Engine/UI/ListView.cpp

@@ -678,8 +678,8 @@ void ListView::SetHierarchyMode(bool enable)
 
 
 void ListView::SetBaseIndent(int baseIndent)
 void ListView::SetBaseIndent(int baseIndent)
 {
 {
-	baseIndent_ = baseIndent;
-	UpdateLayout();
+    baseIndent_ = baseIndent;
+    UpdateLayout();
 }
 }
 
 
 void ListView::SetClearSelectionOnDefocus(bool enable)
 void ListView::SetClearSelectionOnDefocus(bool enable)

+ 18 - 0
Tools/AssetImporter/AssetImporter.cpp

@@ -1306,6 +1306,10 @@ void CombineLods(const PODVector<float>& lodDistances, const Vector<String>& mod
             ErrorExit(modelNames[i] + " has different per-geometry bone mappings than " + modelNames[0]);
             ErrorExit(modelNames[i] + " has different per-geometry bone mappings than " + modelNames[0]);
     }
     }
     
     
+    Vector<SharedPtr<VertexBuffer> > vbVector;
+    Vector<SharedPtr<IndexBuffer> > ibVector;
+    PODVector<unsigned> emptyMorphRange;
+    
     // Create the final model
     // Create the final model
     SharedPtr<Model> outModel(new Model(context_));
     SharedPtr<Model> outModel(new Model(context_));
     outModel->SetNumGeometries(srcModels[0]->GetNumGeometries());
     outModel->SetNumGeometries(srcModels[0]->GetNumGeometries());
@@ -1317,8 +1321,22 @@ void CombineLods(const PODVector<float>& lodDistances, const Vector<String>& mod
             Geometry* geom = srcModels[j]->GetGeometry(i, 0);
             Geometry* geom = srcModels[j]->GetGeometry(i, 0);
             geom->SetLodDistance(lodDistances[j]);
             geom->SetLodDistance(lodDistances[j]);
             outModel->SetGeometry(i, j, geom);
             outModel->SetGeometry(i, j, geom);
+            
+            for (unsigned k = 0; k < geom->GetNumVertexBuffers(); ++k)
+            {
+                SharedPtr<VertexBuffer> vb(geom->GetVertexBuffer(k));
+                if (!vbVector.Contains(vb))
+                    vbVector.Push(vb);
+            }
+            
+            SharedPtr<IndexBuffer> ib(geom->GetIndexBuffer());
+            if (!ibVector.Contains(ib))
+                ibVector.Push(ib);
         }
         }
     }
     }
+    
+    outModel->SetVertexBuffers(vbVector, emptyMorphRange, emptyMorphRange);
+    outModel->SetIndexBuffers(ibVector);
     outModel->SetSkeleton(srcModels[0]->GetSkeleton());
     outModel->SetSkeleton(srcModels[0]->GetSkeleton());
     outModel->SetGeometryBoneMappings(srcModels[0]->GetGeometryBoneMappings());
     outModel->SetGeometryBoneMappings(srcModels[0]->GetGeometryBoneMappings());
     outModel->SetBoundingBox(srcModels[0]->GetBoundingBox());
     outModel->SetBoundingBox(srcModels[0]->GetBoundingBox());