using System;
using MagicLeap.OpenXR.Features;
using UnityEngine.Rendering;
#if URP_14_0_0_OR_NEWER
using UnityEngine.Rendering.Universal;
using UnityEngine.XR.OpenXR;
#if UNITY_XR_MAGICLEAP_PROVIDER
using SegmentedDimmerFeature = URP.SegmentedDimmer.SegmentedDimmer;
#endif
#endif
namespace UnityEngine.XR.MagicLeap
{
public partial class MLSegmentedDimmer
{
#if URP_14_0_0_OR_NEWER && UNITY_XR_MAGICLEAP_PROVIDER
private static SegmentedDimmerFeature segmentedDimmerFeature;
private static SegmentedDimmerFeature SegmentedDimmerFeature
{
get
{
if(segmentedDimmerFeature == null)
{
var urp = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
if(urp != null)
{
segmentedDimmerFeature = urp.GetRendererFeature<SegmentedDimmerFeature>() as SegmentedDimmerFeature;
}
}
return segmentedDimmerFeature;
}
}
#endif
private static int defaultLayer = -1;
public static void Activate()
{
if(MLDevice.IsOpenXRLoaderActive())
{
Debug.LogWarning($"WARNING: Using legacy MLSegmentedDimmer API with the OpenXR provider! Recommend udpating your scripts to use {nameof(MagicLeapRenderingExtensionsFeature)} from now on.");
var renderFeature = OpenXR.OpenXRSettings.Instance.GetFeature<MagicLeapRenderingExtensionsFeature>();
if(renderFeature != null)
{
renderFeature.BlendMode = OpenXR.NativeTypes.XrEnvironmentBlendMode.AlphaBlend;
}
else
{
Debug.LogErrorFormat($"Unable to access the Segmented Dimmer under OpenXR without the {nameof(MagicLeapRenderingExtensionsFeature)} active!");
}
return;
}
MLGraphicsHooks.RequestAlphaBlendFrameRendering(true);
}
public static void Deactivate()
{
if (MLDevice.IsOpenXRLoaderActive())
{
Debug.LogWarning($"WARNING: Using legacy MLSegmentedDimmer API with the OpenXR provider! Recommend udpating your scripts to use {nameof(MagicLeapRenderingExtensionsFeature)} from now on.");
var renderFeature = OpenXR.OpenXRSettings.Instance.GetFeature<MagicLeapRenderingExtensionsFeature>();
if (renderFeature != null)
{
renderFeature.BlendMode = OpenXR.NativeTypes.XrEnvironmentBlendMode.Additive;
}
else
{
Debug.LogErrorFormat($"Unable to access the Segmented Dimmer under OpenXR without the {nameof(MagicLeapRenderingExtensionsFeature)} active!");
}
return;
}
MLGraphicsHooks.RequestAlphaBlendFrameRendering(false);
}
#if URP_14_0_0_OR_NEWER && UNITY_XR_MAGICLEAP_PROVIDER
public static bool Exists => SegmentedDimmerFeature != null;
#else
public static bool Exists => false;
#endif
public static int GetDefaultLayer()
{
#if URP_14_0_0_OR_NEWER && UNITY_XR_MAGICLEAP_PROVIDER
if (defaultLayer >= 0)
{
return defaultLayer;
}
for (int i = 0; i < 32; i++)
{
if (SegmentedDimmerFeature.settings.layerMask == (SegmentedDimmerFeature.settings.layerMask | (1 << i)))
{
defaultLayer = i;
break;
}
}
#endif
return defaultLayer;
}
}
}