Files
2026-02-28 12:43:44 +08:00

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
}
}