/**
* Copyright(c) Live2D Inc. All rights reserved.
*
* Use of this source code is governed by the Live2D Open Software license
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
*/
using UnityEngine;
namespace Live2D.Cubism.Rendering.Masking
{
///
/// Holds info used for masking.
///
public struct CubismMaskTransform
{
#region Conversion
///
/// backing field.
///
private static int _uniqueId;
///
/// HACK Prevents dynamic batching of s that are masked.
///
///
/// As Unity transforms vertex positions into world space on dynamic batching, and masking relies on vertex positions to be in local space,
/// masking isn't compatible with dynamic batching.
///
/// Unity exposes a shader tag for disabling dynamic batching ("DynamicBatching"), but this would make it necessary for creating separate shaders...
///
private static int UniqueId
{
get
{
// We just have to make sure consecutive drawables with the same mask aren't batched; having more than 1024 cases in a row seems pretty rare, so...
if (_uniqueId > 1024)
{
_uniqueId = 0;
}
return (++_uniqueId);
}
}
///
/// Converts a to a .
///
/// Value to convert.
public static implicit operator Vector4(CubismMaskTransform value)
{
return new Vector4
{
x = value.Offset.x,
y = value.Offset.y,
z = value.Scale,
w = UniqueId
};
}
#endregion
///
/// Offset in model space.
///
public Vector2 Offset;
///
/// Scale in model space.
///
public float Scale;
}
}