git.iko.soy/metal-metaballs
on master help sign in
Refactored MetaballRenderer to manage instances instead of classes.
commite66dd09a4644b4d3cd0f1b5d9e337e42bba399da authorvinivendra <vinivendra@gmail.com> dateWed 10 Feb 2016, 13:26 (11 years ago) parent22a5e76
5 files changed+13−12
PixelImage.xcodeproj/project.xcworkspace/xcuserdata/vini.xcuserdatad/UserInterfaceState.xcuserstate PixelImage/ImageMetaballRenderer.swift+1−1 PixelImage/MetaballRenderer.swift+2−2 PixelImage/MetalMetaballRenderer.swift+5−5 PixelImage/ViewController.swift+5−4
PixelImage.xcodeproj/project.xcworkspace/xcuserdata/vini.xcuserdatad/UserInterfaceState.xcuserstate

Binary file not shown.

PixelImage/ImageMetaballRenderer.swift+1−1
@@ -4,7 +4,7 @@ import UIKit
44class ImageMetaballRenderer: MetaballRenderer {
55 typealias TargetView = UIImageView
66
7− static func updateTargetView(imageView: TargetView, dataSource: MetaballDataSource) {
7+ func updateTargetView(imageView: TargetView, dataSource: MetaballDataSource) {
88 let width = Int(imageView.width)
99 let height = Int(imageView.height)
1010 let metaballs = dataSource.metaballs
PixelImage/MetaballRenderer.swift+2−2
@@ -8,11 +8,11 @@ protocol MetaballDataSource {
88protocol MetaballRenderer {
99 typealias TargetView: UIView
1010
11− static func updateTargetView(targetView: TargetView, dataSource: MetaballDataSource)
11+ func updateTargetView(targetView: TargetView, dataSource: MetaballDataSource)
1212}
1313
1414extension MetaballRenderer {
15− static func createTargetView(frame frame: CGRect) -> TargetView {
15+ func createTargetView(frame frame: CGRect) -> TargetView {
1616 return TargetView(frame: frame)
1717 }
1818}
PixelImage/MetalMetaballRenderer.swift+5−5
@@ -20,10 +20,10 @@ class MetalMetaballRenderer: MetaballRenderer {
2020
2121 typealias TargetView = UIImageView
2222
23− static let context = MTLContext()
24− static var internalTexture: MTLTexture!
23+ let context = MTLContext()
24+ var internalTexture: MTLTexture!
2525
26− static func updateTargetView(imageView: UIImageView, dataSource: MetaballDataSource) {
26+ func updateTargetView(imageView: UIImageView, dataSource: MetaballDataSource) {
2727 let metaballs = dataSource.metaballs
2828
2929 let width = Int(imageView.width)
@@ -72,7 +72,7 @@ class MetalMetaballRenderer: MetaballRenderer {
7272 imageView.image = image(texture: internalTexture)
7373 }
7474
75− static func image(texture texture: MTLTexture) -> UIImage {
75+ func image(texture texture: MTLTexture) -> UIImage {
7676 let imageSize = CGSizeMake(CGFloat(texture.width),
7777 CGFloat(texture.height))
7878
@@ -109,7 +109,7 @@ class MetalMetaballRenderer: MetaballRenderer {
109109 return image
110110 }
111111
112− static func metaballTexture(metaballs: [Metaball]) -> MTLTexture {
112+ func metaballTexture(metaballs: [Metaball]) -> MTLTexture {
113113 let floats: [Float] = metaballs.reduce([Float(metaballs.count)]) { (var array, metaball) -> [Float] in
114114 array.append(Float(metaball.midX))
115115 array.append(Float(metaball.midY))
PixelImage/ViewController.swift+5−4
@@ -8,6 +8,7 @@ class ViewController: UIViewController, MetaballDataSource {
88 typealias TargetView = Renderer.TargetView
99
1010 var metaballView: TargetView!
11+ let renderer = Renderer()
1112
1213 let width = 350
1314 let height = 600
@@ -27,7 +28,7 @@ class ViewController: UIViewController, MetaballDataSource {
2728
2829 let border = 20
2930 let metaballViewFrame = CGRect(x: border/2, y: border/2, width: width, height: height)
30− metaballView = Renderer.createTargetView(frame: metaballViewFrame)
31+ metaballView = renderer.createTargetView(frame: metaballViewFrame)
3132
3233 let bigView = UIView(frame: CGRect(x: 10, y: 70, width: width + border, height: height + border))
3334 bigView.backgroundColor = UIColor.redColor()
@@ -40,7 +41,7 @@ class ViewController: UIViewController, MetaballDataSource {
4041 }
4142
4243
43− Renderer.updateTargetView(metaballView, dataSource: self)
44+ renderer.updateTargetView(metaballView, dataSource: self)
4445 }
4546
4647 func handlePan(recognizer: UIPanGestureRecognizer) {
@@ -57,10 +58,10 @@ class ViewController: UIViewController, MetaballDataSource {
5758 selectedMetaball?.middle = location
5859
5960 if recognizer.state == .Changed && dynamicRendering {
60− Renderer.updateTargetView(metaballView, dataSource: self)
61+ renderer.updateTargetView(metaballView, dataSource: self)
6162 }
6263 if recognizer.state == .Ended {
63− Renderer.updateTargetView(metaballView, dataSource: self)
64+ renderer.updateTargetView(metaballView, dataSource: self)
6465 }
6566 }
6667}