89 lines
3.9 KiB
C#
89 lines
3.9 KiB
C#
|
|
#if GeNa_HDRP
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering.HighDefinition;
|
|
using System.Reflection;
|
|
using UnityEditor;
|
|
using UnityEngine.Rendering;
|
|
#endif
|
|
namespace GeNa.Core
|
|
{
|
|
public static class GeNaHDRPUtility
|
|
{
|
|
#if GeNa_HDRP
|
|
public static void DisplayWarnings()
|
|
{
|
|
var pipeline = GeNaUtility.GetActivePipeline();
|
|
if (pipeline == Constants.RenderPipeline.HighDefinition)
|
|
{
|
|
var frameSettings = GetCurrentDefaultFrameSettings();
|
|
if (!frameSettings.IsEnabled(FrameSettingsField.AfterPostprocess))
|
|
{
|
|
EditorGUILayout.HelpBox("WARNING! 'AfterPostprocess' is currently Disabled in the current Pipeline asset.\n" +
|
|
"In order to see visualization, you must have this turned on.", MessageType.Warning);
|
|
if (GUILayout.Button("Turn on AfterPostprocess"))
|
|
{
|
|
frameSettings.SetEnabled(FrameSettingsField.AfterPostprocess, true);
|
|
SetCurrentDefaultFrameSettings(frameSettings);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public static MemberInfo[] GetDefaultFrameSettingsMember(RenderPipelineAsset pipelineAsset, out object objectReference)
|
|
{
|
|
objectReference = pipelineAsset;
|
|
var hdrpAssetType = pipelineAsset.GetType();
|
|
var pipelineAssetType = pipelineAsset.GetType();
|
|
#if UNITY_2021_2_OR_NEWER
|
|
var globalSettingsInfo = pipelineAssetType.GetProperty("globalSettings", BindingFlags.NonPublic | BindingFlags.Instance); //GetPropValue(pipelineAsset, "globalSettings");
|
|
var globalSettings = globalSettingsInfo.GetValue(objectReference);
|
|
pipelineAssetType = globalSettings.GetType();
|
|
objectReference = globalSettings;
|
|
#endif
|
|
return pipelineAssetType.GetMember("m_RenderingPathDefaultCameraFrameSettings", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
}
|
|
public static FrameSettings GetCurrentDefaultFrameSettings()
|
|
{
|
|
var pipelineAsset = GraphicsSettings.defaultRenderPipeline;
|
|
if (pipelineAsset != null)
|
|
{
|
|
HDRenderPipelineAsset hdrpPipelineAsset = pipelineAsset as HDRenderPipelineAsset;
|
|
if (hdrpPipelineAsset != null)
|
|
{
|
|
var defaultFrameSettings = GetDefaultFrameSettingsMember(pipelineAsset, out var objectReference);
|
|
foreach (MemberInfo memberInfo in defaultFrameSettings)
|
|
{
|
|
if (memberInfo.MemberType == MemberTypes.Field)
|
|
{
|
|
FieldInfo fieldInfo = memberInfo as FieldInfo;
|
|
return (FrameSettings)fieldInfo.GetValue(objectReference);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return default;
|
|
}
|
|
public static void SetCurrentDefaultFrameSettings(FrameSettings frameSettings)
|
|
{
|
|
var pipelineAsset = GraphicsSettings.defaultRenderPipeline;
|
|
if (pipelineAsset != null)
|
|
{
|
|
HDRenderPipelineAsset hdrpPipelineAsset = pipelineAsset as HDRenderPipelineAsset;
|
|
if (hdrpPipelineAsset != null)
|
|
{
|
|
var defaultFrameSettings = GetDefaultFrameSettingsMember(pipelineAsset, out var objectReference);
|
|
foreach (MemberInfo memberInfo in defaultFrameSettings)
|
|
{
|
|
if (memberInfo.MemberType == MemberTypes.Field)
|
|
{
|
|
FieldInfo fieldInfo = memberInfo as FieldInfo;
|
|
fieldInfo.SetValue(objectReference, frameSettings);
|
|
}
|
|
}
|
|
EditorUtility.SetDirty(pipelineAsset);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
} |