静态化SharpDX.Direct3D11.Device的实例、恢复GraphicsCapture.cs的Stop方法中被注释的清理frame的代码,以期降低WGC反复启停的时观察到的内存泄漏;WGC方法传入的截图似乎是4通道的,paddle吃不进,故做4转3处理 (#1386)

This commit is contained in:
FishmanTheMurloc
2025-04-02 21:39:56 +08:00
committed by GitHub
parent 0fb59b19ef
commit 057efe78a9
3 changed files with 26 additions and 13 deletions

View File

@@ -312,18 +312,18 @@ public class GraphicsCapture : IGameCapture
IsCapturing = false;
// 释放最新帧
// _frameAccessLock.EnterWriteLock();
// try
// {
// _latestFrame?.Dispose();
// _latestFrame = null;
// }
// finally
// {
// _frameAccessLock.ExitWriteLock();
// }
//
// _frameAccessLock.Dispose();
_frameAccessLock.EnterWriteLock();
try
{
_latestFrame?.Dispose();
_latestFrame = null;
}
finally
{
_frameAccessLock.ExitWriteLock();
}
_frameAccessLock.Dispose();
}
private void CaptureItemOnClosed(GraphicsCaptureItem sender, object args)

View File

@@ -46,9 +46,11 @@ public static class Direct3D11Helper
return CreateDevice(false);
}
private static SharpDX.Direct3D11.Device? d3dDevice;
public static IDirect3DDevice CreateDevice(bool useWARP)
{
var d3dDevice = new SharpDX.Direct3D11.Device(
d3dDevice ??= new SharpDX.Direct3D11.Device(
useWARP ? SharpDX.Direct3D.DriverType.Software : SharpDX.Direct3D.DriverType.Hardware,
SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport);
var device = CreateDirect3DDeviceFromSharpDXDevice(d3dDevice);