Ver código fonte

Adding geometry hidden flag optimization

Josh Engebretson 10 anos atrás
pai
commit
b8bb2c5777

+ 3 - 2
Script/AtomicEditor/ui/frames/inspector/AttributeInfoEdit.ts

@@ -823,6 +823,7 @@ class ResourceRefListAttributeEdit extends AttributeInfoEdit {
         layout.spacing = 2;
         layout.layoutSize = Atomic.UI_LAYOUT_SIZE_AVAILABLE;
         layout.gravity = Atomic.UI_GRAVITY_LEFT_RIGHT;
+        layout.layoutPosition = Atomic.UI_LAYOUT_POSITION_LEFT_TOP;
         layout.layoutDistribution = Atomic.UI_LAYOUT_DISTRIBUTION_GRAVITY;
 
         var lp = new Atomic.UILayoutParams();
@@ -830,13 +831,13 @@ class ResourceRefListAttributeEdit extends AttributeInfoEdit {
         layout.layoutParams = lp;
 
         var name = this.attrInfo.name + " Size";
-        if (name == "AnimationResources")
+        if (name == "AnimationResources Size")
             name = "Animations";
 
         var sizeEdit = this.sizeEdit = InspectorUtils.createAttrEditField(name, layout);
 
         var lp = new Atomic.UILayoutParams();
-        lp.width = 198;
+        lp.width = 160;
         sizeEdit.layoutParams = lp;
 
         sizeEdit.subscribeToEvent(sizeEdit, "UIWidgetEditComplete", (ev) => this.handleUIWidgetEditCompleteEvent(ev));

+ 1 - 1
Source/Atomic/Atomic3D/AnimatedModel.cpp

@@ -283,7 +283,7 @@ void AnimatedModel::UpdateBatches(const FrameInfo& frame)
     }
 
     // Handle mesh hiding
-    if (true)//geometryEnabled_.Size() == batches_.Size())
+    if (geometryDisabled_)
     {
         for (unsigned i = 0; i < batches_.Size(); ++i)
         {

+ 25 - 1
Source/Atomic/Atomic3D/StaticModel.cpp

@@ -46,7 +46,8 @@ extern const char* GEOMETRY_CATEGORY;
 StaticModel::StaticModel(Context* context) :
     Drawable(context, DRAWABLE_GEOMETRY),
     occlusionLodLevel_(M_MAX_UNSIGNED),
-    materialsAttr_(Material::GetTypeStatic())
+    materialsAttr_(Material::GetTypeStatic()),
+    geometryDisabled_(false)
 {
 }
 
@@ -494,6 +495,17 @@ void StaticModel::ShowGeometry(const String& name)
         if (name == names[i])
             geometryData_[i].enabled_ = true;
     }
+
+    geometryDisabled_ = false;
+    for (unsigned i = 0; i < geometryData_.Size(); i++)
+    {
+        if (!geometryData_[i].enabled_)
+        {
+            geometryDisabled_ = true;
+            break;
+        }
+    }
+
 }
 
 void StaticModel::HideGeometry(const String& name)
@@ -506,7 +518,10 @@ void StaticModel::HideGeometry(const String& name)
     for (unsigned i = 0; i < names.Size(); i++)
     {
         if (name == names[i])
+        {
+            geometryDisabled_ = true;
             geometryData_[i].enabled_ = false;
+        }
     }
 }
 
@@ -514,6 +529,7 @@ void StaticModel::SetGeometryEnabledAttr(const VariantVector& value)
 {
     if (!value.Size() || value.Size() != geometryData_.Size())
     {
+        geometryDisabled_ = false;
         geometryEnabled_.Clear();
         return;
     }
@@ -525,6 +541,8 @@ void StaticModel::SetGeometryEnabledAttr(const VariantVector& value)
     for (unsigned i = 0; i < geometryData_.Size(); i++)
     {
         geometryData_[i].enabled_ = geometryEnabled_[i].GetBool();
+        if (!geometryData_[i].enabled_)
+            geometryDisabled_ = true;
         if (init)
             geometryData_[i].batchGeometry_ = 0;
     }
@@ -534,9 +552,15 @@ const VariantVector& StaticModel::GetGeometryEnabledAttr() const
 {
     geometryEnabled_.Resize(geometryData_.Size());
 
+    geometryDisabled_ = false;
     for (unsigned i = 0; i < geometryData_.Size(); i++)
+    {
         geometryEnabled_[i] = geometryData_[i].enabled_;
 
+        if (!geometryData_[i].enabled_)
+            geometryDisabled_ = true;
+    }
+
     return geometryEnabled_;
 }
 

+ 5 - 0
Source/Atomic/Atomic3D/StaticModel.h

@@ -108,8 +108,11 @@ public:
 
     // ATOMIC BEGIN
 
+    /// Get whether a named submesh is visible
     bool GetGeometryVisible(const String& name);
+    /// Show a named submesh
     void ShowGeometry(const String& name);
+    /// Hide a named submesh
     void HideGeometry(const String& name);
 
     void SetGeometryEnabledAttr(const VariantVector& value);
@@ -142,6 +145,8 @@ protected:
 
     // ATOMIC BEGIN
     mutable VariantVector geometryEnabled_;
+    /// true if any geometry has been disabled
+    mutable bool geometryDisabled_;
     // ATOMIC END
 
 private: