From 1a5ed92c14311c22e0758485e77c1acb75498edb Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Wed, 7 Nov 2018 17:05:28 -0500 Subject: [PATCH] Regeneration on ever 'n' now, but it gets scheduled on every frame in that semaphore group --- Terrain2/Renderer.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Terrain2/Renderer.swift b/Terrain2/Renderer.swift index 5cbcd72..8f9796c 100644 --- a/Terrain2/Renderer.swift +++ b/Terrain2/Renderer.swift @@ -170,10 +170,13 @@ class Renderer: NSObject, MTKViewDelegate { _ = inFlightSemaphore.wait(timeout: DispatchTime.distantFuture) if let commandBuffer = commandQueue.makeCommandBuffer() { - let semaphore = inFlightSemaphore + var didScheduleAlgorithmIteration = false + let inFlightSem = self.inFlightSemaphore commandBuffer.addCompletedHandler { (_ commandBuffer)-> Swift.Void in - self.iterateTerrainAlgorithm = false - semaphore.signal() + if didScheduleAlgorithmIteration && self.iterateTerrainAlgorithm { + self.iterateTerrainAlgorithm = false + } + inFlightSem.signal() } self.updateDynamicBufferState() @@ -187,6 +190,7 @@ class Renderer: NSObject, MTKViewDelegate { terrain.algorithm.encode(in: computeEncoder) computeEncoder.popDebugGroup() computeEncoder.endEncoding() + didScheduleAlgorithmIteration = true } /// Delay getting the currentRenderPassDescriptor until we absolutely need it to avoid