6 changed files with 61 additions and 6 deletions
@ -0,0 +1,35 @@ |
|||||
|
using System; |
||||
|
using System.Reactive.Disposables; |
||||
|
using Avalonia.Rendering; |
||||
|
using Avalonia.Win32.Interop; |
||||
|
|
||||
|
namespace Avalonia.Win32 |
||||
|
{ |
||||
|
internal class RenderLoop : DefaultRenderLoop |
||||
|
{ |
||||
|
private UnmanagedMethods.TimeCallback timerDelegate; |
||||
|
|
||||
|
public RenderLoop(int framesPerSecond) |
||||
|
: base(framesPerSecond) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
protected override IDisposable StartCore(Action tick) |
||||
|
{ |
||||
|
timerDelegate = (id, uMsg, user, dw1, dw2) => tick(); |
||||
|
|
||||
|
var handle = UnmanagedMethods.timeSetEvent( |
||||
|
(uint)(1000 / FramesPerSecond), |
||||
|
0, |
||||
|
timerDelegate, |
||||
|
UIntPtr.Zero, |
||||
|
1); |
||||
|
|
||||
|
return Disposable.Create(() => |
||||
|
{ |
||||
|
timerDelegate = null; |
||||
|
UnmanagedMethods.timeKillEvent(handle); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue