70 lines
2.5 KiB
C#
70 lines
2.5 KiB
C#
using System;
|
|
|
|
namespace UnityEngine.Rendering.HighDefinition
|
|
{
|
|
internal class SkyUpdateContext
|
|
{
|
|
SkySettings m_SkySettings;
|
|
public SkyRenderer skyRenderer { get; private set; }
|
|
public int cachedSkyRenderingContextId = -1;
|
|
|
|
public int skyParametersHash = -1;
|
|
public float currentUpdateTime = 0.0f;
|
|
|
|
public bool settingsHadBigDifferenceWithPrev { get; private set; }
|
|
|
|
public SkySettings skySettings
|
|
{
|
|
get { return m_SkySettings; }
|
|
set
|
|
{
|
|
// We cleanup the renderer first here because in some cases, after scene unload, the skySettings field will be "null" because the object got destroyed.
|
|
// In this case, the renderer might stay allocated until a non null value is set. To avoid a lingering allocation, we cleanup first before anything else.
|
|
// So next frame after scene unload, renderer will be freed.
|
|
if (skyRenderer != null && (value == null || value.GetSkyRendererType() != skyRenderer.GetType()))
|
|
{
|
|
skyRenderer.Cleanup();
|
|
skyRenderer = null;
|
|
}
|
|
|
|
if (m_SkySettings == null)
|
|
settingsHadBigDifferenceWithPrev = true;
|
|
else
|
|
settingsHadBigDifferenceWithPrev = m_SkySettings.SignificantlyDivergesFrom(value);
|
|
|
|
if (m_SkySettings == value)
|
|
return;
|
|
|
|
skyParametersHash = -1;
|
|
m_SkySettings = value;
|
|
currentUpdateTime = 0.0f;
|
|
|
|
if (m_SkySettings != null && skyRenderer == null)
|
|
{
|
|
var rendererType = m_SkySettings.GetSkyRendererType();
|
|
skyRenderer = (SkyRenderer)Activator.CreateInstance(rendererType);
|
|
skyRenderer.Build();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Cleanup()
|
|
{
|
|
if (skyRenderer != null)
|
|
{
|
|
skyRenderer.Cleanup();
|
|
}
|
|
|
|
HDRenderPipeline hdrp = HDRenderPipeline.currentPipeline;
|
|
if (hdrp != null)
|
|
hdrp.skyManager.ReleaseCachedContext(cachedSkyRenderingContextId);
|
|
}
|
|
|
|
public bool IsValid()
|
|
{
|
|
// We need to check m_SkySettings because it can be "nulled" when destroying the volume containing the settings (as it's a ScriptableObject) without the context knowing about it.
|
|
return m_SkySettings != null;
|
|
}
|
|
}
|
|
}
|