改善性能

This commit is contained in:
ww-rm
2025-11-02 14:22:00 +08:00
parent 10b691d897
commit dc2f6a2dad
3 changed files with 41 additions and 37 deletions

View File

@@ -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>

View File

@@ -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)

View File

@@ -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">