add SFMLRenderWindow

This commit is contained in:
ww-rm
2025-09-27 18:20:06 +08:00
parent 66223f952b
commit b74f2811a7
8 changed files with 398 additions and 68 deletions

View File

@@ -17,9 +17,10 @@ namespace SpineViewer.ViewModels.MainWindow
{
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
public MainWindowViewModel(ISFMLRenderer sfmlRenderer)
public MainWindowViewModel(ISFMLRenderer sfmlRenderer, ISFMLRenderer wallpaperRenderer)
{
_sfmlRenderer = sfmlRenderer;
_wallpaperRenderer = wallpaperRenderer;
_explorerListViewModel = new(this);
_spineObjectListViewModel = new(this);
_sfmlRendererViewModel = new(this);
@@ -34,6 +35,9 @@ namespace SpineViewer.ViewModels.MainWindow
public ISFMLRenderer SFMLRenderer => _sfmlRenderer;
private readonly ISFMLRenderer _sfmlRenderer;
public ISFMLRenderer WallpaperRenderer => _wallpaperRenderer;
private readonly ISFMLRenderer _wallpaperRenderer;
public TaskbarItemProgressState ProgressState { get => _progressState; set => SetProperty(ref _progressState, value); }
private TaskbarItemProgressState _progressState = TaskbarItemProgressState.None;
@@ -133,19 +137,5 @@ namespace SpineViewer.ViewModels.MainWindow
_spineObjectListViewModel.LoadedSpineObjects = value.LoadedSpineObjects;
}
}
/// <summary>
/// 调试命令
/// </summary>
public RelayCommand Cmd_Debug => _cmd_Debug ??= new(Debug_Execute);
private RelayCommand? _cmd_Debug;
private void Debug_Execute()
{
#if DEBUG
MessagePopupService.Quest("测试一下");
#endif
}
}
}

View File

@@ -35,6 +35,7 @@ namespace SpineViewer.ViewModels.MainWindow
private readonly MainWindowViewModel _vmMain;
private readonly ObservableCollectionWithLock<SpineObjectModel> _models;
private readonly ISFMLRenderer _renderer;
private readonly ISFMLRenderer _wallpaperRenderer;
/// <summary>
/// 被选中对象的背景颜色
@@ -90,6 +91,7 @@ namespace SpineViewer.ViewModels.MainWindow
_vmMain = vmMain;
_models = _vmMain.SpineObjects;
_renderer = _vmMain.SFMLRenderer;
_wallpaperRenderer = _vmMain.WallpaperRenderer;
}
/// <summary>
@@ -443,6 +445,7 @@ namespace SpineViewer.ViewModels.MainWindow
{
try
{
_wallpaperRenderer.SetActive(true);
_renderer.SetActive(true);
float delta;
@@ -461,7 +464,11 @@ namespace SpineViewer.ViewModels.MainWindow
_forwardDelta = 0;
}
using var v = _renderer.GetView();
_wallpaperRenderer.SetView(v);
_renderer.Clear(_backgroundColor);
_wallpaperRenderer.Clear(_backgroundColor);
// 渲染背景
lock (_bgLock)
@@ -492,6 +499,7 @@ namespace SpineViewer.ViewModels.MainWindow
bg.Position = view.Center;
bg.Rotation = view.Rotation;
_renderer.Draw(bg);
_wallpaperRenderer.Draw(bg);
}
}
@@ -531,10 +539,12 @@ namespace SpineViewer.ViewModels.MainWindow
sp.EnableDebug = true;
_renderer.Draw(sp);
sp.EnableDebug = false;
_wallpaperRenderer.Draw(sp);
}
}
_renderer.Display();
_wallpaperRenderer.Display();
}
}
catch (Exception ex)
@@ -546,6 +556,7 @@ namespace SpineViewer.ViewModels.MainWindow
finally
{
_renderer.SetActive(false);
_wallpaperRenderer.SetActive(false);
}
}