// Clear cached renderers private void ClearRenderers() { for (int i = highlightableRenderers.Count - 1; i >= 0; i--) { HighlighterRenderer renderer = highlightableRenderers[i]; renderer.SetState(false); } highlightableRenderers.Clear(); }
// private void FillBufferInternal(CommandBuffer buffer, Mode m, bool depthAvailable) { UpdateRenderers(); bool isHighlighter = once || flashing || (transitionValue > 0f); bool isOccluder = occluder && (seeThrough || !depthAvailable); // Update mode mode = Mode.None; if (isHighlighter) { mode = seeThrough ? Mode.HighlighterSeeThrough : Mode.Highlighter; } else if (isOccluder) { mode = seeThrough ? Mode.OccluderSeeThrough : Mode.Occluder; } if (mode == Mode.None || mode != m) { return; } if (isHighlighter) { // ZTest = (seeThrough ? Always : LEqual), StencilRef = 1 UpdateShaderParams(seeThrough, true); } else if (isOccluder) { // ZTest = LEqual, StencilRef = seeThrough ? 1 : 0 UpdateShaderParams(false, seeThrough); } UpdateColors(); // Fill CommandBuffer with this highlighter rendering commands for (int i = highlightableRenderers.Count - 1; i >= 0; i--) { // To avoid null-reference exceptions when cached renderer has been removed but ReinitMaterials wasn't been called HighlighterRenderer renderer = highlightableRenderers[i]; if (renderer == null) { highlightableRenderers.RemoveAt(i); } // Try to fill buffer else if (!renderer.FillBuffer(buffer)) { highlightableRenderers.RemoveAt(i); renderer.SetState(false); } } }