改善性能
This commit is contained in:
@@ -31,6 +31,21 @@ namespace SpineViewer.ViewModels.MainWindow
|
|||||||
|
|
||||||
public string Title => $"SpineViewer - v{App.Version}";
|
public string Title => $"SpineViewer - v{App.Version}";
|
||||||
|
|
||||||
|
public Visibility Visibility
|
||||||
|
{
|
||||||
|
get => _visibility;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (SetProperty(ref _visibility, value))
|
||||||
|
{
|
||||||
|
OnPropertyChanged(nameof(IsVisible));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private Visibility _visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
public bool IsVisible => _visibility == Visibility.Visible;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 指示是否通过托盘图标进行退出
|
/// 指示是否通过托盘图标进行退出
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -484,21 +484,17 @@ namespace SpineViewer.ViewModels.MainWindow
|
|||||||
_forwardDelta = 0;
|
_forwardDelta = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
using var v = _renderer.GetView();
|
using var view = _renderer.GetView();
|
||||||
_renderer.Clear(_backgroundColor);
|
_wallpaperRenderer.SetView(view);
|
||||||
|
|
||||||
if (_wallpaperView)
|
if (_vmMain.IsVisible) _renderer.Clear(_backgroundColor);
|
||||||
{
|
if (_wallpaperView) _wallpaperRenderer.Clear(_backgroundColor);
|
||||||
_wallpaperRenderer.SetView(v);
|
|
||||||
_wallpaperRenderer.Clear(_backgroundColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 渲染背景
|
// 渲染背景
|
||||||
lock (_bgLock)
|
lock (_bgLock)
|
||||||
{
|
{
|
||||||
if (_backgroundImageSprite is not null)
|
if (_backgroundImageSprite is not null)
|
||||||
{
|
{
|
||||||
using var view = _renderer.GetView();
|
|
||||||
var bg = _backgroundImageSprite;
|
var bg = _backgroundImageSprite;
|
||||||
var viewSize = view.Size;
|
var viewSize = view.Size;
|
||||||
var bgSize = bg.Texture.Size;
|
var bgSize = bg.Texture.Size;
|
||||||
@@ -521,16 +517,13 @@ namespace SpineViewer.ViewModels.MainWindow
|
|||||||
bg.Scale = new(signX * scaleX, signY * scaleY);
|
bg.Scale = new(signX * scaleX, signY * scaleY);
|
||||||
bg.Position = view.Center;
|
bg.Position = view.Center;
|
||||||
bg.Rotation = view.Rotation;
|
bg.Rotation = view.Rotation;
|
||||||
_renderer.Draw(bg);
|
|
||||||
|
|
||||||
if (_wallpaperView)
|
if (_vmMain.IsVisible) _renderer.Draw(bg);
|
||||||
{
|
if (_wallpaperView) _wallpaperRenderer.Draw(bg);
|
||||||
_wallpaperRenderer.Draw(bg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_showAxis)
|
if (_showAxis && _vmMain.IsVisible)
|
||||||
{
|
{
|
||||||
// 画一个很长的坐标轴, 用 1e9 比较合适
|
// 画一个很长的坐标轴, 用 1e9 比较合适
|
||||||
_axisVertices[0] = new(new(-1e9f, 0), _axisColor);
|
_axisVertices[0] = new(new(-1e9f, 0), _axisColor);
|
||||||
@@ -551,35 +544,30 @@ namespace SpineViewer.ViewModels.MainWindow
|
|||||||
sp.Update(0); // 避免物理效果出现问题
|
sp.Update(0); // 避免物理效果出现问题
|
||||||
sp.Update(delta * _speed);
|
sp.Update(delta * _speed);
|
||||||
|
|
||||||
// 为选中对象绘制一个半透明背景
|
if (_vmMain.IsVisible)
|
||||||
if (sp.IsSelected)
|
|
||||||
{
|
{
|
||||||
var rc = sp.GetCurrentBounds().ToFloatRect();
|
// 为选中对象绘制一个半透明背景
|
||||||
_selectedBackgroundVertices[0] = new(new(rc.Left, rc.Top), _selectedBackgroundColor);
|
if (sp.IsSelected)
|
||||||
_selectedBackgroundVertices[1] = new(new(rc.Left + rc.Width, rc.Top), _selectedBackgroundColor);
|
{
|
||||||
_selectedBackgroundVertices[2] = new(new(rc.Left + rc.Width, rc.Top + rc.Height), _selectedBackgroundColor);
|
var rc = sp.GetCurrentBounds().ToFloatRect();
|
||||||
_selectedBackgroundVertices[3] = new(new(rc.Left, rc.Top + rc.Height), _selectedBackgroundColor);
|
_selectedBackgroundVertices[0] = new(new(rc.Left, rc.Top), _selectedBackgroundColor);
|
||||||
_renderer.Draw(_selectedBackgroundVertices);
|
_selectedBackgroundVertices[1] = new(new(rc.Left + rc.Width, rc.Top), _selectedBackgroundColor);
|
||||||
}
|
_selectedBackgroundVertices[2] = new(new(rc.Left + rc.Width, rc.Top + rc.Height), _selectedBackgroundColor);
|
||||||
|
_selectedBackgroundVertices[3] = new(new(rc.Left, rc.Top + rc.Height), _selectedBackgroundColor);
|
||||||
|
_renderer.Draw(_selectedBackgroundVertices);
|
||||||
|
}
|
||||||
|
|
||||||
// 仅在预览画面临时启用调试模式
|
// 仅在预览画面临时启用调试模式
|
||||||
sp.EnableDebug = true;
|
sp.EnableDebug = true;
|
||||||
_renderer.Draw(sp);
|
_renderer.Draw(sp);
|
||||||
sp.EnableDebug = false;
|
sp.EnableDebug = false;
|
||||||
|
|
||||||
if (_wallpaperView)
|
|
||||||
{
|
|
||||||
_wallpaperRenderer.Draw(sp);
|
|
||||||
}
|
}
|
||||||
|
if (_wallpaperView) _wallpaperRenderer.Draw(sp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_renderer.Display();
|
if (_vmMain.IsVisible) _renderer.Display();
|
||||||
|
if (_wallpaperView) _wallpaperRenderer.Display();
|
||||||
if (_wallpaperView)
|
|
||||||
{
|
|
||||||
_wallpaperRenderer.Display();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
Height="720"
|
Height="720"
|
||||||
Background="{DynamicResource RegionBrush}"
|
Background="{DynamicResource RegionBrush}"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
|
Visibility="{Binding Visibility, Mode=OneWayToSource}"
|
||||||
PreviewKeyDown="MainWindow_PreviewKeyDown"
|
PreviewKeyDown="MainWindow_PreviewKeyDown"
|
||||||
LocationChanged="MainWindow_LocationChanged"
|
LocationChanged="MainWindow_LocationChanged"
|
||||||
SizeChanged="MainWindow_SizeChanged">
|
SizeChanged="MainWindow_SizeChanged">
|
||||||
|
|||||||
Reference in New Issue
Block a user