diff --git a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Animation/AnimationSystem.cs b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Animation/AnimationSystem.cs index a163712..ba04b07 100644 --- a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Animation/AnimationSystem.cs +++ b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Animation/AnimationSystem.cs @@ -12,7 +12,7 @@ using System; namespace Microsoft.Iris.Render.Animation { - internal class AnimationSystem : SharedRenderObject, IAnimationSystem, IRenderHandleOwner + internal class AnimationSystem : SharedRenderObject, IAnimationSystem { private RenderSession m_ownerSession; private RemoteAnimationManager m_remoteObject; @@ -111,10 +111,6 @@ namespace Microsoft.Iris.Render.Animation void IAnimationSystem.ResumeAnimations() => this.m_remoteObject.SendSetGlobalSpeedAdjustment(this.m_flSpeedAdjustment); - RENDERHANDLE IRenderHandleOwner.RenderHandle => this.m_remoteObject.RenderHandle; - - void IRenderHandleOwner.OnDisconnect() => this.m_remoteObject = null; - protected override void Invariant() { Debug2.Validate(this.m_remoteObject.IsValid, typeof(InvalidOperationException), "RemoteAnimationManager must be connected"); diff --git a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Internal/RenderSession.cs b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Internal/RenderSession.cs index a65e1e0..27614b9 100644 --- a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Internal/RenderSession.cs +++ b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Internal/RenderSession.cs @@ -28,7 +28,7 @@ namespace Microsoft.Iris.Render.Internal private Common.ObjectCache m_cacheSprite; private Common.ObjectCache m_cacheContainer; - internal RenderSession(RenderEngine renderEngine) + internal RenderSession(RenderEngine renderEngine) : base(renderEngine.EngineInfo) { Debug2.Validate(renderEngine != null, typeof(ArgumentNullException), nameof(renderEngine)); this.RegisterOwningThread(); diff --git a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/ProtocolSplashRendering.cs b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/ProtocolSplashRendering.cs index a0e0b21..0650a4c 100644 --- a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/ProtocolSplashRendering.cs +++ b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/ProtocolSplashRendering.cs @@ -193,7 +193,7 @@ namespace Microsoft.Iris.Render.Protocols.Splash.Rendering } internal RemoteAnimationManager BuildRemoteAnimationManager( - IRenderHandleOwner _priv_owner) + object _priv_owner) { return RemoteAnimationManager.Create(this, _priv_owner); } diff --git a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/RemoteAnimationManager.cs b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/RemoteAnimationManager.cs index fd222c8..c0ee93a 100644 --- a/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/RemoteAnimationManager.cs +++ b/UIX.RenderApi.Skia/Microsoft/Iris/Render/Protocols/Splash/Rendering/RemoteAnimationManager.cs @@ -12,10 +12,9 @@ namespace Microsoft.Iris.Render.Protocols.Splash.Rendering { internal class RemoteAnimationManager : RemoteObject { - private static ushort[] s_priv_ByteOrder_Msg3_Create; - private static ushort[] s_priv_ByteOrder_Msg0_SetAnimationRate; - private static ushort[] s_priv_ByteOrder_Msg1_PulseTimeAdvance; - private static ushort[] s_priv_ByteOrder_Msg2_SetGlobalSpeedAdjustment; + private int m_pulseMs; + private int m_framesPerSecond; + private float m_flFactor; protected RemoteAnimationManager() { @@ -23,103 +22,31 @@ namespace Microsoft.Iris.Render.Protocols.Splash.Rendering public static unsafe RemoteAnimationManager Create( ProtocolSplashRendering _priv_protocolInstance, - IRenderHandleOwner _priv_owner) + object _priv_owner) { RenderPort port = _priv_protocolInstance.Port; RENDERHANDLE managerClassHandle = _priv_protocolInstance.AnimationManager_ClassHandle; - RemoteAnimationManager animationManager = new RemoteAnimationManager(port, _priv_owner); - uint num = (uint)sizeof(Msg3_Create); - // ISSUE: untyped stack allocation - byte* pMem = stackalloc byte[(int)num]; - Msg3_Create* msg3CreatePtr = (Msg3_Create*)pMem; - msg3CreatePtr->_priv_size = num; - msg3CreatePtr->_priv_msgid = 3U; - msg3CreatePtr->_priv_idObjectSubject = animationManager.m_renderHandle; - if (port.ForeignByteOrder) - MarshalHelper.SwapByteOrder(pMem, ref s_priv_ByteOrder_Msg3_Create, typeof(Msg3_Create), 0, 0); - port.CreateRemoteObject(managerClassHandle, animationManager.m_renderHandle, (Message*)msg3CreatePtr); + RemoteAnimationManager animationManager = new RemoteAnimationManager(); + //port.CreateRemoteObject(managerClassHandle, animationManager.m_renderHandle, (Message*)msg3CreatePtr); return animationManager; } - public unsafe void BuildSetAnimationRate( - out RenderPort _priv_portUse, - out Message* _priv_pmsgUse, - int nFramesPerSecond) - { - Debug2.Throw(this.IsValid, "Non-static method call requires an instance"); - _priv_portUse = this.m_renderPort; - _priv_portUse.ValidateHandle(this.m_renderHandle); - uint size = (uint)sizeof(Msg0_SetAnimationRate); - Msg0_SetAnimationRate* setAnimationRatePtr = (Msg0_SetAnimationRate*)_priv_portUse.AllocMessageBuffer(size); - setAnimationRatePtr->_priv_size = size; - setAnimationRatePtr->_priv_msgid = 0U; - setAnimationRatePtr->nFramesPerSecond = nFramesPerSecond; - setAnimationRatePtr->_priv_idObjectSubject = this.m_renderHandle; - if (_priv_portUse.ForeignByteOrder) - MarshalHelper.SwapByteOrder((byte*)setAnimationRatePtr, ref s_priv_ByteOrder_Msg0_SetAnimationRate, typeof(Msg0_SetAnimationRate), 0, 0); - _priv_pmsgUse = (Message*)setAnimationRatePtr; - } - public unsafe void SendSetAnimationRate(int nFramesPerSecond) - { - RenderPort _priv_portUse; - Message* _priv_pmsgUse; - this.BuildSetAnimationRate(out _priv_portUse, out _priv_pmsgUse, nFramesPerSecond); - _priv_portUse.SendRemoteMessage(_priv_pmsgUse); - } - - public unsafe void BuildPulseTimeAdvance( - out RenderPort _priv_portUse, - out Message* _priv_pmsgUse, - int nPulseMs) { Debug2.Throw(this.IsValid, "Non-static method call requires an instance"); - _priv_portUse = this.m_renderPort; - _priv_portUse.ValidateHandle(this.m_renderHandle); - uint size = (uint)sizeof(Msg1_PulseTimeAdvance); - Msg1_PulseTimeAdvance* pulseTimeAdvancePtr = (Msg1_PulseTimeAdvance*)_priv_portUse.AllocMessageBuffer(size); - pulseTimeAdvancePtr->_priv_size = size; - pulseTimeAdvancePtr->_priv_msgid = 1U; - pulseTimeAdvancePtr->nPulseMs = nPulseMs; - pulseTimeAdvancePtr->_priv_idObjectSubject = this.m_renderHandle; - if (_priv_portUse.ForeignByteOrder) - MarshalHelper.SwapByteOrder((byte*)pulseTimeAdvancePtr, ref s_priv_ByteOrder_Msg1_PulseTimeAdvance, typeof(Msg1_PulseTimeAdvance), 0, 0); - _priv_pmsgUse = (Message*)pulseTimeAdvancePtr; + m_framesPerSecond = nFramesPerSecond; } public unsafe void SendPulseTimeAdvance(int nPulseMs) - { - RenderPort _priv_portUse; - Message* _priv_pmsgUse; - this.BuildPulseTimeAdvance(out _priv_portUse, out _priv_pmsgUse, nPulseMs); - _priv_portUse.SendRemoteMessage(_priv_pmsgUse); - } - - public unsafe void BuildSetGlobalSpeedAdjustment( - out RenderPort _priv_portUse, - out Message* _priv_pmsgUse, - float flFactor) { Debug2.Throw(this.IsValid, "Non-static method call requires an instance"); - _priv_portUse = this.m_renderPort; - _priv_portUse.ValidateHandle(this.m_renderHandle); - uint size = (uint)sizeof(Msg2_SetGlobalSpeedAdjustment); - Msg2_SetGlobalSpeedAdjustment* globalSpeedAdjustmentPtr = (Msg2_SetGlobalSpeedAdjustment*)_priv_portUse.AllocMessageBuffer(size); - globalSpeedAdjustmentPtr->_priv_size = size; - globalSpeedAdjustmentPtr->_priv_msgid = 2U; - globalSpeedAdjustmentPtr->flFactor = flFactor; - globalSpeedAdjustmentPtr->_priv_idObjectSubject = this.m_renderHandle; - if (_priv_portUse.ForeignByteOrder) - MarshalHelper.SwapByteOrder((byte*)globalSpeedAdjustmentPtr, ref s_priv_ByteOrder_Msg2_SetGlobalSpeedAdjustment, typeof(Msg2_SetGlobalSpeedAdjustment), 0, 0); - _priv_pmsgUse = (Message*)globalSpeedAdjustmentPtr; + m_pulseMs = nPulseMs; } public unsafe void SendSetGlobalSpeedAdjustment(float flFactor) { - RenderPort _priv_portUse; - Message* _priv_pmsgUse; - this.BuildSetGlobalSpeedAdjustment(out _priv_portUse, out _priv_pmsgUse, flFactor); - _priv_portUse.SendRemoteMessage(_priv_pmsgUse); + Debug2.Throw(this.IsValid, "Non-static method call requires an instance"); + m_flFactor = flFactor; } public static RemoteAnimationManager CreateFromHandle( @@ -151,40 +78,5 @@ namespace Microsoft.Iris.Render.Protocols.Splash.Rendering public override bool Equals(object other) => other is RemoteAnimationManager && this.m_renderHandle == ((RemoteObject)other).m_renderHandle; public override int GetHashCode() => base.GetHashCode(); - - [ComVisible(false)] - private struct Msg3_Create - { - public uint _priv_size; - public uint _priv_msgid; - public RENDERHANDLE _priv_idObjectSubject; - } - - [ComVisible(false)] - private struct Msg0_SetAnimationRate - { - public uint _priv_size; - public uint _priv_msgid; - public RENDERHANDLE _priv_idObjectSubject; - public int nFramesPerSecond; - } - - [ComVisible(false)] - private struct Msg1_PulseTimeAdvance - { - public uint _priv_size; - public uint _priv_msgid; - public RENDERHANDLE _priv_idObjectSubject; - public int nPulseMs; - } - - [ComVisible(false)] - private struct Msg2_SetGlobalSpeedAdjustment - { - public uint _priv_size; - public uint _priv_msgid; - public RENDERHANDLE _priv_idObjectSubject; - public float flFactor; - } } } diff --git a/Xune.Wpf/MainWindow.xaml.cs b/Xune.Wpf/MainWindow.xaml.cs index aa394ca..de055b8 100644 --- a/Xune.Wpf/MainWindow.xaml.cs +++ b/Xune.Wpf/MainWindow.xaml.cs @@ -33,7 +33,10 @@ namespace Xune.Wpf { // Initialize UI framework if (Microsoft.Iris.Application.IsInitialized || Microsoft.Iris.Application.IsInitializing) + { + Canvas.PaintSurface -= Canvas_PaintSurface; return; + } Microsoft.Iris.Application.Initialize(e.Surface, new WpfRenderWindow(this)); }