Skip to content
This repository has been archived by the owner on Aug 11, 2024. It is now read-only.

clipping plane component updates #212

Merged
merged 1 commit into from
Jun 8, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
namespace XRTK.Utilities.Rendering
{
/// <summary>
/// An abstract primitive component to animate and visualize a clipping primitive that can be
/// An abstract primitive component to animate and visualize a clipping primitive that can be
/// used to drive per pixel based clipping.
/// </summary>
[ExecuteInEditMode]
Expand All @@ -24,8 +24,8 @@ public enum Side
private List<Renderer> renderers = new List<Renderer>();


[Tooltip("Which side of the primitive to clip pixels against.")]
[SerializeField]
[Tooltip("Which side of the primitive to clip pixels against.")]
private Side clippingSide = Side.Inside;

/// <summary>
Expand All @@ -34,7 +34,9 @@ public enum Side
public Side ClippingSide => clippingSide;

protected abstract string Keyword { get; }

protected abstract string KeywordProperty { get; }

protected abstract string ClippingSideProperty { get; }

private MaterialPropertyBlock materialPropertyBlock;
Expand All @@ -43,13 +45,17 @@ public enum Side

private int clippingSideId;

public void AddRenderer(Renderer _renderer)
/// <summary>
/// Add the specified renderer to the clipping component.
/// </summary>
/// <param name="renderer_"></param>
public void AddRenderer(Renderer renderer_)
{
if (_renderer != null && !renderers.Contains(_renderer))
if (renderer_ != null && !renderers.Contains(renderer_))
{
renderers.Add(_renderer);
renderers.Add(renderer_);

Material material = GetMaterial(_renderer, false);
var material = GetMaterial(renderer_, false);

if (material != null)
{
Expand All @@ -58,21 +64,57 @@ public void AddRenderer(Renderer _renderer)
}
}

public void RemoveRenderer(Renderer _renderer)
/// <summary>
/// Add the specified renderers to the clipping component.
/// </summary>
/// <param name="renderers_"></param>
public void AddRenderers(Renderer[] renderers_)
{
for (int i = 0; i < renderers_.Length; i++)
{
AddRenderer(renderers_[i]);
}
}

/// <summary>
/// Remove the specified renderer from the clipping component.
/// </summary>
/// <param name="renderer_"></param>
public void RemoveRenderer(Renderer renderer_)
{
if (renderers.Contains(_renderer))
if (renderers.Contains(renderer_))
{
Material material = GetMaterial(_renderer, false);
var material = GetMaterial(renderer_, false);

if (material != null)
{
ToggleClippingFeature(material, false);
}

renderers.Remove(_renderer);
renderers.Remove(renderer_);
}
}

/// <summary>
/// clear all the renderers from this clipping component.
/// </summary>
public void ClearRenderers()
{
for (int i = 0; i < renderers.Count; i++)
{
var material = GetMaterial(renderers[i], false);

if (material != null)
{
ToggleClippingFeature(material, false);
}
}

renderers.Clear();
}

#region Monobehaviour Implementation

protected void OnValidate()
{
ToggleClippingFeature(true);
Expand All @@ -93,9 +135,9 @@ protected void OnDisable()
}

#if UNITY_EDITOR
// We need this class to be updated once per frame even when in edit mode. Ideally this would
// occur after all other objects are updated in LateUpdate(), but because the ExecuteInEditMode
// attribute only invokes Update() we handle edit mode updating in Update() and runtime updating
// We need this class to be updated once per frame even when in edit mode. Ideally this would
// occur after all other objects are updated in LateUpdate(), but because the ExecuteInEditMode
// attribute only invokes Update() we handle edit mode updating in Update() and runtime updating
// in LateUpdate().
protected void Update()
{
Expand Down Expand Up @@ -123,7 +165,7 @@ protected void OnDestroy()

for (int i = 0; i < renderers.Count; ++i)
{
Material material = GetMaterial(renderers[i]);
var material = GetMaterial(renderers[i]);

if (material != null &&
modifiedMaterials.TryGetValue(material, out bool clippingPlaneOn))
Expand All @@ -141,6 +183,8 @@ protected void OnDestroy()
}
}

#endregion Monobehaviour Implementation

protected virtual void Initialize()
{
materialPropertyBlock = new MaterialPropertyBlock();
Expand All @@ -156,7 +200,7 @@ protected virtual void UpdateRenderers()

for (int i = 0; i < renderers.Count; ++i)
{
Renderer _renderer = renderers[i];
var _renderer = renderers[i];

if (_renderer == null)
{
Expand All @@ -181,7 +225,7 @@ protected void ToggleClippingFeature(bool keywordOn)

for (int i = 0; i < renderers.Count; ++i)
{
Material material = GetMaterial(renderers[i]);
var material = GetMaterial(renderers[i]);

if (material != null)
{
Expand Down Expand Up @@ -222,7 +266,7 @@ protected Material GetMaterial(Renderer _renderer, bool trackAllocations = true)
return _renderer.sharedMaterial;
}

Material material = _renderer.material;
var material = _renderer.material;

if (trackAllocations && !allocatedMaterials.Contains(material))
{
Expand Down