public void SetExplicitLodState(MyLodStrategyInfo strategyInfo, MyInstanceLodState state, float stateData) { m_explicitState = state; m_explicitStateData = stateData; int maxLod = 0; if (!strategyInfo.IsEmpty) { maxLod = strategyInfo.GetLodsCount() - 1; } UpdateCachedResults(maxLod, m_allPassIds); }
public void ResolveExplicit(MyLodStrategyInfo strategyInfo, ulong currentFrameId, int lodNum, List <int> activePassIds) { if (strategyInfo.IsEmpty) { return; } if (currentFrameId == m_updatedAtFrameId) { return; } int maxLod = strategyInfo.GetLodsCount() - 1; m_currentLod = Math.Min(lodNum, maxLod); m_transitionLod = -1; m_transition = 0; UpdateCachedResults(maxLod, activePassIds); }
public void SkippingResolve(MyLodStrategyInfo strategyInfo, ulong currentFrameId, Vector3D cameraPos, Vector3D instancePos, List <int> activePassIds, MyLodStrategyPreprocessor preprocessor) { if (strategyInfo.IsEmpty) { return; } float distance = (float)(cameraPos - instancePos).Length(); distance *= preprocessor.DistanceMult; distance += m_objectDistanceAdd; distance *= m_objectDistanceMult; m_currentLod = GetTheBestLod(strategyInfo, distance); m_transitionLod = -1; m_transition = 0; m_updatedAtFrameId = currentFrameId; int maxLod = strategyInfo.GetLodsCount() - 1; UpdateCachedResults(maxLod, activePassIds); }
public void SmoothResolve(MyLodStrategyInfo strategyInfo, ulong currentFrameId, float timeDeltaSeconds, Vector3D cameraPos, Vector3D instancePos, List <int> activePassIds, MyLodStrategyPreprocessor preprocessor) { if (strategyInfo.IsEmpty) { return; } if (currentFrameId == m_updatedAtFrameId) { return; } float distance = (float)(cameraPos - instancePos).Length(); distance *= preprocessor.DistanceMult; distance += m_objectDistanceAdd; distance *= m_objectDistanceMult; if (MISSING_FRAMES_TO_JUMP < currentFrameId - m_updatedAtFrameId) // the lod was not updated for a long time, we can jump to the lod { m_currentLod = GetTheBestLod(strategyInfo, distance); m_transitionLod = -1; m_transition = 0; } else { SmoothTransition(strategyInfo, timeDeltaSeconds, distance, ref m_currentLod, ref m_transitionLod, ref m_transition); } m_updatedAtFrameId = currentFrameId; int maxLod = strategyInfo.GetLodsCount() - 1; /*m_currentLod = strategyInfo.GetLodsCount() - 1; * m_transition = 0;*/ UpdateCachedResults(maxLod, activePassIds); }