diff --git a/Core/RenderManager.cs b/Core/RenderManager.cs index a420e50..a380ffd 100644 --- a/Core/RenderManager.cs +++ b/Core/RenderManager.cs @@ -15,7 +15,6 @@ using ADOFAIRenderer.Util.FFmpeg; using FFmpeg.AutoGen; using HarmonyLib; using MelonLoader; -using MelonLoader.Utils; using UnityEngine; using UnityEngine.Rendering; using Random = UnityEngine.Random; @@ -73,7 +72,6 @@ internal class RenderManager : MonoBehaviour public static bool IsCapturingActive => Instance && Instance.IsCapturing; public const int MaxQueuedFrames = 64; - public const int MaxRenderRetry = 64; // Statistics public long framesSent; @@ -100,8 +98,6 @@ internal class RenderManager : MonoBehaviour private AudioSyncCalculator SyncCalculator { get; set; } = null!; private FrameReader? _frameReader; - public bool renderCheck = true; - public int skipCount; public long frameCountForVideo; public long lastVideoFrameIndex = -1; @@ -277,52 +273,6 @@ internal class RenderManager : MonoBehaviour public void OnPreUpdate() { if (!IsRendering) return; - - // [Retry logic when frame rendering is skipped due to lag (ported from original mod)] - if (renderCheck && IsCapturing) - { - if (skipCount < MaxRenderRetry) - { - Melon.Logger.Warning($"[Render Skipped] Frame {frameCount} rendering missed. Retrying... (Attempt {skipCount + 1}/{MaxRenderRetry})"); - skipCount++; - Time.timeScale = 0f; // Pause progress time (retry) - return; // Wait without advancing update - } - - // If retries exceed limit, supply a fallback black frame to prevent freezing the pipeline - Melon.Logger.Error($"[Render Skipped] Frame {frameCount} rendering failed after 60 retries. Supplying black frame."); - - var currentFrame = frameCountForVideo++; - var renderFPS = Configuration.RenderFPS; - var videoFPS = Configuration.VideoFPS; - var effectiveVideoFps = Math.Min(videoFPS, renderFPS); - var videoFrameIndex = (long)(currentFrame * effectiveVideoFps / renderFPS); - - if (videoFrameIndex > lastVideoFrameIndex) - { - lastVideoFrameIndex = videoFrameIndex; - lastRequestedVideoFrameIndex = videoFrameIndex; - - var byteSize = Configuration.RenderWidth * Configuration.RenderHeight * 4; - var blackFrame = ArrayPool.Shared.Rent(byteSize); - Array.Clear(blackFrame, 0, byteSize); - - lock (ImageQueue) - { - ImageQueue[videoFrameIndex] = new CapturedFrame - { - ManagedBuffer = blackFrame, - Length = byteSize - }; - } - FrameAvailableEvent.Set(); - } - - renderCheck = false; // Allow progress - } - - skipCount = 0; - renderCheck = true; // Reset for next frame check frameCount++; } @@ -344,8 +294,6 @@ internal class RenderManager : MonoBehaviour { if (!IsCapturing || !texture) return; - renderCheck = false; // Normal rendering complete for this frame - // [Backpressure Throttling] isThrottling = false; @@ -511,8 +459,6 @@ internal class RenderManager : MonoBehaviour frameCountForVideo = 0; lastVideoFrameIndex = -1; lastRequestedVideoFrameIndex = -1; - renderCheck = true; - skipCount = 0; endRequested = false; endSuccessful = false; FrameAvailableEvent.Reset(); diff --git a/UI/DebugMonitorUI.cs b/UI/DebugMonitorUI.cs index dd17841..8710c8b 100644 --- a/UI/DebugMonitorUI.cs +++ b/UI/DebugMonitorUI.cs @@ -205,7 +205,6 @@ internal class DebugMonitorUI : MonoBehaviour sb.AppendLine(); sb.AppendLine($"• Throttling Controls: {(RenderManager.Instance ? RenderManager.Instance.throttleCount : 0)} times"); sb.AppendLine($"• Readback Hard Failures: {(RenderManager.Instance ? RenderManager.Instance.readbackFailureCount : 0)} times"); - sb.AppendLine($"• Render Skip-Retry: {(RenderManager.Instance ? RenderManager.Instance.skipCount : 0)} / {RenderManager.MaxRenderRetry}"); var memoryMb = GC.GetTotalMemory(false) / (1024.0 * 1024.0); sb.AppendLine($"• Mono Heap Memory: {memoryMb:F2} MB"); diff --git a/Util/StreamUtil.cs b/Util/StreamUtil.cs deleted file mode 100644 index cafa744..0000000 --- a/Util/StreamUtil.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.IO; -using MelonLoader; - -namespace ADOFAIRenderer.Util -{ - internal static class StreamUtil - { - public static void WriteNativePtrToStream(IntPtr nativePtr, int length, Stream destinationStream) - { - if (nativePtr == IntPtr.Zero) - throw new ArgumentNullException(nameof(nativePtr)); - if (length <= 0) return; - - unsafe - { - try - { - var span = new ReadOnlySpan((void*)nativePtr, length); - destinationStream.Write(span); - } - catch (IOException err) - { - Melon.Logger.Error($"FFmpeg pipe closed unexpectedly: {err.Message}"); - } - } - } - } -} \ No newline at end of file