work around memory leak in captureOSD; probable original cause: SysdrawingRenderPanel
This commit is contained in:
parent
56f58caf4d
commit
c8849a8422
|
@ -3358,6 +3358,12 @@ namespace BizHawk.MultiClient
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// workaround for possible memory leak in SysdrawingRenderPanel
|
||||||
|
RetainedViewportPanel captureosd_rvp;
|
||||||
|
SysdrawingRenderPanel captureosd_srp;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// sort of like MakeScreenShot(), but with OSD and LUA captured as well. slow and bad.
|
/// sort of like MakeScreenShot(), but with OSD and LUA captured as well. slow and bad.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -3368,18 +3374,20 @@ namespace BizHawk.MultiClient
|
||||||
// "dummy render" class that implements IRenderer, IBlitter, and possibly
|
// "dummy render" class that implements IRenderer, IBlitter, and possibly
|
||||||
// IVideoProvider, and pass that to DisplayManager.UpdateSourceEx()
|
// IVideoProvider, and pass that to DisplayManager.UpdateSourceEx()
|
||||||
|
|
||||||
var c = new RetainedViewportPanel();
|
if (captureosd_rvp == null)
|
||||||
|
{
|
||||||
|
captureosd_rvp = new RetainedViewportPanel();
|
||||||
|
captureosd_srp = new SysdrawingRenderPanel(captureosd_rvp);
|
||||||
|
}
|
||||||
|
|
||||||
// this size can be different for showing off stretching or filters
|
// this size can be different for showing off stretching or filters
|
||||||
c.Width = Global.Emulator.VideoProvider.BufferWidth;
|
captureosd_rvp.Width = Global.Emulator.VideoProvider.BufferWidth;
|
||||||
c.Height = Global.Emulator.VideoProvider.BufferHeight;
|
captureosd_rvp.Height = Global.Emulator.VideoProvider.BufferHeight;
|
||||||
var s = new SysdrawingRenderPanel(c);
|
|
||||||
|
|
||||||
Global.DisplayManager.UpdateSourceEx(Global.Emulator.VideoProvider, s);
|
|
||||||
|
|
||||||
Bitmap ret = (Bitmap)c.GetBitmap().Clone();
|
Global.DisplayManager.UpdateSourceEx(Global.Emulator.VideoProvider, captureosd_srp);
|
||||||
|
|
||||||
s.Dispose();
|
Bitmap ret = (Bitmap)captureosd_rvp.GetBitmap().Clone();
|
||||||
c.Dispose();
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue