Wrap algorithm iteration flag in a semaphore
This commit is contained in:
parent
1a5ed92c14
commit
7343f0a83a
2 changed files with 13 additions and 3 deletions
|
@ -56,7 +56,7 @@ class GameViewController: NSViewController {
|
|||
print("key down: \(String(describing: event.charactersIgnoringModifiers))")
|
||||
switch event.charactersIgnoringModifiers {
|
||||
case .some("n"):
|
||||
renderer.iterateTerrainAlgorithm = true
|
||||
renderer.scheduleAlgorithmIteration()
|
||||
default:
|
||||
super.keyDown(with: event)
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ class Renderer: NSObject, MTKViewDelegate {
|
|||
var colorMap: MTLTexture
|
||||
|
||||
let inFlightSemaphore = DispatchSemaphore(value: maxBuffersInFlight)
|
||||
let regenerationSemaphore = DispatchSemaphore(value: 1)
|
||||
|
||||
var uniformBufferOffset = 0
|
||||
|
||||
|
@ -45,7 +46,7 @@ class Renderer: NSObject, MTKViewDelegate {
|
|||
|
||||
var terrain: Terrain
|
||||
|
||||
var iterateTerrainAlgorithm = true
|
||||
private var iterateTerrainAlgorithm = true
|
||||
|
||||
init?(metalKitView: MTKView) {
|
||||
self.device = metalKitView.device!
|
||||
|
@ -139,6 +140,12 @@ class Renderer: NSObject, MTKViewDelegate {
|
|||
|
||||
}
|
||||
|
||||
func scheduleAlgorithmIteration() {
|
||||
regenerationSemaphore.wait()
|
||||
iterateTerrainAlgorithm = true
|
||||
regenerationSemaphore.signal()
|
||||
}
|
||||
|
||||
private func updateDynamicBufferState() {
|
||||
/// Update the state of our uniform buffers before rendering
|
||||
|
||||
|
@ -168,14 +175,17 @@ class Renderer: NSObject, MTKViewDelegate {
|
|||
/// Per frame updates hare
|
||||
|
||||
_ = inFlightSemaphore.wait(timeout: DispatchTime.distantFuture)
|
||||
_ = regenerationSemaphore.wait(timeout: DispatchTime.distantFuture)
|
||||
|
||||
if let commandBuffer = commandQueue.makeCommandBuffer() {
|
||||
var didScheduleAlgorithmIteration = false
|
||||
let inFlightSem = self.inFlightSemaphore
|
||||
let inFlightSem = inFlightSemaphore
|
||||
let regenSem = regenerationSemaphore
|
||||
commandBuffer.addCompletedHandler { (_ commandBuffer)-> Swift.Void in
|
||||
if didScheduleAlgorithmIteration && self.iterateTerrainAlgorithm {
|
||||
self.iterateTerrainAlgorithm = false
|
||||
}
|
||||
regenSem.signal()
|
||||
inFlightSem.signal()
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue