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