Hi,
I am still trying to get continuously update tracinng line to work. (re: https://forums.developer.apple.com/thread/62727)
Using SCNSceneRednerDelegate, I successfully rendered a drawing using Metal API
But after a brief moment, the rendering is replaced by the objects from SceneKit.
Following is my rendering code:
func renderer(renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: NSTimeInterval) {
guard let vm = self.viewModel,
let traceModel = vm.traceModel.value,
let renderPipeState = traceModel.renderPipeLineState,
let nextDrawable = (self.sceneKitView.layer as? CAMetalLayer)?.nextDrawable()
else {
return
}
let commandBuffer = traceModel.commandQueue.commandBuffer()
let renderPassDescriptor = MTLRenderPassDescriptor()
renderPassDescriptor.colorAttachments[0].texture = nextDrawable.texture
renderPassDescriptor.colorAttachments[0].loadAction = .Clear
renderPassDescriptor.colorAttachments[0].storeAction = .Store
let encoder = commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor)
encoder.setRenderPipelineState(renderPipeState)
encoder.setVertexBuffer(traceModel.metalBuffer, offset: 0, atIndex: 0)
encoder.drawPrimitives(.Triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1)
encoder.endEncoding()
commandBuffer.presentDrawable(nextDrawable)
commandBuffer.commit()
}Here's code snippet from 2012 WWDC Video (https://developer.apple.com/videos/play/wwdc2012/504/ ):
- (void)renderer:(id )aRenderer willRenderScene:(SCNScene *)scene atTime:(NSTimeInterval)time {
glBindVertexArrayAPPLE(myVAO);
glDisable(GL_DEPTH_TEST);
glUseProgram(myProgram);
CGSize size = self.myView.frame.size;
glUniform2f(myResolutionLoc, size.width, size.height);
glUniform1f(myTimeLoc, CFAbsoluteTimeGetCurrent());
glDrawArrays(GL_TRIANGLES, 0, 6);
glEnable(GL_DEPTH_TEST);
glBindVertexArrayAPPLE(0);
}
Is there something I'm missing?