diff --git a/SpineViewer/Exporter/Exporter.cs b/SpineViewer/Exporter/Exporter.cs
index a03f412..88890b9 100644
--- a/SpineViewer/Exporter/Exporter.cs
+++ b/SpineViewer/Exporter/Exporter.cs
@@ -53,11 +53,6 @@ namespace SpineViewer.Exporter
///
public ExportArgs ExportArgs { get; }
- ///
- /// 渲染目标
- ///
- private SFML.Graphics.RenderTexture tex;
-
///
/// 可用于文件名的时间戳字符串
///
@@ -69,11 +64,24 @@ namespace SpineViewer.Exporter
timestamp = DateTime.Now.ToString("yyMMddHHmmss");
}
+ ///
+ /// 获取供渲染的 SFML.Graphics.RenderTexture
+ ///
+ private SFML.Graphics.RenderTexture GetRenderTexture()
+ {
+ var tex = new SFML.Graphics.RenderTexture((uint)ExportArgs.Resolution.Width, (uint)ExportArgs.Resolution.Height);
+ tex.Clear(SFML.Graphics.Color.Transparent);
+ tex.SetView(ExportArgs.View);
+ return tex;
+ }
+
///
/// 获取单个模型的单帧画面
///
protected SFMLImageVideoFrame GetFrame(Spine.Spine spine)
{
+ // tex 必须临时创建, 随用随取, 防止出现跨线程的情况
+ using var tex = GetRenderTexture();
tex.Clear(SFML.Graphics.Color.Transparent);
tex.Draw(spine);
tex.Display();
@@ -85,6 +93,8 @@ namespace SpineViewer.Exporter
///
protected SFMLImageVideoFrame GetFrame(Spine.Spine[] spinesToRender)
{
+ // tex 必须临时创建, 随用随取, 防止出现跨线程的情况
+ using var tex = GetRenderTexture();
tex.Clear(SFML.Graphics.Color.Transparent);
foreach (var spine in spinesToRender) tex.Draw(spine);
tex.Display();
@@ -110,15 +120,8 @@ namespace SpineViewer.Exporter
{
var spinesToRender = spines.Where(sp => !ExportArgs.RenderSelectedOnly || sp.IsSelected).Reverse().ToArray();
- // tex 必须临时创建, 防止出现跨线程的情况
- using (tex = new SFML.Graphics.RenderTexture((uint)ExportArgs.Resolution.Width, (uint)ExportArgs.Resolution.Height))
- {
- tex.Clear(SFML.Graphics.Color.Transparent);
- tex.SetView(ExportArgs.View);
- if (ExportArgs.ExportSingle) ExportSingle(spinesToRender, worker);
- else ExportIndividual(spinesToRender, worker);
- }
- tex = null;
+ if (ExportArgs.ExportSingle) ExportSingle(spinesToRender, worker);
+ else ExportIndividual(spinesToRender, worker);
Program.LogCurrentMemoryUsage();
}