Make sure Direct3D objects get disposed. Fixes all SlimDX warnings when exiting.
This commit is contained in:
parent
1096e1bc5a
commit
0b81463408
|
@ -107,6 +107,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
foreach (var f in ShaderChainFrugalizers)
|
||||
if (f != null)
|
||||
f.Dispose();
|
||||
foreach (var s in new [] { ShaderChain_hq2x, ShaderChain_scanlines, ShaderChain_bicubic, ShaderChain_user })
|
||||
if (s != null)
|
||||
s.Dispose();
|
||||
TheOneFont.Dispose();
|
||||
Renderer.Dispose();
|
||||
}
|
||||
|
||||
//rendering resources:
|
||||
|
|
|
@ -79,7 +79,10 @@ namespace BizHawk.Client.EmuHawk.Filters
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
//todo
|
||||
if (_isDisposed) return;
|
||||
foreach (var s in Shaders)
|
||||
s.Dispose();
|
||||
_isDisposed = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -92,6 +95,8 @@ namespace BizHawk.Client.EmuHawk.Filters
|
|||
public readonly RetroShaderPreset Preset;
|
||||
public readonly RetroShader[] Shaders;
|
||||
public readonly RetroShaderPreset.ShaderPass[] Passes;
|
||||
|
||||
private bool _isDisposed;
|
||||
}
|
||||
|
||||
public class RetroShaderPreset
|
||||
|
|
|
@ -181,6 +181,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
Renderer = new BizHawk.Bizware.BizwareGL.GuiRenderer(GlobalWin.GL);
|
||||
else
|
||||
Renderer = new BizHawk.Bizware.BizwareGL.Drivers.GdiPlus.GDIPlusGuiRenderer((BizHawk.Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus)GlobalWin.GL);
|
||||
Renderer.Dispose();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
|
|
|
@ -131,6 +131,7 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX
|
|||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
devBB.Dispose();
|
||||
ResetHandlers.Reset();
|
||||
DestroyDevice();
|
||||
d3d.Dispose();
|
||||
|
@ -163,7 +164,7 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX
|
|||
tw.Texture.Dispose();
|
||||
}
|
||||
|
||||
class ShaderWrapper : IDisposable
|
||||
class ShaderWrapper // Disposable fields cleaned up by Internal_FreeShader
|
||||
{
|
||||
public d3d9.ShaderBytecode bytecode;
|
||||
public d3d9.VertexShader vs;
|
||||
|
@ -171,15 +172,6 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX
|
|||
public Shader IGLShader;
|
||||
public Dictionary<string, string> MapCodeToNative;
|
||||
public Dictionary<string, string> MapNativeToCode;
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
vs.Dispose();
|
||||
vs = null;
|
||||
ps.Dispose();
|
||||
bytecode.Dispose();
|
||||
bytecode = null;
|
||||
}
|
||||
}
|
||||
|
||||
public Shader CreateFragmentShader(bool cg, string source, string entry, bool required)
|
||||
|
@ -527,6 +519,7 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX
|
|||
{
|
||||
var pw = pipeline.Opaque as PipelineWrapper;
|
||||
|
||||
pw.VertexDeclaration.Dispose();
|
||||
pw.FragmentShader.IGLShader.Release();
|
||||
pw.VertexShader.IGLShader.Release();
|
||||
}
|
||||
|
@ -548,7 +541,7 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX
|
|||
public int SamplerIndex;
|
||||
}
|
||||
|
||||
class PipelineWrapper
|
||||
class PipelineWrapper // Disposable fields cleaned up in FreePipeline
|
||||
{
|
||||
public d3d9.VertexDeclaration VertexDeclaration;
|
||||
public ShaderWrapper VertexShader, FragmentShader;
|
||||
|
|
Loading…
Reference in New Issue