fixed issue #524 ("Sprites are disappearing after some frames")
This commit is contained in:
parent
7b9a23b1b6
commit
5eaba32696
@ -445,7 +445,7 @@
|
||||
<Compile Include="NonXNA\RenderSystem\INativeGraphicsDevice.cs" />
|
||||
<Compile Include="NonXNA\RenderSystem\IRenderSystemCreator.cs" />
|
||||
<Compile Include="NonXNA\ResourceTracker\GraphicsResourceTracker.cs" />
|
||||
<Compile Include="NonXNA\ResourceTracker\WeakReference.cs" />
|
||||
<None Include="NonXNA\ResourceTracker\WeakReference.cs" />
|
||||
<Compile Include="NonXNA\SoundSystem\ISoundSystemCreator.cs" />
|
||||
<Compile Include="Plane.cs" />
|
||||
<Compile Include="PlaneIntersectionType.cs" />
|
||||
|
@ -60,7 +60,7 @@ namespace ANX.Framework.Graphics
|
||||
public class Effect : GraphicsResource, IGraphicsResource
|
||||
{
|
||||
#region Private Members
|
||||
private WeakReference<INativeEffect> nativeEffect;
|
||||
private INativeEffect nativeEffect;
|
||||
private EffectTechniqueCollection techniqueCollection;
|
||||
private EffectTechnique currentTechnique;
|
||||
private EffectParameterCollection parameterCollection;
|
||||
@ -96,9 +96,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void GraphicsDevice_ResourceCreated(object sender, ResourceCreatedEventArgs e)
|
||||
{
|
||||
if (nativeEffect.IsAlive)
|
||||
if (nativeEffect != null)
|
||||
{
|
||||
nativeEffect.Target.Dispose();
|
||||
nativeEffect.Dispose();
|
||||
nativeEffect = null;
|
||||
}
|
||||
|
||||
CreateNativeEffect();
|
||||
@ -106,9 +107,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void GraphicsDevice_ResourceDestroyed(object sender, ResourceDestroyedEventArgs e)
|
||||
{
|
||||
if (nativeEffect.IsAlive)
|
||||
if (nativeEffect != null)
|
||||
{
|
||||
nativeEffect.Target.Dispose();
|
||||
nativeEffect.Dispose();
|
||||
nativeEffect = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -121,12 +123,12 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!nativeEffect.IsAlive)
|
||||
if (nativeEffect == null)
|
||||
{
|
||||
CreateNativeEffect();
|
||||
}
|
||||
|
||||
return this.nativeEffect.Target;
|
||||
return this.nativeEffect;
|
||||
}
|
||||
}
|
||||
|
||||
@ -160,9 +162,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
if (nativeEffect.IsAlive)
|
||||
if (nativeEffect != null)
|
||||
{
|
||||
nativeEffect.Target.Dispose();
|
||||
nativeEffect.Dispose();
|
||||
nativeEffect = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -173,10 +176,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void CreateNativeEffect()
|
||||
{
|
||||
this.nativeEffect = new WeakReference<INativeEffect>(AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateEffect(GraphicsDevice, this, new MemoryStream(this.byteCode, false)));
|
||||
this.nativeEffect = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateEffect(GraphicsDevice, this, new MemoryStream(this.byteCode, false));
|
||||
|
||||
this.techniqueCollection = new EffectTechniqueCollection(this, this.nativeEffect.Target);
|
||||
this.parameterCollection = new EffectParameterCollection(this, this.nativeEffect.Target);
|
||||
this.techniqueCollection = new EffectTechniqueCollection(this, this.nativeEffect);
|
||||
this.parameterCollection = new EffectParameterCollection(this, this.nativeEffect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ namespace ANX.Framework.Graphics
|
||||
private int indexCount;
|
||||
private BufferUsage bufferUsage;
|
||||
private IndexElementSize indexElementSize;
|
||||
private WeakReference<INativeBuffer> nativeIndexBuffer;
|
||||
private INativeBuffer nativeIndexBuffer;
|
||||
|
||||
public IndexBuffer(GraphicsDevice graphicsDevice, IndexElementSize indexElementSize, int indexCount, BufferUsage usage)
|
||||
: base(graphicsDevice)
|
||||
@ -107,17 +107,19 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void GraphicsDevice_ResourceDestroyed(object sender, ResourceDestroyedEventArgs e)
|
||||
{
|
||||
if (this.nativeIndexBuffer.IsAlive)
|
||||
if (this.nativeIndexBuffer != null)
|
||||
{
|
||||
this.nativeIndexBuffer.Target.Dispose();
|
||||
this.nativeIndexBuffer.Dispose();
|
||||
this.nativeIndexBuffer = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void GraphicsDevice_ResourceCreated(object sender, ResourceCreatedEventArgs e)
|
||||
{
|
||||
if (nativeIndexBuffer.IsAlive)
|
||||
if (nativeIndexBuffer != null)
|
||||
{
|
||||
nativeIndexBuffer.Target.Dispose();
|
||||
nativeIndexBuffer.Dispose();
|
||||
nativeIndexBuffer = null;
|
||||
}
|
||||
|
||||
CreateNativeBuffer();
|
||||
@ -125,7 +127,7 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void CreateNativeBuffer()
|
||||
{
|
||||
this.nativeIndexBuffer = new WeakReference<INativeBuffer>(AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateIndexBuffer(GraphicsDevice, indexElementSize, indexCount, bufferUsage));
|
||||
this.nativeIndexBuffer = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateIndexBuffer(GraphicsDevice, indexElementSize, indexCount, bufferUsage);
|
||||
}
|
||||
|
||||
public void GetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
||||
@ -145,22 +147,22 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public void SetData<T>(int offsetInBytes, T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
if (!nativeIndexBuffer.IsAlive)
|
||||
if (nativeIndexBuffer == null)
|
||||
{
|
||||
CreateNativeBuffer();
|
||||
}
|
||||
|
||||
this.nativeIndexBuffer.Target.SetData<T>(GraphicsDevice, offsetInBytes, data, startIndex, elementCount);
|
||||
this.nativeIndexBuffer.SetData<T>(GraphicsDevice, offsetInBytes, data, startIndex, elementCount);
|
||||
}
|
||||
|
||||
public void SetData<T>(T[] data) where T : struct
|
||||
{
|
||||
if (!nativeIndexBuffer.IsAlive)
|
||||
if (nativeIndexBuffer == null)
|
||||
{
|
||||
CreateNativeBuffer();
|
||||
}
|
||||
|
||||
this.nativeIndexBuffer.Target.SetData<T>(GraphicsDevice, data);
|
||||
this.nativeIndexBuffer.SetData<T>(GraphicsDevice, data);
|
||||
}
|
||||
|
||||
public void SetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
@ -170,9 +172,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
if (this.nativeIndexBuffer.IsAlive)
|
||||
if (this.nativeIndexBuffer != null)
|
||||
{
|
||||
this.nativeIndexBuffer.Target.Dispose();
|
||||
this.nativeIndexBuffer.Dispose();
|
||||
this.nativeIndexBuffer = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -182,12 +185,12 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!nativeIndexBuffer.IsAlive)
|
||||
if (nativeIndexBuffer == null)
|
||||
{
|
||||
CreateNativeBuffer();
|
||||
}
|
||||
|
||||
return this.nativeIndexBuffer.Target;
|
||||
return this.nativeIndexBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,7 @@ namespace ANX.Framework.Graphics
|
||||
this.usage = RenderTargetUsage.DiscardContents;
|
||||
|
||||
this.nativeRenderTarget = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateRenderTarget(graphicsDevice, width, height, false, SurfaceFormat.Color, this.depthStencilFormat, this.multiSampleCount, this.usage);
|
||||
base.nativeTexture = new WeakReference<INativeTexture>(this.nativeRenderTarget as INativeTexture2D);
|
||||
base.nativeTexture = this.nativeRenderTarget as INativeTexture2D;
|
||||
}
|
||||
|
||||
public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat)
|
||||
@ -97,7 +97,7 @@ namespace ANX.Framework.Graphics
|
||||
this.usage = RenderTargetUsage.DiscardContents;
|
||||
|
||||
this.nativeRenderTarget = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateRenderTarget(graphicsDevice, width, height, false, SurfaceFormat.Color, this.depthStencilFormat, this.multiSampleCount, this.usage);
|
||||
base.nativeTexture = new WeakReference<INativeTexture>(this.nativeRenderTarget as INativeTexture2D);
|
||||
base.nativeTexture = this.nativeRenderTarget as INativeTexture2D;
|
||||
}
|
||||
|
||||
public RenderTarget2D(GraphicsDevice graphicsDevice, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
@ -108,7 +108,7 @@ namespace ANX.Framework.Graphics
|
||||
this.usage = usage;
|
||||
|
||||
this.nativeRenderTarget = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateRenderTarget(graphicsDevice, width, height, false, SurfaceFormat.Color, this.depthStencilFormat, this.multiSampleCount, this.usage);
|
||||
base.nativeTexture = new WeakReference<INativeTexture>(this.nativeRenderTarget as INativeTexture2D);
|
||||
base.nativeTexture = this.nativeRenderTarget as INativeTexture2D;
|
||||
}
|
||||
|
||||
#endregion // Constructors
|
||||
|
@ -58,7 +58,7 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
protected internal int levelCount;
|
||||
protected internal SurfaceFormat format;
|
||||
protected internal WeakReference<INativeTexture> nativeTexture;
|
||||
protected internal INativeTexture nativeTexture;
|
||||
|
||||
public Texture(GraphicsDevice graphicsDevice)
|
||||
: base(graphicsDevice)
|
||||
@ -93,12 +93,12 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!this.nativeTexture.IsAlive)
|
||||
if (this.nativeTexture == null)
|
||||
{
|
||||
ReCreateNativeTextureSurface();
|
||||
}
|
||||
|
||||
return this.nativeTexture.Target;
|
||||
return this.nativeTexture;
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,9 +109,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
protected override void Dispose(bool disposeManaged)
|
||||
{
|
||||
if (disposeManaged && nativeTexture.IsAlive)
|
||||
if (disposeManaged && nativeTexture != null)
|
||||
{
|
||||
nativeTexture.Target.Dispose();
|
||||
nativeTexture.Dispose();
|
||||
nativeTexture = null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,17 +120,19 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void GraphicsDevice_ResourceDestroyed(object sender, ResourceDestroyedEventArgs e)
|
||||
{
|
||||
if (nativeTexture.IsAlive)
|
||||
if (nativeTexture != null)
|
||||
{
|
||||
nativeTexture.Target.Dispose();
|
||||
nativeTexture.Dispose();
|
||||
nativeTexture = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void GraphicsDevice_ResourceCreated(object sender, ResourceCreatedEventArgs e)
|
||||
{
|
||||
if (nativeTexture.IsAlive)
|
||||
if (nativeTexture != null)
|
||||
{
|
||||
nativeTexture.Target.Dispose();
|
||||
nativeTexture.Dispose();
|
||||
nativeTexture = null;
|
||||
}
|
||||
|
||||
ReCreateNativeTextureSurface();
|
||||
|
@ -184,7 +184,7 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
internal void CreateNativeTextureSurface(GraphicsDevice device, SurfaceFormat format, int width, int height, int levelCount)
|
||||
{
|
||||
base.nativeTexture = new WeakReference<INativeTexture>(AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateTexture(device, format, width, height, levelCount));
|
||||
base.nativeTexture = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateTexture(device, format, width, height, levelCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ namespace ANX.Framework.Graphics
|
||||
private VertexDeclaration vertexDeclaration;
|
||||
private int vertexCount;
|
||||
private BufferUsage bufferUsage;
|
||||
private WeakReference<INativeBuffer> nativeVertexBuffer;
|
||||
private INativeBuffer nativeVertexBuffer;
|
||||
|
||||
public VertexBuffer(GraphicsDevice graphicsDevice, Type vertexType, int vertexCount, BufferUsage usage)
|
||||
: this(graphicsDevice, VertexBuffer.TypeToVertexDeclaration(vertexType), vertexCount, usage)
|
||||
@ -90,17 +90,19 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void GraphicsDevice_ResourceDestroyed(object sender, ResourceDestroyedEventArgs e)
|
||||
{
|
||||
if (nativeVertexBuffer.IsAlive)
|
||||
if (nativeVertexBuffer != null)
|
||||
{
|
||||
nativeVertexBuffer.Target.Dispose();
|
||||
nativeVertexBuffer.Dispose();
|
||||
nativeVertexBuffer = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void GraphicsDevice_ResourceCreated(object sender, ResourceCreatedEventArgs e)
|
||||
{
|
||||
if (nativeVertexBuffer.IsAlive)
|
||||
if (nativeVertexBuffer != null)
|
||||
{
|
||||
nativeVertexBuffer.Target.Dispose();
|
||||
nativeVertexBuffer.Dispose();
|
||||
nativeVertexBuffer = null;
|
||||
}
|
||||
|
||||
CreateNativeBuffer();
|
||||
@ -108,7 +110,7 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
private void CreateNativeBuffer()
|
||||
{
|
||||
this.nativeVertexBuffer = new WeakReference<INativeBuffer>(AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateVertexBuffer(GraphicsDevice, vertexDeclaration, vertexCount, bufferUsage));
|
||||
this.nativeVertexBuffer = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateVertexBuffer(GraphicsDevice, vertexDeclaration, vertexCount, bufferUsage);
|
||||
}
|
||||
|
||||
public BufferUsage BufferUsage
|
||||
@ -158,22 +160,22 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public void SetData<T>(T[] data) where T : struct
|
||||
{
|
||||
if (!this.nativeVertexBuffer.IsAlive)
|
||||
if (this.nativeVertexBuffer == null)
|
||||
{
|
||||
CreateNativeBuffer();
|
||||
}
|
||||
|
||||
this.nativeVertexBuffer.Target.SetData<T>(GraphicsDevice, data);
|
||||
this.nativeVertexBuffer.SetData<T>(GraphicsDevice, data);
|
||||
}
|
||||
|
||||
public void SetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
||||
{
|
||||
if (!this.nativeVertexBuffer.IsAlive)
|
||||
if (this.nativeVertexBuffer == null)
|
||||
{
|
||||
CreateNativeBuffer();
|
||||
}
|
||||
|
||||
this.nativeVertexBuffer.Target.SetData<T>(GraphicsDevice, data, startIndex, elementCount);
|
||||
this.nativeVertexBuffer.SetData<T>(GraphicsDevice, data, startIndex, elementCount);
|
||||
}
|
||||
|
||||
private static VertexDeclaration TypeToVertexDeclaration(Type t)
|
||||
@ -189,9 +191,10 @@ namespace ANX.Framework.Graphics
|
||||
|
||||
public override void Dispose()
|
||||
{
|
||||
if (nativeVertexBuffer.IsAlive)
|
||||
if (nativeVertexBuffer != null)
|
||||
{
|
||||
nativeVertexBuffer.Target.Dispose();
|
||||
nativeVertexBuffer.Dispose();
|
||||
nativeVertexBuffer = null;
|
||||
}
|
||||
|
||||
if (vertexDeclaration != null)
|
||||
@ -207,12 +210,12 @@ namespace ANX.Framework.Graphics
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!this.nativeVertexBuffer.IsAlive)
|
||||
if (this.nativeVertexBuffer == null)
|
||||
{
|
||||
CreateNativeBuffer();
|
||||
}
|
||||
|
||||
return this.nativeVertexBuffer.Target;
|
||||
return this.nativeVertexBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user