The WpfEditor doesn't create a new device anymore every time it receives focus. StateObjects get recreated if the used device changes and they get disposed if the parent GraphicsDevice gets disposed.
65 lines
1.8 KiB
C#
65 lines
1.8 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Windows;
|
|
using System.Windows.Threading;
|
|
using ANX.Framework;
|
|
using ANX.Framework.Graphics;
|
|
using ANX.Framework.NonXNA;
|
|
|
|
// This file is part of the ANX.Framework created by the
|
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
|
// For details see: http://anxframework.codeplex.com/license
|
|
|
|
namespace WpfEditor
|
|
{
|
|
public partial class MainWindow
|
|
{
|
|
private GraphicsDevice device;
|
|
private readonly ThreadStart emptyThreadStart;
|
|
|
|
public MainWindow()
|
|
{
|
|
//AddInSystemFactory.Instance.SetPreferredSystem(AddInType.RenderSystem, "OpenGL3");
|
|
AddInSystemFactory.Instance.SetPreferredSystem(AddInType.RenderSystem, "DirectX10");
|
|
|
|
InitializeComponent();
|
|
emptyThreadStart = delegate { };
|
|
}
|
|
|
|
protected override void OnInitialized(EventArgs e)
|
|
{
|
|
base.OnInitialized(e);
|
|
|
|
device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef,
|
|
new PresentationParameters
|
|
{
|
|
BackBufferWidth = GamePanel.Width,
|
|
BackBufferHeight = GamePanel.Height,
|
|
BackBufferFormat = SurfaceFormat.Color,
|
|
DeviceWindowHandle = new WindowHandle(GamePanel.Handle),
|
|
PresentationInterval = PresentInterval.Default,
|
|
});
|
|
}
|
|
|
|
protected override void OnActivated(EventArgs e)
|
|
{
|
|
base.OnActivated(e);
|
|
|
|
while (IsVisible && IsActive)
|
|
{
|
|
if (Application.Current != null)
|
|
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, emptyThreadStart);
|
|
|
|
Tick();
|
|
}
|
|
}
|
|
|
|
public void Tick()
|
|
{
|
|
device.Clear(ClearOptions.Target, Color.CornflowerBlue, 0f, 0);
|
|
|
|
device.Present();
|
|
}
|
|
}
|
|
}
|