SHA256
Move Memory Copy Handling from Main Thread to Render Thread
This commit is contained in:
1 parent
459b2f3b0e
commit
036216c006
2 files changed
+68
-25
No files matched your search
+18
-14
@@ -91,28 +91,32 @@ namespace ADOFAIRenderer.Util
|
||||
var byteSize = state.NativeBuffer.Length;
|
||||
var blackFrame = ArrayPool<byte>.Shared.Rent(byteSize);
|
||||
Array.Clear(blackFrame, 0, byteSize);
|
||||
PushToQueue(frame, blackFrame);
|
||||
|
||||
var capFrame = new RenderManager.CapturedFrame
|
||||
{
|
||||
ManagedBuffer = blackFrame,
|
||||
Length = byteSize
|
||||
};
|
||||
PushToQueue(frame, capFrame);
|
||||
RecycleState(state);
|
||||
}
|
||||
else
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
var ptr = state.NativeBuffer.GetUnsafeReadOnlyPtr();
|
||||
var rawBytes = FFmpegProcess.RentRawBytes(state.NativeBuffer.Length);
|
||||
|
||||
fixed (byte* destPtr = rawBytes)
|
||||
var ptr = (IntPtr)state.NativeBuffer.GetUnsafeReadOnlyPtr();
|
||||
var capFrame = new RenderManager.CapturedFrame
|
||||
{
|
||||
Buffer.MemoryCopy(ptr, destPtr, rawBytes.Length, state.NativeBuffer.Length);
|
||||
}
|
||||
|
||||
PushToQueue(frame, rawBytes);
|
||||
NativePointer = ptr,
|
||||
Length = state.NativeBuffer.Length,
|
||||
ReadbackState = state
|
||||
};
|
||||
PushToQueue(frame, capFrame);
|
||||
}
|
||||
}
|
||||
|
||||
RecycleState(state);
|
||||
}
|
||||
|
||||
private void RecycleState(ReadbackRequestState state)
|
||||
internal void RecycleState(ReadbackRequestState state)
|
||||
{
|
||||
lock (_poolLock)
|
||||
{
|
||||
@@ -127,12 +131,12 @@ namespace ADOFAIRenderer.Util
|
||||
}
|
||||
}
|
||||
|
||||
private static void PushToQueue(long frame, byte[] rawBytes)
|
||||
private static void PushToQueue(long frame, RenderManager.CapturedFrame capturedFrame)
|
||||
{
|
||||
if (!RenderManager.Instance) return;
|
||||
lock (RenderManager.Instance.ImageQueue)
|
||||
{
|
||||
RenderManager.Instance.ImageQueue[frame] = rawBytes;
|
||||
RenderManager.Instance.ImageQueue[frame] = capturedFrame;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user