Fixed crash after disposing RenderWindow or RenderImage instances, in SFML.Net

git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1637 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
LaurentGom 2010-11-13 18:59:06 +00:00
parent 5421f1c42f
commit d69903765b
2 changed files with 15 additions and 6 deletions

View File

@ -374,6 +374,7 @@ namespace SFML
internal Image(IntPtr thisPtr) : internal Image(IntPtr thisPtr) :
base(thisPtr) base(thisPtr)
{ {
myExternal = true;
} }
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -384,15 +385,20 @@ namespace SFML
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
protected override void Destroy(bool disposing) protected override void Destroy(bool disposing)
{ {
if (!disposing) if (!myExternal)
Context.Global.SetActive(true); {
if (!disposing)
Context.Global.SetActive(true);
sfImage_Destroy(This); sfImage_Destroy(This);
if (!disposing) if (!disposing)
Context.Global.SetActive(false); Context.Global.SetActive(false);
}
} }
bool myExternal = false;
#region Imports #region Imports
[DllImport("csfml-graphics-2", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] [DllImport("csfml-graphics-2", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
static extern IntPtr sfImage_CreateFromColor(uint Width, uint Height, Color Col); static extern IntPtr sfImage_CreateFromColor(uint Width, uint Height, Color Col);

View File

@ -173,6 +173,7 @@ namespace SFML
internal View(IntPtr thisPtr) : internal View(IntPtr thisPtr) :
base(thisPtr) base(thisPtr)
{ {
myExternal = true;
} }
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -183,9 +184,11 @@ namespace SFML
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
protected override void Destroy(bool disposing) protected override void Destroy(bool disposing)
{ {
sfView_Destroy(This); if (!myExternal)
sfView_Destroy(This);
} }
private bool myExternal = false;
#region Imports #region Imports
[DllImport("csfml-graphics-2", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] [DllImport("csfml-graphics-2", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
static extern IntPtr sfView_Create(); static extern IntPtr sfView_Create();