Ich habe ein SKView und ein MTKView in einer Anwendung laufen und alles funktioniert bisher gut.mit der reinen Metal-API zusammen mit SceneKit oder SpriteKit
Die einzige Sache ist, dass beide Ansichten schlecht visuell integriert sind. Sie sind nur nebeneinander. Aber ich würde gerne das reine Metall Rendering innerhalb des SKView mit einigen SKNodes bewegen. Es ist eine Art schnelle Anzeige innerhalb des SKView.
Auf der Metallseite ziemlich viele Rechen läuft und Sachen zu machen. Der SKView sollte ein nettes UI für die schweren Berechnungen und das minimale, aber sehr schnelle Rendering des reinen Metallteils bieten.
Ich habe bereits über die Verwendung von SceneKit mit einem Overlay einer SpriteKit-Szene nachgedacht, da SCNRenderer die Möglichkeit bietet, einen eigenen MTLCommandBuffer und MTLRenderPassDescriptor mit renderAtTime darzustellen.
I implementiert die folgende SCNSceneRendererDelegate Methode und meine eigene genannt Render-Funktion, die die commandBuffer vorbereitet.
func renderer(renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: NSTimeInterval) {
nodeArray.render()
}
Nach dem commandBuffer ist bereit, ich die renderAtTime Methode meiner SCNRenderer nennen. Versuch und Irrtum zeigten mir, dass der Befehlspuffer nach dem Aufruf von renderAtTime festgeschrieben werden muss. Wenn ich es vorher mache, stürzt die App ab. Wenn ich es überhaupt nicht mache, wird es die App einfrieren.
func bufferFinished(renderer:SCNRenderer, commandBuffer: MTLCommandBuffer, renderPassDescriptor: MTLRenderPassDescriptor){
let current=CFAbsoluteTimeGetCurrent()
renderer.renderAtTime(current, viewport: gameView.bounds, commandBuffer: commandBuffer, passDescriptor: renderPassDescriptor)
commandBuffer.commit()
}
Wenn ich dies tue die App läuft, aber kein zusätzliches Metall Kontext gezeigt. Ich denke, die ganze Sache ist wegen des Metallteils etwas komplex.
Gibt es eine einfache Probe, wo reines Metall in einer SceneKit Ansicht oder besser in einer SpriteKit Ansicht wiedergegeben wird?
SceneKit und SpriteKit machen Ihre Inhalte mit Metall "hinter den Kulissen". Wenn Sie reines Metall verwenden möchten, können Sie SpriteKit und Metal nicht gleichzeitig verwenden. Sie sind zwei getrennte Technologien mit einem anderen Zweck. –
Nein. Wie UIKit sind auch die Ziele von Sprite Kit und Scene Kit Teilbereiche des Zwecks von Metal. Sprite Kit und Scene Kit würden mehr Sinn machen als Metal-basierte Bibliotheken, aber derzeit verhalten sie sich eher wie Game-Engines, was keinen Sinn ergibt, solange sie nicht plattformübergreifend sind. – Jessy
Es gibt Möglichkeiten, dies zu tun. Zum Beispiel mit dem SCNRender: https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNRenderer_Class/index.html#//apple_ref/doc/uid/TP40012014-CLSCHSCNRenderer-DontLinkElementID_4 oder mit der SCNSceneRenderer: https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNSceneRenderer_Protocol/#//apple_ref/doc/uid/TP40012016-CLSCHSCNSceneRenderer-DontLinkElementID_11 – Oliver