[Metaballs] The ViewController is the bridge between the Field and the Renderer
This commit is contained in:
parent
ea3638d12c
commit
e971d0dbca
1 changed files with 48 additions and 7 deletions
|
@ -7,21 +7,62 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
import MetalKit
|
||||||
|
import MetaballsKit
|
||||||
|
|
||||||
class ViewController: NSViewController {
|
class ViewController: NSViewController, RendererDelegate {
|
||||||
|
private var field = Field(size: CGSize()) {
|
||||||
|
didSet {
|
||||||
|
field.size = metalView.drawableSize
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var renderer: Renderer!
|
||||||
|
|
||||||
|
private var metalView: MTKView! {
|
||||||
|
return self.view as! MTKView
|
||||||
|
}
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
// Do any additional setup after loading the view.
|
guard let metalView = metalView else {
|
||||||
|
view = newErrorView()
|
||||||
|
print("self.view should be an MTKView; got \(type(of: self.view)) instead")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
renderer = try Renderer(view: metalView, field: field)
|
||||||
|
} catch let e {
|
||||||
|
print("\(e)")
|
||||||
|
view = newErrorView()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
metalView.delegate = renderer
|
||||||
}
|
}
|
||||||
|
|
||||||
override var representedObject: Any? {
|
override func viewWillAppear() {
|
||||||
didSet {
|
super.viewWillAppear()
|
||||||
// Update the view, if already loaded.
|
renderer.mtkView(metalView, drawableSizeWillChange: metalView.drawableSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func newErrorView() -> NSView {
|
||||||
|
let view = NSView()
|
||||||
|
view.layer?.backgroundColor = NSColor.red.cgColor
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - RendererDelegate
|
||||||
|
|
||||||
|
var renderSize: CGSize {
|
||||||
|
get {
|
||||||
|
return field.size
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
field.size = newValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue