fix leaky textures & vbos
This commit is contained in:
@@ -33,6 +33,9 @@ namespace OpenRA.Renderer.Cg
|
|||||||
GraphicsDevice.CheckGlError();
|
GraphicsDevice.CheckGlError();
|
||||||
SetData(bitmap);
|
SetData(bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FinalizeInner() { Gl.glDeleteTextures( 1, ref texture ); }
|
||||||
|
~Texture() { Game.RunAfterTick( FinalizeInner ); }
|
||||||
|
|
||||||
void PrepareTexture()
|
void PrepareTexture()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,13 +9,14 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using OpenRA.FileFormats.Graphics;
|
using OpenRA.FileFormats.Graphics;
|
||||||
using Tao.OpenGl;
|
using Tao.OpenGl;
|
||||||
|
|
||||||
namespace OpenRA.Renderer.Cg
|
namespace OpenRA.Renderer.Cg
|
||||||
{
|
{
|
||||||
public class VertexBuffer<T> : IVertexBuffer<T>, IDisposable
|
public class VertexBuffer<T> : IVertexBuffer<T>
|
||||||
where T : struct
|
where T : struct
|
||||||
{
|
{
|
||||||
int buffer;
|
int buffer;
|
||||||
@@ -31,6 +32,9 @@ namespace OpenRA.Renderer.Cg
|
|||||||
Gl.GL_DYNAMIC_DRAW);
|
Gl.GL_DYNAMIC_DRAW);
|
||||||
GraphicsDevice.CheckGlError();
|
GraphicsDevice.CheckGlError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FinalizeInner() { Gl.glDeleteBuffers( 1, ref buffer ); }
|
||||||
|
~VertexBuffer() { Game.RunAfterTick( FinalizeInner ); }
|
||||||
|
|
||||||
public void SetData(T[] data, int length)
|
public void SetData(T[] data, int length)
|
||||||
{
|
{
|
||||||
@@ -51,17 +55,5 @@ namespace OpenRA.Renderer.Cg
|
|||||||
Gl.glTexCoordPointer(4, Gl.GL_FLOAT, Marshal.SizeOf(typeof(T)), new IntPtr(12));
|
Gl.glTexCoordPointer(4, Gl.GL_FLOAT, Marshal.SizeOf(typeof(T)), new IntPtr(12));
|
||||||
GraphicsDevice.CheckGlError();
|
GraphicsDevice.CheckGlError();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool disposed;
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
if (disposed) return;
|
|
||||||
GC.SuppressFinalize(this);
|
|
||||||
Gl.glDeleteBuffers(1, ref buffer);
|
|
||||||
GraphicsDevice.CheckGlError();
|
|
||||||
disposed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//~VertexBuffer() { Dispose(); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ namespace OpenRA.Renderer.Glsl
|
|||||||
SetData(bitmap);
|
SetData(bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FinalizeInner() { UpdateMemoryUsage(0); Gl.glDeleteTextures(1, ref texture); }
|
||||||
|
~Texture() { Game.RunAfterTick(FinalizeInner); }
|
||||||
|
|
||||||
void PrepareTexture()
|
void PrepareTexture()
|
||||||
{
|
{
|
||||||
GraphicsDevice.CheckGlError();
|
GraphicsDevice.CheckGlError();
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using Tao.OpenGl;
|
|||||||
|
|
||||||
namespace OpenRA.Renderer.Glsl
|
namespace OpenRA.Renderer.Glsl
|
||||||
{
|
{
|
||||||
public class VertexBuffer<T> : IVertexBuffer<T>, IDisposable
|
public class VertexBuffer<T> : IVertexBuffer<T>
|
||||||
where T : struct
|
where T : struct
|
||||||
{
|
{
|
||||||
int buffer;
|
int buffer;
|
||||||
@@ -52,16 +52,7 @@ namespace OpenRA.Renderer.Glsl
|
|||||||
GraphicsDevice.CheckGlError();
|
GraphicsDevice.CheckGlError();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool disposed;
|
void FinalizeInner() { Gl.glDeleteBuffers( 1, ref buffer ); }
|
||||||
public void Dispose()
|
~VertexBuffer() { Game.RunAfterTick( FinalizeInner ); }
|
||||||
{
|
|
||||||
if (disposed) return;
|
|
||||||
GC.SuppressFinalize(this);
|
|
||||||
Gl.glDeleteBuffers(1, ref buffer);
|
|
||||||
GraphicsDevice.CheckGlError();
|
|
||||||
disposed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//~VertexBuffer() { Dispose(); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user