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]; }