fix leaky textures & vbos

This commit is contained in:
Chris Forbes
2011-05-05 19:16:45 +12:00
parent 75588b050e
commit a52d7fb496
4 changed files with 14 additions and 25 deletions

View File

@@ -33,6 +33,9 @@ namespace OpenRA.Renderer.Cg
GraphicsDevice.CheckGlError();
SetData(bitmap);
}
void FinalizeInner() { Gl.glDeleteTextures( 1, ref texture ); }
~Texture() { Game.RunAfterTick( FinalizeInner ); }
void PrepareTexture()
{

View File

@@ -9,13 +9,14 @@
#endregion
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using OpenRA.FileFormats.Graphics;
using Tao.OpenGl;
namespace OpenRA.Renderer.Cg
{
public class VertexBuffer<T> : IVertexBuffer<T>, IDisposable
public class VertexBuffer<T> : IVertexBuffer<T>
where T : struct
{
int buffer;
@@ -31,6 +32,9 @@ namespace OpenRA.Renderer.Cg
Gl.GL_DYNAMIC_DRAW);
GraphicsDevice.CheckGlError();
}
void FinalizeInner() { Gl.glDeleteBuffers( 1, ref buffer ); }
~VertexBuffer() { Game.RunAfterTick( FinalizeInner ); }
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));
GraphicsDevice.CheckGlError();
}
bool disposed;
public void Dispose()
{
if (disposed) return;
GC.SuppressFinalize(this);
Gl.glDeleteBuffers(1, ref buffer);
GraphicsDevice.CheckGlError();
disposed = true;
}
//~VertexBuffer() { Dispose(); }
}
}