128 lines
6.1 KiB
C#
128 lines
6.1 KiB
C#
using UnityEngine.Rendering.HighDefinition;
|
|
using System;
|
|
|
|
using Object = UnityEngine.Object;
|
|
|
|
namespace UnityEditor.Rendering.HighDefinition
|
|
{
|
|
class SerializedFrameSettings
|
|
{
|
|
SerializedProperty m_RootData;
|
|
SerializedProperty m_RootOverrides;
|
|
SerializedBitArray128 m_BitDatas;
|
|
SerializedBitArray128 m_BitOverrides;
|
|
public SerializedProperty sssQualityMode;
|
|
public SerializedProperty sssQualityLevel;
|
|
public SerializedProperty sssCustomSampleBudget;
|
|
public SerializedProperty lodBias;
|
|
public SerializedProperty lodBiasMode;
|
|
public SerializedProperty lodBiasQualityLevel;
|
|
public SerializedProperty maximumLODLevel;
|
|
public SerializedProperty maximumLODLevelMode;
|
|
public SerializedProperty maximumLODLevelQualityLevel;
|
|
public SerializedProperty materialQuality;
|
|
|
|
public SerializedObject serializedObject => m_RootData.serializedObject;
|
|
|
|
public LitShaderMode? litShaderMode
|
|
{
|
|
get
|
|
{
|
|
bool? val = IsEnabled(FrameSettingsField.LitShaderMode);
|
|
return val == null
|
|
? (LitShaderMode?)null
|
|
: val.Value == true
|
|
? LitShaderMode.Deferred
|
|
: LitShaderMode.Forward;
|
|
}
|
|
set => SetEnabled(FrameSettingsField.LitShaderMode, value == LitShaderMode.Deferred);
|
|
}
|
|
|
|
public bool? IsEnabled(FrameSettingsField field)
|
|
=> HaveMultipleValue(field) ? (bool?)null : m_BitDatas.GetBitAt((uint)field);
|
|
public void SetEnabled(FrameSettingsField field, bool value)
|
|
=> m_BitDatas.SetBitAt((uint)field, value);
|
|
public bool HaveMultipleValue(FrameSettingsField field)
|
|
=> m_BitDatas.HasBitMultipleDifferentValue((uint)field);
|
|
|
|
public bool GetOverrides(FrameSettingsField field)
|
|
=> m_BitOverrides?.GetBitAt((uint)field) ?? false; //rootOverride can be null in case of hdrpAsset defaults
|
|
public void SetOverrides(FrameSettingsField field, bool value)
|
|
=> m_BitOverrides?.SetBitAt((uint)field, value); //rootOverride can be null in case of hdrpAsset defaults
|
|
public bool HaveMultipleOverride(FrameSettingsField field)
|
|
=> m_BitOverrides?.HasBitMultipleDifferentValue((uint)field) ?? false;
|
|
|
|
ref FrameSettings GetData(Object obj)
|
|
{
|
|
if (obj is HDAdditionalCameraData)
|
|
return ref (obj as HDAdditionalCameraData).renderingPathCustomFrameSettings;
|
|
if (obj is HDProbe)
|
|
return ref (obj as HDProbe).frameSettings;
|
|
if (obj is HDRenderPipelineAsset)
|
|
switch (HDRenderPipelineUI.selectedFrameSettings)
|
|
{
|
|
case HDRenderPipelineUI.SelectedFrameSettings.Camera:
|
|
return ref (obj as HDRenderPipelineAsset).GetDefaultFrameSettings(FrameSettingsRenderType.Camera);
|
|
case HDRenderPipelineUI.SelectedFrameSettings.BakedOrCustomReflection:
|
|
return ref (obj as HDRenderPipelineAsset).GetDefaultFrameSettings(FrameSettingsRenderType.CustomOrBakedReflection);
|
|
case HDRenderPipelineUI.SelectedFrameSettings.RealtimeReflection:
|
|
return ref (obj as HDRenderPipelineAsset).GetDefaultFrameSettings(FrameSettingsRenderType.RealtimeReflection);
|
|
default:
|
|
throw new System.ArgumentException("Unknown kind of HDRenderPipelineUI.SelectedFrameSettings");
|
|
}
|
|
throw new System.ArgumentException("Unknown kind of object");
|
|
}
|
|
|
|
FrameSettingsOverrideMask? GetMask(Object obj)
|
|
{
|
|
if (obj is HDAdditionalCameraData)
|
|
return (obj as HDAdditionalCameraData).renderingPathCustomFrameSettingsOverrideMask;
|
|
if (obj is HDProbe)
|
|
return (obj as HDProbe).frameSettingsOverrideMask;
|
|
if (obj is HDRenderPipelineAsset)
|
|
return null;
|
|
throw new System.ArgumentException("Unknown kind of object");
|
|
}
|
|
|
|
public SerializedFrameSettings(SerializedProperty rootData, SerializedProperty rootOverrides)
|
|
{
|
|
m_RootData = rootData;
|
|
m_RootOverrides = rootOverrides;
|
|
m_BitDatas = rootData.FindPropertyRelative("bitDatas").ToSerializeBitArray128();
|
|
m_BitOverrides = rootOverrides?.FindPropertyRelative("mask").ToSerializeBitArray128(); //rootOverride can be null in case of hdrpAsset defaults
|
|
|
|
sssQualityMode = rootData.FindPropertyRelative("sssQualityMode");
|
|
sssQualityLevel = rootData.FindPropertyRelative("sssQualityLevel");
|
|
sssCustomSampleBudget = rootData.FindPropertyRelative("sssCustomSampleBudget");
|
|
lodBias = rootData.FindPropertyRelative("lodBias");
|
|
lodBiasMode = rootData.FindPropertyRelative("lodBiasMode");
|
|
lodBiasQualityLevel = rootData.FindPropertyRelative("lodBiasQualityLevel");
|
|
maximumLODLevel = rootData.FindPropertyRelative("maximumLODLevel");
|
|
maximumLODLevelMode = rootData.FindPropertyRelative("maximumLODLevelMode");
|
|
maximumLODLevelQualityLevel = rootData.FindPropertyRelative("maximumLODLevelQualityLevel");
|
|
materialQuality = rootData.Find((FrameSettings s) => s.materialQuality);
|
|
}
|
|
|
|
public struct TitleDrawingScope : IDisposable
|
|
{
|
|
bool hasOverride;
|
|
|
|
public TitleDrawingScope(UnityEngine.Rect rect, UnityEngine.GUIContent label, SerializedFrameSettings serialized)
|
|
{
|
|
EditorGUI.BeginProperty(rect, label, serialized.m_RootData);
|
|
|
|
hasOverride = serialized.m_BitOverrides != null;
|
|
if (hasOverride)
|
|
EditorGUI.BeginProperty(rect, label, serialized.m_RootOverrides);
|
|
}
|
|
|
|
void IDisposable.Dispose()
|
|
{
|
|
EditorGUI.EndProperty();
|
|
if (hasOverride)
|
|
EditorGUI.EndProperty();
|
|
}
|
|
}
|
|
}
|
|
}
|