From 9c8ed11ac68fdac8ae44049e258bee2049a44c23 Mon Sep 17 00:00:00 2001 From: Matej Jan Date: Tue, 23 Oct 2012 21:03:00 +0000 Subject: [PATCH] Fixed buffers that didn't clean up after themselves. git-svn-id: http://xni.googlecode.com/svn/XNI@123 ac433895-eea3-a490-d80a-17149a75e588 --- .../Xni/Framework/Graphics/GraphicsDevice+Internal.h | 3 ++- Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m | 3 +++ Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m | 6 ++++++ Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h index 1db44e2..8e90b3c 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h @@ -22,7 +22,8 @@ - (uint) createBuffer; - (void) setData:(void*)data toIndexBuffer:(IndexBuffer*)buffer; -- (void) setData:(void*)data toVertexBuffer:(VertexBuffer*)buffer; +- (void) setData:(void*)data toVertexBuffer:(VertexBuffer*)buffer; +- (void) releaseBuffer:(uint)bufferId; // Profile specific - (EAGLContext*) createContext; diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m index 4c2d194..c9737e5 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m @@ -408,6 +408,9 @@ glBindBuffer(resourceType, 0); } +- (void)releaseBuffer:(uint)bufferId { + glDeleteBuffers(1, &bufferId); +} // Profile specific diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m index 06b71d8..79d14a0 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m @@ -39,5 +39,11 @@ [graphicsDevice setData:data.array toIndexBuffer:self]; } +- (void)dealloc +{ + [graphicsDevice releaseBuffer:bufferID]; + [super dealloc]; +} + @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m index 27af588..5536e44 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m @@ -41,6 +41,7 @@ - (void) dealloc { + [graphicsDevice releaseBuffer:bufferID]; [vertexDeclaration release]; [super dealloc]; }