All to render the grid...
This commit is contained in:
parent
5672a44b47
commit
3f98d0f478
3 changed files with 15 additions and 9 deletions
|
@ -263,7 +263,7 @@ public class Field {
|
||||||
guard self.device == nil else {
|
guard self.device == nil else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
NSLog("Setting up Metal")
|
print("Setting up Metal")
|
||||||
self.device = device
|
self.device = device
|
||||||
populateParametersBuffer()
|
populateParametersBuffer()
|
||||||
populateBallBuffer()
|
populateBallBuffer()
|
||||||
|
|
|
@ -21,5 +21,6 @@ struct Rect {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
var transform: Matrix3x3
|
var transform: Matrix4x4
|
||||||
|
var color: Float4
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ public class Renderer: NSObject, MTKViewDelegate {
|
||||||
|
|
||||||
delegate.field.setupMetal(withDevice: device)
|
delegate.field.setupMetal(withDevice: device)
|
||||||
delegate.marchingSquares.setupMetal(withDevice: device)
|
delegate.marchingSquares.setupMetal(withDevice: device)
|
||||||
|
delegate.marchingSquares.populateGrid(withDevice: device)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,11 +127,13 @@ public class Renderer: NSObject, MTKViewDelegate {
|
||||||
fatalError("Couldn't get Metal library")
|
fatalError("Couldn't get Metal library")
|
||||||
}
|
}
|
||||||
|
|
||||||
let vertexShader = library.makeFunction(name: "passthroughVertexShader")
|
guard let vertexShader = library.makeFunction(name: "gridVertexShader"),
|
||||||
let fragmentShader = library.makeFunction(name: "passthroughFragmentShader")
|
let fragmentShader = library.makeFunction(name: "gridFragmentShader") else {
|
||||||
|
fatalError("Couldn't get marching squares vertex or fragment function from library")
|
||||||
|
}
|
||||||
|
|
||||||
let pipelineDesc = MTLRenderPipelineDescriptor()
|
let pipelineDesc = MTLRenderPipelineDescriptor()
|
||||||
pipelineDesc.label = "Marching Squares Pipeline"
|
pipelineDesc.label = "Grid Pipeline"
|
||||||
pipelineDesc.vertexFunction = vertexShader
|
pipelineDesc.vertexFunction = vertexShader
|
||||||
pipelineDesc.fragmentFunction = fragmentShader
|
pipelineDesc.fragmentFunction = fragmentShader
|
||||||
if let renderAttachment = pipelineDesc.colorAttachments[0] {
|
if let renderAttachment = pipelineDesc.colorAttachments[0] {
|
||||||
|
@ -232,11 +235,13 @@ public class Renderer: NSObject, MTKViewDelegate {
|
||||||
pass.colorAttachments[0].loadAction = .load
|
pass.colorAttachments[0].loadAction = .load
|
||||||
if let pipeline = marchingSquaresPipeline,
|
if let pipeline = marchingSquaresPipeline,
|
||||||
let encoder = buffer.makeRenderCommandEncoder(descriptor: pass) {
|
let encoder = buffer.makeRenderCommandEncoder(descriptor: pass) {
|
||||||
encoder.label = "Marching Squares Render"
|
encoder.label = "Marching Squares Grid Render"
|
||||||
encoder.setRenderPipelineState(pipeline)
|
encoder.setRenderPipelineState(pipeline)
|
||||||
encoder.setVertexBuffer(marchingSquares.gridGeometry, offset: 0, index: 0)
|
encoder.setVertexBytes(Rect.geometry, length: MemoryLayout<Vertex>.stride * Rect.geometry.count, index: 0)
|
||||||
encoder.setVertexBuffer(parametersBuffer, offset: 0, index: 1)
|
encoder.setVertexBuffer(marchingSquares.gridGeometry, offset: 0, index: 1)
|
||||||
encoder.drawPrimitives(type: .line, vertexStart: 0, vertexCount: marchingSquares.gridVertexCount)
|
encoder.setVertexBuffer(parametersBuffer, offset: 0, index: 2)
|
||||||
|
encoder.setTriangleFillMode(.lines)
|
||||||
|
encoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: Rect.geometry.count, instanceCount: marchingSquares.samplesCount)
|
||||||
encoder.endEncoding()
|
encoder.endEncoding()
|
||||||
didEncode = true
|
didEncode = true
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue