Exemplo n.º 1
0
        public static void SetSettings(MyGlobalLoddingSettings globalLodding,
                                       MyPassLoddingSetting gbufferLodding,
                                       MyPassLoddingSetting[] cascadeDepthLoddings,
                                       MyPassLoddingSetting singleDepthLodding)
        {
            m_objectDistanceAdd  = globalLodding.ObjectDistanceAdd;
            m_objectDistanceMult = globalLodding.ObjectDistanceMult;

            for (int i = 0; i < MyPassIdResolver.MaxGBufferPassesCount; i++)
            {
                m_loddingSetting[MyPassIdResolver.DefaultGBufferPassId] = gbufferLodding;
            }

            int cascadeDepthPassesCount = Math.Min(cascadeDepthLoddings.Length, MyPassIdResolver.MaxCascadeDepthPassesCount);

            for (int i = 0; i < cascadeDepthPassesCount; i++)
            {
                m_loddingSetting[MyPassIdResolver.GetCascadeDepthPassId(i)] = cascadeDepthLoddings[i];
            }
            for (int i = cascadeDepthPassesCount; i < MyPassIdResolver.MaxCascadeDepthPassesCount; i++)
            {
                m_loddingSetting[MyPassIdResolver.GetCascadeDepthPassId(i)] = MyPassLoddingSetting.Default;
            }

            for (int i = 0; i < MyPassIdResolver.MaxCascadeDepthPassesCount; i++)
            {
                m_loddingSetting[MyPassIdResolver.GetSingleDepthPassId(i)] = singleDepthLodding;
            }
        }
Exemplo n.º 2
0
 void UpdateCachedResults(int maxLod, List <int> activePassIds)
 {
     foreach (var passId in activePassIds)
     {
         MyPassLoddingSetting lodSetting = m_loddingSetting[passId];
         int currentLod = m_currentLod;
         currentLod = Math.Max(lodSetting.MinLod, currentLod + lodSetting.LodShift);
         currentLod = Math.Min(maxLod, currentLod);
         int transitionLod = m_transitionLod;
         transitionLod = Math.Max(lodSetting.MinLod, transitionLod + lodSetting.LodShift);
         transitionLod = Math.Min(maxLod, transitionLod);
         if (passId == 0)
         {
             if (m_transition == 0 || m_explicitState != MyInstanceLodState.Solid)
             {
                 MyLodStrategyCachedResultsUtils.UpdateSingleLod(m_cachedResults, passId,
                                                                 currentLod, m_explicitState, m_explicitStateData);
             }
             else
             {
                 MyLodStrategyCachedResultsUtils.UpdateTwoLods(m_cachedResults, passId,
                                                               currentLod, MyInstanceLodState.Transition, 1 - m_transition,
                                                               transitionLod, MyInstanceLodState.Transition, 2 + m_transition); // because of the implementation
             }
         }
         else
         {
             if (m_explicitState == MyInstanceLodState.Solid)
             {
                 MyLodStrategyCachedResultsUtils.UpdateSingleLod(m_cachedResults, passId,
                                                                 currentLod, MyInstanceLodState.Solid, 0);
             }
             else
             {
                 MyLodStrategyCachedResultsUtils.UpdateNoneLod(m_cachedResults, passId);
             }
         }
     }
 }