[Metaballs] Do all the texture generation in the fragment shader
This commit is contained in:
parent
8b4f2d8cc2
commit
dfa603012f
2 changed files with 45 additions and 14 deletions
|
|
@ -86,22 +86,29 @@ class Renderer: NSObject, MTKViewDelegate {
|
|||
Vertex(position: Point(x: 1, y: 1), textureCoordinate: Point(x: 1, y: 1))
|
||||
]
|
||||
|
||||
let buffer = commandQueue.makeCommandBuffer()
|
||||
buffer.label = "Compute + Render"
|
||||
|
||||
do {
|
||||
let _ = try field.computeEncoderForSamplingKernel(withDevice: device, commandBuffer: buffer)
|
||||
try field.updateBuffers()
|
||||
} catch let e {
|
||||
print("\(e)")
|
||||
NSLog("Error updating buffers: \(e)")
|
||||
}
|
||||
|
||||
let buffer = commandQueue.makeCommandBuffer()
|
||||
buffer.label = "Render"
|
||||
|
||||
// do {
|
||||
// let _ = try field.computeEncoderForSamplingKernel(withDevice: device, commandBuffer: buffer)
|
||||
// } catch let e {
|
||||
// print("\(e)")
|
||||
// }
|
||||
|
||||
if let renderPass = view.currentRenderPassDescriptor {
|
||||
let encoder = buffer.makeRenderCommandEncoder(descriptor: renderPass)
|
||||
encoder.label = "Render Pass"
|
||||
encoder.setViewport(MTLViewport(originX: 0.0, originY: 0.0, width: Double(view.drawableSize.width), height: Double(view.drawableSize.height), znear: -1.0, zfar: 1.0))
|
||||
encoder.setRenderPipelineState(renderPipelineState)
|
||||
encoder.setVertexBytes(points, length: points.count * MemoryLayout<Vertex>.size, at: 0)
|
||||
encoder.setFragmentTexture(field.sampleTexture, at: 0)
|
||||
encoder.setVertexBytes(points, length: points.count * MemoryLayout<Vertex>.stride, at: 0)
|
||||
encoder.setFragmentBuffer(field.parametersBuffer, offset: 0, at: 0)
|
||||
encoder.setFragmentBuffer(field.ballBuffer, offset: 0, at: 1)
|
||||
encoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 6)
|
||||
encoder.endEncoding()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue