Exemplo n.º 1
0
        public void UpdateLods(List <MyRenderPass> renderPasses, List <MyInstanceComponent>[] visibleInstances)
        {
            {
                m_tmpActivePassIds.Clear();
                foreach (var pass in renderPasses)
                {
                    m_tmpActivePassIds.Add(pass.PassId);
                }
            }
            MyLodStrategyPreprocessor preprocessor = MyLodStrategyPreprocessor.Perform();
            {
                Vector3D deltaCameraPosition = MyRender11.Environment.Matrices.CameraPosition - m_prevCameraPositionOnUpdateLods;
                m_prevCameraPositionOnUpdateLods = MyRender11.Environment.Matrices.CameraPosition;
                bool isCameraSkipped = deltaCameraPosition.Length() > m_globalLoddingSettings.MaxDistanceForSmoothCameraMovement;

                if (m_globalLoddingSettings.EnableLodSelection)
                {
                    foreach (var pass in renderPasses)
                    {
                        foreach (var instance in visibleInstances[pass.PassId])
                        {
                            instance.UpdateLodExplicit(m_tmpActivePassIds, m_globalLoddingSettings.LodSelection);
                        }
                    }
                }
                else if (isCameraSkipped)
                {
                    foreach (var pass in renderPasses)
                    {
                        foreach (var instance in visibleInstances[pass.PassId])
                        {
                            instance.UpdateLodNoTransition(m_tmpActivePassIds, preprocessor);
                        }
                    }
                }
                else
                {
                    foreach (var pass in renderPasses)
                    {
                        foreach (var instance in visibleInstances[pass.PassId])
                        {
                            instance.UpdateLodSmoothly(m_tmpActivePassIds, preprocessor);
                        }
                    }
                }
            }
        }
 public void UpdateLods(List <MyRenderPass> renderPasses, List <MyInstanceComponent>[] visibleInstances)
 {
     {
         m_tmpActivePassIds.Clear();
         foreach (var pass in renderPasses)
         {
             m_tmpActivePassIds.Add(pass.PassId);
         }
     }
     MyLodStrategyPreprocessor preprocessor = MyLodStrategyPreprocessor.Perform();
     {
         foreach (var pass in renderPasses)
         {
             foreach (var instance in visibleInstances[pass.PassId])
             {
                 instance.UpdateLod(m_tmpActivePassIds, preprocessor);
             }
         }
     }
 }