Improve RenderManager Object Structure

This commit is contained in:
copecone committed 2026-05-28 13:12:42 +09:00
1 parent 0a798de45c
commit d4b9e4b89c
10 files changed
+130 -108

No files matched your search

+16 -13
View File
@@ -86,18 +86,18 @@ namespace ADOFAIRenderer
{
if (SkipCount < 60)
{
Melon<RenderMod>.Logger.Warning($"[Render Skipped] Frame {RenderManager.FrameCount} rendering missed. Retrying... (Attempt {SkipCount + 1}/60)");
Melon<RenderMod>.Logger.Warning($"[Render Skipped] Frame {RenderManager.Instance.frameCount} rendering missed. Retrying... (Attempt {SkipCount + 1}/60)");
SkipCount++;
Time.timeScale = 0f; // 진행 시간 멈추기 (재시도)
return; // 업데이트 진행하지 않고 대기
}
// 60회 초과 시 최후의 블랙 프레임 삽입하여 전체 파이프라인 마비 방지
Melon<RenderMod>.Logger.Error($"[Render Skipped] Frame {RenderManager.FrameCount} rendering failed after 60 retries. Supplying black frame.");
Melon<RenderMod>.Logger.Error($"[Render Skipped] Frame {RenderManager.Instance.frameCount} rendering failed after 60 retries. Supplying black frame.");
var currentFrame = FrameCountForVideo++;
var targetFps = RenderManager.Configuration.TargetFPS;
var videoFps = RenderManager.Configuration.VideoFPS;
var targetFps = RenderManager.Instance.Configuration.TargetFPS;
var videoFps = RenderManager.Instance.Configuration.VideoFPS;
var effectiveVideoFps = Math.Min(videoFps, targetFps);
var videoFrameIndex = (long)(currentFrame * effectiveVideoFps / targetFps);
@@ -106,13 +106,13 @@ namespace ADOFAIRenderer
LastVideoFrameIndex = videoFrameIndex;
LastRequestedVideoFrameIndex = videoFrameIndex;
var byteSize = RenderManager.Configuration.RenderWidth * RenderManager.Configuration.RenderHeight * 4;
var byteSize = RenderManager.Instance.Configuration.RenderWidth * RenderManager.Instance.Configuration.RenderHeight * 4;
var blackFrame = System.Buffers.ArrayPool<byte>.Shared.Rent(byteSize);
Array.Clear(blackFrame, 0, byteSize);
lock (RenderManager.ImageQueue)
lock (RenderManager.Instance.ImageQueue)
{
RenderManager.ImageQueue[videoFrameIndex] = blackFrame;
RenderManager.Instance.ImageQueue[videoFrameIndex] = blackFrame;
}
}
@@ -121,7 +121,7 @@ namespace ADOFAIRenderer
SkipCount = 0;
RenderCheck = true; // 다음 프레임 검사용으로 초기화
RenderManager.FrameCount++;
RenderManager.Instance.frameCount++;
if (realDeltaTime > 0)
{
@@ -150,9 +150,9 @@ namespace ADOFAIRenderer
while (IsCapturing && IsRendering)
{
int count;
lock (RenderManager.ImageQueue)
lock (RenderManager.Instance.ImageQueue)
{
count = RenderManager.ImageQueue.Count;
count = RenderManager.Instance.ImageQueue.Count;
}
if (count <= maxQueuedFrames) break;
@@ -168,8 +168,8 @@ namespace ADOFAIRenderer
var currentFrame = FrameCountForVideo++;
var targetFps = RenderManager.Configuration.TargetFPS;
var videoFps = RenderManager.Configuration.VideoFPS;
var targetFps = RenderManager.Instance.Configuration.TargetFPS;
var videoFps = RenderManager.Instance.Configuration.VideoFPS;
var effectiveVideoFps = Math.Min(videoFps, targetFps);
var videoFrameIndex = (long)(currentFrame * effectiveVideoFps / targetFps);
@@ -227,7 +227,10 @@ namespace ADOFAIRenderer
return;
}
RenderManager.LevelPath = ADOBase.levelPath;
if (RenderManager.Instance)
{
RenderManager.Instance.levelPath = ADOBase.levelPath;
}
scnEditor.instance.CheckUnsavedChanges(() =>
{