From 17904326f3cd5141452d5448c06a174292cb494c Mon Sep 17 00:00:00 2001 From: ww-rm Date: Wed, 26 Mar 2025 13:10:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtex=E8=B7=A8=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Exporter/Exporter.cs | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) 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(); }