diff --git a/Component/RenderManager.cs b/Component/RenderManager.cs index 9367fdc..a33c425 100644 --- a/Component/RenderManager.cs +++ b/Component/RenderManager.cs @@ -22,7 +22,8 @@ namespace ADOFAIRenderer.Component private static GameObject? _debugMonitorObj; private static GameObject? _escapeHandlerObj; private static string? _currentOutPath; - + + private static bool _isRenderCancelled = false; public static RenderSettings Configuration; public struct RenderSettings @@ -291,6 +292,11 @@ namespace ADOFAIRenderer.Component continue; } + if (_isRenderCancelled) + { + break; + } + if (EndRequested) { bool hasMore; @@ -319,6 +325,8 @@ namespace ADOFAIRenderer.Component public void CancelRender() { RenderMod.IsRendering = RenderMod.IsCapturing = false; + _isRenderCancelled = true; + StopFFmpeg(false); EndRender(); } @@ -353,6 +361,8 @@ namespace ADOFAIRenderer.Component } ImageQueue.Clear(); } + + RenderMod.FrameReader?.Dispose(); // 디버그 모니터 UI 정리 if (_debugMonitorObj) @@ -423,6 +433,7 @@ namespace ADOFAIRenderer.Component GCS.customLevelPaths = null; GCS.customLevelId = null; + RenderMod.FrameReader?.Dispose(); ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "scnEditor"); } } diff --git a/Util/FrameReader.cs b/Util/FrameReader.cs index 695d47d..992e6bc 100644 --- a/Util/FrameReader.cs +++ b/Util/FrameReader.cs @@ -104,6 +104,12 @@ namespace ADOFAIRenderer.Util private void RecycleState(ReadbackRequestState state) { + if (!_isInitialized) + { + state.Dispose(); + return; + } + state.Recycle(); lock (_poolLock) {