Browse Source

Metal: Moving auto release pool inside renderer. Issue #1269.

Branimir Karadžić 7 years ago
parent
commit
54c2ccf31e
2 changed files with 13 additions and 6 deletions
  1. 1 4
      examples/common/entry/entry_osx.mm
  2. 12 2
      src/renderer_mtl.mm

+ 1 - 4
examples/common/entry/entry_osx.mm

@@ -459,10 +459,7 @@ namespace entry
 
 			while (!(m_exit = [dg applicationHasTerminated]) )
 			{
-				@autoreleasepool
-				{
-					bgfx::renderFrame();
-				}
+				bgfx::renderFrame();
 
 				while (dispatchEvent(peekEvent() ) )
 				{

+ 12 - 2
src/renderer_mtl.mm

@@ -612,11 +612,16 @@ namespace bgfx { namespace mtl
 			m_gpuTimer.init();
 
 			g_internalData.context = m_device;
+
+			m_pool = [[NSAutoreleasePool alloc] init];
+
 			return true;
 		}
 
 		void shutdown()
 		{
+			[m_pool release];
+
 			m_occlusionQuery.postReset();
 			m_gpuTimer.shutdown();
 
@@ -1107,8 +1112,8 @@ namespace bgfx { namespace mtl
 			for (uint32_t ii = 0, num = m_numWindows; ii < num; ++ii)
 			{
 				FrameBufferMtl& frameBuffer = ii == 0 ? m_mainFrameBuffer : m_frameBuffers[m_windows[ii].idx];
-				if (NULL != frameBuffer.m_swapChain &&
-					frameBuffer.m_swapChain->m_drawable)
+				if (NULL != frameBuffer.m_swapChain
+				&&  frameBuffer.m_swapChain->m_drawable)
 				{
 					m_commandBuffer.presentDrawable(frameBuffer.m_swapChain->m_drawable);
 					MTL_RELEASE(frameBuffer.m_swapChain->m_drawable);
@@ -1117,6 +1122,9 @@ namespace bgfx { namespace mtl
 
 			m_cmd.kick(true);
 			m_commandBuffer = 0;
+
+			[m_pool release];
+			m_pool = [[NSAutoreleasePool alloc] init];
 		}
 
 		void updateResolution(const Resolution& _resolution)
@@ -2179,6 +2187,8 @@ namespace bgfx { namespace mtl
 		BlitCommandEncoder   m_blitCommandEncoder;
 		RenderCommandEncoder m_renderCommandEncoder;
 		FrameBufferHandle    m_renderCommandEncoderFrameBufferHandle;
+
+		NSAutoreleasePool*   m_pool;
 	};
 
 	RendererContextI* rendererCreate(const Init& _init)