using System.Collections.Generic;
namespace Microsoft.Iris.Render.OpenGL
{
///
/// An externally-driven animation input. Providers publish named values that
/// animations can reference. We store the published values; wiring them into
/// keyframe evaluation is a stage-3 TODO alongside full animation support.
///
public sealed class GLExternalAnimationInput : SharedRenderObject, IExternalAnimationInput
{
private static uint s_nextId = 1;
public GLExternalAnimationInput(IAnimationPropertyMap? propertyMap)
{
UniqueId = s_nextId++;
PropertyMap = propertyMap;
}
public uint UniqueId { get; }
internal IAnimationPropertyMap? PropertyMap { get; }
public IAnimationInputProvider CreateProvider(object objUser) => new GLAnimationInputProvider();
}
public sealed class GLAnimationInputProvider : SharedRenderObject, IAnimationInputProvider
{
private readonly Dictionary m_values = new Dictionary();
public void PublishFloat(string propertyName, float value) => m_values[propertyName] = value;
public void PublishVector2(string propertyName, Vector2 value) => m_values[propertyName] = value;
public void PublishVector3(string propertyName, Vector3 value) => m_values[propertyName] = value;
public void PublishVector4(string propertyName, Vector4 value) => m_values[propertyName] = value;
public void PublishQuaternion(string propertyName, Quaternion value) => m_values[propertyName] = value;
public void RevokeFloat(string propertyName) => m_values.Remove(propertyName);
public void RevokeVector2(string propertyName) => m_values.Remove(propertyName);
public void RevokeVector3(string propertyName) => m_values.Remove(propertyName);
public void RevokeVector4(string propertyName) => m_values.Remove(propertyName);
public void RevokeQuaternion(string propertyName) => m_values.Remove(propertyName);
}
}