close #11; Render the soft mask buffer only when needed to improve performance
parent
782289612b
commit
e66f1bc75e
|
@ -129,7 +129,29 @@ namespace Coffee.UIExtensions
|
||||||
ReleaseRT(ref _softMaskBuffer);
|
ReleaseRT(ref _softMaskBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return _softMaskBuffer ? _softMaskBuffer : _softMaskBuffer = RenderTexture.GetTemporary(w, h, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default);
|
if(!_softMaskBuffer)
|
||||||
|
{
|
||||||
|
_softMaskBuffer = RenderTexture.GetTemporary (w, h, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default);
|
||||||
|
hasChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _softMaskBuffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool hasChanged
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _parent ? _parent.hasChanged : _hasChanged;
|
||||||
|
}
|
||||||
|
private set
|
||||||
|
{
|
||||||
|
if(_parent)
|
||||||
|
{
|
||||||
|
_parent.hasChanged = value;
|
||||||
|
}
|
||||||
|
_hasChanged = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,6 +162,7 @@ namespace Coffee.UIExtensions
|
||||||
/// <param name="baseMaterial">Configured Material.</param>
|
/// <param name="baseMaterial">Configured Material.</param>
|
||||||
public override Material GetModifiedMaterial(Material baseMaterial)
|
public override Material GetModifiedMaterial(Material baseMaterial)
|
||||||
{
|
{
|
||||||
|
hasChanged = true;
|
||||||
var result = base.GetModifiedMaterial(baseMaterial);
|
var result = base.GetModifiedMaterial(baseMaterial);
|
||||||
if (m_IgnoreParent && result != baseMaterial)
|
if (m_IgnoreParent && result != baseMaterial)
|
||||||
{
|
{
|
||||||
|
@ -154,6 +177,7 @@ namespace Coffee.UIExtensions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void IMeshModifier.ModifyMesh(Mesh mesh)
|
void IMeshModifier.ModifyMesh(Mesh mesh)
|
||||||
{
|
{
|
||||||
|
hasChanged = true;
|
||||||
_mesh = mesh;
|
_mesh = mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +190,7 @@ namespace Coffee.UIExtensions
|
||||||
{
|
{
|
||||||
verts.FillMesh(mesh);
|
verts.FillMesh(mesh);
|
||||||
}
|
}
|
||||||
|
hasChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -212,6 +237,8 @@ namespace Coffee.UIExtensions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override void OnEnable()
|
protected override void OnEnable()
|
||||||
{
|
{
|
||||||
|
hasChanged = true;
|
||||||
|
|
||||||
// Register.
|
// Register.
|
||||||
if (s_ActiveSoftMasks.Count == 0)
|
if (s_ActiveSoftMasks.Count == 0)
|
||||||
{
|
{
|
||||||
|
@ -284,6 +311,7 @@ namespace Coffee.UIExtensions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override void OnTransformParentChanged()
|
protected override void OnTransformParentChanged()
|
||||||
{
|
{
|
||||||
|
hasChanged = true;
|
||||||
SoftMask newParent = null;
|
SoftMask newParent = null;
|
||||||
if (isActiveAndEnabled && !m_IgnoreParent)
|
if (isActiveAndEnabled && !m_IgnoreParent)
|
||||||
{
|
{
|
||||||
|
@ -295,6 +323,12 @@ namespace Coffee.UIExtensions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetParent(newParent);
|
SetParent(newParent);
|
||||||
|
hasChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnRectTransformDimensionsChange ()
|
||||||
|
{
|
||||||
|
hasChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
|
@ -328,6 +362,7 @@ namespace Coffee.UIExtensions
|
||||||
Mesh _mesh;
|
Mesh _mesh;
|
||||||
SoftMask _parent;
|
SoftMask _parent;
|
||||||
List<SoftMask> _children = new List<SoftMask>();
|
List<SoftMask> _children = new List<SoftMask>();
|
||||||
|
bool _hasChanged = false;
|
||||||
|
|
||||||
Material material { get { return _material ? _material : _material = new Material(s_SoftMaskShader ? s_SoftMaskShader : s_SoftMaskShader = Resources.Load<Shader>("SoftMask")){ hideFlags = HideFlags.HideAndDontSave }; } }
|
Material material { get { return _material ? _material : _material = new Material(s_SoftMaskShader ? s_SoftMaskShader : s_SoftMaskShader = Resources.Load<Shader>("SoftMask")){ hideFlags = HideFlags.HideAndDontSave }; } }
|
||||||
|
|
||||||
|
@ -340,7 +375,24 @@ namespace Coffee.UIExtensions
|
||||||
{
|
{
|
||||||
foreach (var sm in s_ActiveSoftMasks)
|
foreach (var sm in s_ActiveSoftMasks)
|
||||||
{
|
{
|
||||||
if(sm)
|
if (!sm || sm._hasChanged)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var rt = sm.rectTransform;
|
||||||
|
if(rt.hasChanged)
|
||||||
|
{
|
||||||
|
rt.hasChanged = false;
|
||||||
|
sm.hasChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var sm in s_ActiveSoftMasks)
|
||||||
|
{
|
||||||
|
if (!sm || !sm._hasChanged)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sm._hasChanged = false;
|
||||||
|
if (!sm._parent)
|
||||||
{
|
{
|
||||||
sm.UpdateMaskTexture ();
|
sm.UpdateMaskTexture ();
|
||||||
}
|
}
|
||||||
|
@ -352,9 +404,6 @@ namespace Coffee.UIExtensions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void UpdateMaskTexture()
|
void UpdateMaskTexture()
|
||||||
{
|
{
|
||||||
if (_parent)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Transform stopAfter = MaskUtilities.FindRootSortOverrideCanvas(transform);
|
Transform stopAfter = MaskUtilities.FindRootSortOverrideCanvas(transform);
|
||||||
_stencilDepth = MaskUtilities.GetStencilDepth(transform, stopAfter);
|
_stencilDepth = MaskUtilities.GetStencilDepth(transform, stopAfter);
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace Coffee.UIExtensions
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the nearest parent softmask.
|
// Find the nearest parent softmask.
|
||||||
var parentTransform = transform;
|
var parentTransform = transform.parent;
|
||||||
while (parentTransform)
|
while (parentTransform)
|
||||||
{
|
{
|
||||||
var sm = parentTransform.GetComponent<SoftMask>();
|
var sm = parentTransform.GetComponent<SoftMask>();
|
||||||
|
|
Loading…
Reference in New Issue