You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
50 lines
1.7 KiB
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine.Rendering.RenderGraphModule;
|
|
|
|
namespace UnityEngine.Rendering
|
|
{
|
|
internal interface ILineRenderer
|
|
{
|
|
bool LineRendererIsValid();
|
|
LineRendering.RendererData GetLineRendererData(RenderGraph renderGraph, Camera camera);
|
|
}
|
|
|
|
partial class LineRendering
|
|
{
|
|
private static HashSet<ILineRenderer> s_RendererInstances = new HashSet<ILineRenderer>();
|
|
private static ILineRenderer[] s_RendererInstancesAsArray = null;
|
|
private static int s_RendererInstanceCount = 0;
|
|
|
|
private static void UpdateInstanceArray()
|
|
{
|
|
s_RendererInstanceCount = s_RendererInstances.Count;
|
|
|
|
if (s_RendererInstanceCount > 0)
|
|
{
|
|
s_RendererInstancesAsArray = new ILineRenderer[s_RendererInstanceCount];
|
|
s_RendererInstances.CopyTo(s_RendererInstancesAsArray);
|
|
}
|
|
else
|
|
{
|
|
s_RendererInstancesAsArray = null;
|
|
}
|
|
}
|
|
|
|
internal static void AddRenderer(ILineRenderer renderer)
|
|
{
|
|
s_RendererInstances.Add(renderer);
|
|
UpdateInstanceArray();
|
|
}
|
|
|
|
internal static void RemoveRenderer(ILineRenderer renderer)
|
|
{
|
|
s_RendererInstances.Remove(renderer);
|
|
UpdateInstanceArray();
|
|
}
|
|
|
|
private static bool HasRenderDatas() => s_RendererInstancesAsArray != null;
|
|
private static RendererData[] GetValidRenderDatas(RenderGraph renderGraph, Camera camera) =>
|
|
s_RendererInstancesAsArray.Where(o => o.LineRendererIsValid()).Select(o => o.GetLineRendererData(renderGraph, camera)).ToArray();
|
|
}
|
|
}
|