Search code examples
swiftsprite-kitmetal

Render text with SKRenderer


I initialized SKRenderer in my project to use it alongside of metal. Although I'm not sure that I did it correctly, I need to know how I can render a simple 2D text with it?

For example, here is how we can draw a text with SKLabelNode, do we have anything like it for SKRenderer? thank you so much

let winner = SKLabelNode(fontNamed: "Chalkduster")
winner.text = "You Win!"
winner.fontSize = 65
winner.fontColor = SKColor.red
winner.position = CGPoint(x: 100, y: 100)
view.addChild(winner)

Solution

  • The first thing you need to do is initialize the scene.

    var renderer: SKRenderer
    var skScene: SKScene
    

    in your init function:

    renderer = SKRenderer(device: device)
    // iphone 11 portrait
    skScene = SKScene(size: CGSize(width: 1125, height: 2436))
    renderer.scene = skScene
    
    let winner = SKLabelNode(fontNamed: "Chalkduster")
    winner.text = "You Win!"
    winner.fontSize = 65
    winner.fontColor = SKColor.red
    winner.position = CGPoint(x: 1125 / 2, y: 2436 / 2)
    skScene.addChild(winner)
    

    and finally in your render function:

    renderer.render(withViewport: viewport, renderCommandEncoder: renderEncoder, renderPassDescriptor: renderPassDescriptor, commandQueue: commandQueue)
    renderEncoder.endEncoding()
    

    but keep in mind ui layer (SKRenderer) should be rendered in the last pass.