git.iko.soy/metal-metaballs
on master help sign in
Commented the metal renderer.
commitf7ae50ca9698caf8d5c3c1bb3577ae04fcc63f58 authorvinivendra <vinivendra@gmail.com> dateWed 10 Feb 2016, 13:56 (11 years ago) parent4b04dcd
2 files changed+14−9
PixelImage.xcodeproj/project.xcworkspace/xcuserdata/vini.xcuserdatad/UserInterfaceState.xcuserstate PixelImage/MetalMetaballRenderer.swift+14−9
PixelImage.xcodeproj/project.xcworkspace/xcuserdata/vini.xcuserdatad/UserInterfaceState.xcuserstate

Binary file not shown.

PixelImage/MetalMetaballRenderer.swift+14−9
@@ -66,7 +66,7 @@ class MetalMetaballRenderer: MetaballRenderer {
6666 // Create up-to-date metaball buffer
6767 let metaballInfoTexture = metaballTexture(metaballs)
6868
69− //
69+ // Send commands to metal and render
7070 let commandBuffer = context.commandQueue.commandBuffer()
7171
7272 let commandEncoder = commandBuffer.computeCommandEncoder()
@@ -84,28 +84,32 @@ class MetalMetaballRenderer: MetaballRenderer {
8484 print("Error!")
8585 }
8686
87+ // Transform new metal texture into image
8788 targetView.image = image(texture: renderingTexture)
8889 }
8990
9091 func image(texture texture: MTLTexture) -> UIImage {
92+ // Get image info
9193 let imageSize = CGSizeMake(CGFloat(texture.width),
9294 CGFloat(texture.height))
9395 let width = Int(imageSize.width)
9496 let height = Int(imageSize.height)
9597 let imageByteCount = width * height * 4
98+ let bytesPerRow = width * 4
99+ let region = MTLRegionMake2D(0, 0, width, height)
96100
101+ // Allocate the buffer if needed
97102 if imageBuffer == nil {
98103 imageBuffer = malloc(imageByteCount)
99104 }
100105
101− let bytesPerRow = width * 4
102− let region = MTLRegionMake2D(0, 0, width, height)
106+ // Transfer texture info into image buffer
103107 texture.getBytes(imageBuffer, bytesPerRow: bytesPerRow,
104108 fromRegion: region, mipmapLevel: 0)
105109
110+ // Get info for UIImage
106111 let provider = CGDataProviderCreateWithData(nil, imageBuffer,
107112 imageByteCount, nil)
108−
109113 let bitsPerComponent = 8
110114 let bitsperPixel = 32
111115 let colorSpaceRef = CGColorSpaceCreateDeviceRGB()
@@ -113,6 +117,8 @@ class MetalMetaballRenderer: MetaballRenderer {
113117 CGImageAlphaInfo.PremultipliedLast.rawValue |
114118 CGBitmapInfo.ByteOrder32Big.rawValue)
115119 let renderingIntent = CGColorRenderingIntent.RenderingIntentDefault
120+
121+ // Create UIImage from image buffer
116122 let imageRef = CGImageCreate(width, height,
117123 bitsPerComponent, bitsperPixel, bytesPerRow,
118124 colorSpaceRef, bitmapInfo, provider,
@@ -124,21 +130,22 @@ class MetalMetaballRenderer: MetaballRenderer {
124130 }
125131
126132 func metaballTexture(metaballs: [Metaball]) -> MTLTexture {
133+ // Create Float array for buffer
127134 let floats: [Float] = metaballs.reduce([Float(metaballs.count)]) { (var array, metaball) -> [Float] in
128135 array.append(Float(metaball.midX))
129136 array.append(Float(metaball.midY))
130137 return array
131138 }
132− let size = floats.count
133139
140+ // Create texture
141+ let size = floats.count
134142 let textureDescriptor =
135143 MTLTextureDescriptor.texture2DDescriptorWithPixelFormat(
136144 .R32Float, width: size, height: 1, mipmapped: false)
137−
138145 let texture = context.device.newTextureWithDescriptor(textureDescriptor)
139146
147+ // Copy array info into texture
140148 let region = MTLRegionMake2D(0, 0, size, 1)
141−
142149 texture.replaceRegion(region, mipmapLevel: 0, withBytes: floats,
143150 bytesPerRow: sizeof(Float) * size)
144151
@@ -155,6 +162,4 @@ class MetalMetaballRenderer: MetaballRenderer {
155162 deinit {
156163 free(imageBuffer)
157164 }
158−
159165}
160−