瀏覽代碼

Remove code duplication from render stats gathering.

Lasse Öörni 10 年之前
父節點
當前提交
bd3efa69c1
共有 2 個文件被更改,包括 16 次插入14 次删除
  1. 13 14
      Source/Urho3D/Graphics/Renderer.cpp
  2. 3 0
      Source/Urho3D/Graphics/Renderer.h

+ 13 - 14
Source/Urho3D/Graphics/Renderer.cpp

@@ -495,12 +495,10 @@ unsigned Renderer::GetNumGeometries(bool allViews) const
 
     for (unsigned i = 0; i < lastView; ++i)
     {
-        View* view = views_[i];
+        // Use the source view's statistics if applicable
+        View* view = GetActualView(views_[i]);
         if (!view)
             continue;
-        // Use the source view's statistics if applicable
-        if (view->GetSourceView())
-            view = view->GetSourceView();
 
         numGeometries += view->GetGeometries().Size();
     }
@@ -515,11 +513,9 @@ unsigned Renderer::GetNumLights(bool allViews) const
 
     for (unsigned i = 0; i < lastView; ++i)
     {
-        View* view = views_[i];
+        View* view = GetActualView(views_[i]);
         if (!view)
             continue;
-        if (view->GetSourceView())
-            view = view->GetSourceView();
 
         numLights += view->GetLights().Size();
     }
@@ -534,14 +530,11 @@ unsigned Renderer::GetNumShadowMaps(bool allViews) const
 
     for (unsigned i = 0; i < lastView; ++i)
     {
-        View* view = views_[i];
+        View* view = GetActualView(views_[i]);
         if (!view)
             continue;
-        if (view->GetSourceView())
-            view = view->GetSourceView();
 
         const Vector<LightBatchQueue>& lightQueues = view->GetLightQueues();
-
         for (Vector<LightBatchQueue>::ConstIterator i = lightQueues.Begin(); i != lightQueues.End(); ++i)
         {
             if (i->shadowMap_)
@@ -559,11 +552,9 @@ unsigned Renderer::GetNumOccluders(bool allViews) const
 
     for (unsigned i = 0; i < lastView; ++i)
     {
-        View* view = views_[i];
+        View* view = GetActualView(views_[i]);
         if (!view)
             continue;
-        if (view->GetSourceView())
-            view = view->GetSourceView();
 
         numOccluders += view->GetOccluders().Size();
     }
@@ -1094,6 +1085,14 @@ View* Renderer::GetPreparedView(Camera* camera)
     return i != preparedViews_.End() ? i->second_ : (View*)0;
 }
 
+View* Renderer::GetActualView(View* view)
+{
+    if (view && view->GetSourceView())
+        return view->GetSourceView();
+    else
+        return view;
+}
+
 void Renderer::SetBatchShaders(Batch& batch, Technique* tech, bool allowShadows)
 {
     // Check if shaders are unloaded or need reloading

+ 3 - 0
Source/Urho3D/Graphics/Renderer.h

@@ -364,6 +364,9 @@ public:
     /// Return a scissor rectangle for a light.
     const Rect& GetLightScissor(Light* light, Camera* camera);
 
+    /// Return a view or its source view if it uses one. Used internally for render statistics.
+    static View* GetActualView(View* view);
+
 private:
     /// Initialize when screen mode initially set.
     void Initialize();