git.iko.soy/metal-metaballs
on master help sign in
Refactored init, remove protocol conformance (now useless).
commitb66689047425ca51d35928dd407c00496ad352cc authorvinivendra <vinivendra@gmail.com> dateWed 10 Feb 2016, 21:02 (11 years ago) parent82d0808
2 files changed+14−16
PixelImage/MetalMetaballRenderer.swift+13−12 PixelImage/ViewController.swift+1−4
PixelImage/MetalMetaballRenderer.swift+13−12
@@ -11,7 +11,7 @@ import UIKit
1111
1212var i = 0
1313
14−class MetalMetaballRenderer: MetaballRenderer {
14+class MetalMetaballRenderer {
1515
1616 typealias TargetView = UIImageView
1717
@@ -20,10 +20,10 @@ class MetalMetaballRenderer: MetaballRenderer {
2020 }
2121 }
2222
23− let targetView = TargetView()
23+ let targetView: TargetView
2424
2525 let context = MTLContext()
26− var computeContext: MTLComputeContext!
26+ var computeContext: MTLComputeContext
2727
2828 let dataSource: MetaballDataSource
2929
@@ -46,8 +46,17 @@ class MetalMetaballRenderer: MetaballRenderer {
4646 }
4747 }
4848
49− required init(dataSource: MetaballDataSource) {
49+ required init(dataSource: MetaballDataSource, frame: CGRect) {
5050 self.dataSource = dataSource
51+
52+ targetView = TargetView(frame: frame)
53+
54+ let width = Int(frame.width)
55+ let height = Int(frame.height)
56+ let textureDescriptor =
57+ MTLTextureDescriptor.texture2DDescriptorWithPixelFormat(.BGRA8Unorm, width: width, height: height, mipmapped: false)
58+ let texture = context.device.newTextureWithDescriptor(textureDescriptor)
59+ computeContext = MTLComputeContext(size: targetView.size, texture: texture)
5160 }
5261
5362 func updateTargetView() {
@@ -81,14 +90,6 @@ class MetalMetaballRenderer: MetaballRenderer {
8190 let width = Int(targetView.width)
8291 let height = Int(targetView.height)
8392
84− if computeContext == nil {
85− let textureDescriptor =
86− MTLTextureDescriptor.texture2DDescriptorWithPixelFormat(.BGRA8Unorm, width: width, height: height, mipmapped: false)
87−
88− let texture = context.device.newTextureWithDescriptor(textureDescriptor)
89− computeContext = MTLComputeContext(size: targetView.size, texture: texture)
90− }
91−
9293 let kernelFunction: MTLFunction?
9394 let pipeline: MTLComputePipelineState
9495 do {
PixelImage/ViewController.swift+1−4
@@ -20,16 +20,13 @@ class ViewController: UIViewController, MetaballDataSource {
2020 override func viewDidLoad() {
2121 super.viewDidLoad()
2222
23− renderer = Renderer(dataSource: self)
24−
2523 let recognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
2624 view.addGestureRecognizer(recognizer)
2725
28−
2926 let border = 20
3027 let metaballViewFrame = CGRect(x: border/2, y: border/2, width: width, height: height)
28+ renderer = Renderer(dataSource: self, frame: metaballViewFrame)
3129 metaballView = renderer.targetView
32− metaballView.frame = metaballViewFrame
3330
3431 let bigView = UIView(frame: CGRect(x: 10, y: 70, width: width + border, height: height + border))
3532 bigView.backgroundColor = UIColor.redColor()