WuhuIslandTesting/Library/PackageCache/com.unity.scriptablebuildpipeline@1.21.5/Editor/Utilities/GraphicsSettingsApi.cs
2025-01-07 02:06:59 +01:00

152 lines
7.4 KiB
C#

using UnityEditor.Build.Content;
namespace UnityEditor.Build.Pipeline.Utilities
{
#if !UNITY_2019_1_OR_NEWER
using System.Reflection;
using UnityEngine.Rendering;
using Object = UnityEngine.Object;
#endif
static class GraphicsSettingsApi
{
#if UNITY_2019_1_OR_NEWER
internal static BuildUsageTagGlobal GetGlobalUsage()
{
return ContentBuildInterface.GetGlobalUsageFromGraphicsSettings();
}
#else
static SerializedObject m_SerializedObject;
static SerializedProperty m_LightmapStripping;
static SerializedProperty m_LightmapKeepPlain;
static SerializedProperty m_LightmapKeepDirCombined;
static SerializedProperty m_LightmapKeepDynamicPlain;
static SerializedProperty m_LightmapKeepDynamicDirCombined;
static SerializedProperty m_LightmapKeepShadowMask;
static SerializedProperty m_LightmapKeepSubtractive;
static SerializedProperty m_FogStripping;
static SerializedProperty m_FogKeepLinear;
static SerializedProperty m_FogKeepExp;
static SerializedProperty m_FogKeepExp2;
static SerializedProperty m_InstancingStripping;
static FieldInfo m_LightmapModesUsed;
static FieldInfo m_LegacyLightmapModesUsed;
static FieldInfo m_DynamicLightmapsUsed;
static FieldInfo m_FogModesUsed;
static FieldInfo m_ForceInstancingStrip;
static FieldInfo m_ForceInstancingKeep;
static FieldInfo m_ShadowMasksUsed;
static FieldInfo m_SubtractiveUsed;
static uint m_LightmapModesUsed_Value;
static uint m_LegacyLightmapModesUsed_Value;
static uint m_DynamicLightmapsUsed_Value;
static uint m_FogModesUsed_Value;
static bool m_ForceInstancingStrip_Value;
static bool m_ForceInstancingKeep_Value;
static bool m_ShadowMasksUsed_Value;
static bool m_SubtractiveUsed_Value;
static void OnEnable()
{
m_LightmapModesUsed_Value = 0;
m_LegacyLightmapModesUsed_Value = 0;
m_DynamicLightmapsUsed_Value = 0;
m_FogModesUsed_Value = 0;
m_ForceInstancingStrip_Value = false;
m_ForceInstancingKeep_Value = false;
m_ShadowMasksUsed_Value = false;
m_SubtractiveUsed_Value = false;
if (m_SerializedObject != null)
return;
var getGraphicsSettings = typeof(GraphicsSettings).GetMethod("GetGraphicsSettings", BindingFlags.Static | BindingFlags.NonPublic);
var graphicsSettings = getGraphicsSettings.Invoke(null, null) as Object;
m_SerializedObject = new SerializedObject(graphicsSettings);
m_LightmapStripping = m_SerializedObject.FindProperty("m_LightmapStripping");
m_LightmapKeepPlain = m_SerializedObject.FindProperty("m_LightmapKeepPlain");
m_LightmapKeepDirCombined = m_SerializedObject.FindProperty("m_LightmapKeepDirCombined");
m_LightmapKeepDynamicPlain = m_SerializedObject.FindProperty("m_LightmapKeepDynamicPlain");
m_LightmapKeepDynamicDirCombined = m_SerializedObject.FindProperty("m_LightmapKeepDynamicDirCombined");
m_LightmapKeepShadowMask = m_SerializedObject.FindProperty("m_LightmapKeepShadowMask");
m_LightmapKeepSubtractive = m_SerializedObject.FindProperty("m_LightmapKeepSubtractive");
m_FogStripping = m_SerializedObject.FindProperty("m_FogStripping");
m_FogKeepLinear = m_SerializedObject.FindProperty("m_FogKeepLinear");
m_FogKeepExp = m_SerializedObject.FindProperty("m_FogKeepExp");
m_FogKeepExp2 = m_SerializedObject.FindProperty("m_FogKeepExp2");
m_InstancingStripping = m_SerializedObject.FindProperty("m_InstancingStripping");
var globalUsageType = typeof(BuildUsageTagGlobal);
m_LightmapModesUsed = globalUsageType.GetField("m_LightmapModesUsed", BindingFlags.Instance | BindingFlags.NonPublic);
m_LegacyLightmapModesUsed = globalUsageType.GetField("m_LegacyLightmapModesUsed", BindingFlags.Instance | BindingFlags.NonPublic);
m_DynamicLightmapsUsed = globalUsageType.GetField("m_DynamicLightmapsUsed", BindingFlags.Instance | BindingFlags.NonPublic);
m_FogModesUsed = globalUsageType.GetField("m_FogModesUsed", BindingFlags.Instance | BindingFlags.NonPublic);
m_ForceInstancingStrip = globalUsageType.GetField("m_ForceInstancingStrip", BindingFlags.Instance | BindingFlags.NonPublic);
m_ForceInstancingKeep = globalUsageType.GetField("m_ForceInstancingKeep", BindingFlags.Instance | BindingFlags.NonPublic);
m_ShadowMasksUsed = globalUsageType.GetField("m_ShadowMasksUsed", BindingFlags.Instance | BindingFlags.NonPublic);
m_SubtractiveUsed = globalUsageType.GetField("m_SubtractiveUsed", BindingFlags.Instance | BindingFlags.NonPublic);
}
internal static BuildUsageTagGlobal GetGlobalUsage()
{
OnEnable();
m_SerializedObject.Update();
if (m_LightmapStripping.intValue != 0)
{
if (m_LightmapKeepPlain.boolValue)
m_LegacyLightmapModesUsed_Value |= (1 << 0);
if (m_LightmapKeepDirCombined.boolValue)
m_LegacyLightmapModesUsed_Value |= (1 << 2);
if (m_LightmapKeepPlain.boolValue)
m_LightmapModesUsed_Value |= (1 << 0);
if (m_LightmapKeepDirCombined.boolValue)
m_LightmapModesUsed_Value |= (1 << 1);
if (m_LightmapKeepDynamicPlain.boolValue)
m_DynamicLightmapsUsed_Value |= (1 << 0);
if (m_LightmapKeepDynamicDirCombined.boolValue)
m_DynamicLightmapsUsed_Value |= (1 << 1);
if (m_LightmapKeepShadowMask.boolValue)
m_ShadowMasksUsed_Value = true;
if (m_LightmapKeepSubtractive.boolValue)
m_SubtractiveUsed_Value = true;
}
if (m_FogStripping.intValue != 0)
{
if (m_FogKeepLinear.boolValue)
m_FogModesUsed_Value |= (1 << 1);
if (m_FogKeepExp.boolValue)
m_FogModesUsed_Value |= (1 << 2);
if (m_FogKeepExp2.boolValue)
m_FogModesUsed_Value |= (1 << 3);
}
m_ForceInstancingStrip_Value = (m_InstancingStripping.intValue == 1);
m_ForceInstancingKeep_Value = (m_InstancingStripping.intValue == 2);
BuildUsageTagGlobal globalUsage = new BuildUsageTagGlobal();
var boxedUsage = (object)globalUsage;
m_LightmapModesUsed.SetValue(boxedUsage, m_LightmapModesUsed_Value);
m_LegacyLightmapModesUsed.SetValue(boxedUsage, m_LegacyLightmapModesUsed_Value);
m_DynamicLightmapsUsed.SetValue(boxedUsage, m_DynamicLightmapsUsed_Value);
m_FogModesUsed.SetValue(boxedUsage, m_FogModesUsed_Value);
m_ForceInstancingStrip.SetValue(boxedUsage, m_ForceInstancingStrip_Value);
m_ForceInstancingKeep.SetValue(boxedUsage, m_ForceInstancingKeep_Value);
m_ShadowMasksUsed.SetValue(boxedUsage, m_ShadowMasksUsed_Value);
m_SubtractiveUsed.SetValue(boxedUsage, m_SubtractiveUsed_Value);
globalUsage = (BuildUsageTagGlobal)boxedUsage;
return globalUsage;
}
#endif
}
}