Create Variants and set up its buffer
This commit is contained in:
parent
a14943c42f
commit
83978aff8c
1 changed files with 15 additions and 19 deletions
|
@ -34,6 +34,8 @@ class MarchingSquares {
|
|||
|
||||
private(set) var gridGeometry: MTLBuffer?
|
||||
|
||||
private let variants = Variants()
|
||||
|
||||
private var xSamples: Int {
|
||||
let xSize = field.size.x / sampleGridSize.x
|
||||
let xRem = field.size.x % sampleGridSize.x
|
||||
|
@ -67,6 +69,7 @@ class MarchingSquares {
|
|||
func setupMetal(withDevice device: MTLDevice, library: MTLLibrary) {
|
||||
samplingPipeline = createComputePipeline(withFunctionNamed: "samplingKernel", device: device, library: library)
|
||||
contouringPipeline = createComputePipeline(withFunctionNamed: "contouringKernel", device: device, library: library)
|
||||
variants.setupMetal(withDevice: device)
|
||||
createParametersBuffer(withDevice: device)
|
||||
createSamplesBuffer(withDevice: device)
|
||||
createContourIndexesBuffer(withDevice: device)
|
||||
|
@ -232,7 +235,7 @@ class MarchingSquares {
|
|||
}
|
||||
}
|
||||
|
||||
struct Variants {
|
||||
fileprivate class Variants {
|
||||
static let geometry: [Float] = [
|
||||
// 0: no triangles
|
||||
// 1: lower left corner, 1 triangle
|
||||
|
@ -365,26 +368,19 @@ struct Variants {
|
|||
}
|
||||
|
||||
static func startingIndex(for variation: UInt) -> UInt {
|
||||
switch variation {
|
||||
case 0: return 0
|
||||
case 1: return 0
|
||||
case 2: return 3
|
||||
case 3: return 6
|
||||
case 4: return 10
|
||||
case 5: return 13
|
||||
case 6: return 19
|
||||
case 7: return 23
|
||||
case 8: return 28
|
||||
case 9: return 31
|
||||
case 10: return 35
|
||||
case 11: return 41
|
||||
case 12: return 46
|
||||
case 13: return 50
|
||||
case 14: return 55
|
||||
case 15: return 60
|
||||
default: return 0
|
||||
var idx = UInt(0)
|
||||
for i in 0..<variation {
|
||||
idx += numberOfTriangles(for: i) * 3
|
||||
}
|
||||
return idx
|
||||
}
|
||||
|
||||
var buffer: MTLBuffer?
|
||||
|
||||
func setupMetal(withDevice device: MTLDevice) {
|
||||
let bufferLength = MemoryLayout<Float>.stride * Variants.geometry.count
|
||||
if let buffer = device.makeBuffer(bytes: Variants.geometry, length: bufferLength, options: .storageModeShared) {
|
||||
self.buffer = buffer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue