@@ -36,11 +36,21 @@ class MetalMetaballRenderer: MetaballRenderer {
3636 func updateTargetView() {
3737 let metaballs = dataSource.metaballs
3838
39+ // Re-alloc buffers if frame has changed
3940 if previousFrame != targetView.frame {
4041 previousFrame = targetView.frame
4142 updateFrame()
4243 }
4344
45+ // Render graphics to metal texture
46+ renderToRenderingTexture(metaballs: metaballs)
47+ // Transform metal texture into image
48+ let uiimage = image(texture: renderingTexture)
49+ // Send image to view
50+ targetView.image = uiimage
51+ }
52+
53+ func renderToRenderingTexture(metaballs metaballs: [Metaball]) {
4454 let width = Int(targetView.width)
4555 let height = Int(targetView.height)
4656
@@ -79,13 +89,10 @@ class MetalMetaballRenderer: MetaballRenderer {
7989
8090 commandBuffer.commit()
8191 commandBuffer.waitUntilCompleted()
82−
92+
8393 } catch _ {
8494 print("Error!")
8595 }
86−
87− // Transform new metal texture into image
88− targetView.image = image(texture: renderingTexture)
8996 }
9097
9198 func image(texture texture: MTLTexture) -> UIImage {