// Crest Water System // Copyright © 2024 Wave Harmonic. All rights reserved. using UnityEngine; namespace WaveHarmonic.Crest { sealed class DepthQuery : QueryBaseSimple, IDepthProvider { public DepthQuery() : base(WaterRenderer.Instance.DepthLod) { } public DepthQuery(WaterRenderer water) : base(water.DepthLod) { } protected override int Kernel => 2; public override int Query(int hash, float minimumSpatialLength, Vector3[] queries, Vector3[] results, Vector3? center = null) { var id = base.Query(hash, minimumSpatialLength, queries, results, center); // Infinity will become NaN. Convert back to infinity. // Negative infinity should not happen. for (var i = 0; i < results.Length; i++) { var value = results[i]; if (float.IsNaN(value.x)) value.x = float.PositiveInfinity; if (float.IsNaN(value.y)) value.y = float.PositiveInfinity; results[i] = value; } return id; } } sealed class DepthQueryPerCamera : QueryPerCameraSimple, IDepthProvider { public DepthQueryPerCamera(WaterRenderer water) : base(water) { } } }