SKRenderer не рендерит альфа-канал SKShapeNode в MTKView - PullRequest
0 голосов
/ 30 ноября 2018

Я настроил SKRenderer для рендеринга SKScene в MTKView в macOS.Однако любые SKShapeNode s в сцене отображаются так, как будто они игнорируют альфа-значения: SKRenderer Output

Вот мой ViewController, в котором установлен SKRenderer:

import Cocoa
import SpriteKit
import MetalKit

class ViewController: NSViewController {

    var device: MTLDevice!
    var renderer: SKRenderer!
    var commandQueue: MTLCommandQueue!
    var scene: GameScene!
    var mtkView = MTKView()

    override func viewDidAppear() {
        super.viewDidAppear()

        device = MTLCreateSystemDefaultDevice()
        renderer = SKRenderer(device: device)
        commandQueue = device.makeCommandQueue()

        scene = GameScene(size: view.bounds.size)
        scene.scaleMode = .aspectFill

        renderer.scene = scene

        mtkView.device = device
        mtkView.delegate = self
        mtkView.isPaused = false
        view.addSubview(mtkView)
    }

    override func viewDidLayout() {
        mtkView.frame = view.bounds
    }

}

Мой MTKViewDelegate, где SKRenderer рендерит в металле:

extension ViewController: MTKViewDelegate {

    func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) { }

    func draw(in view: MTKView) {
        let commandBuffer = commandQueue.makeCommandBuffer()!
        let renderPassDescriptor = view.currentRenderPassDescriptor!

        renderer.render(withViewport: view.bounds, commandBuffer: commandBuffer, renderPassDescriptor: renderPassDescriptor)

        commandBuffer.present(view.currentDrawable!)
        commandBuffer.commit()
    }

}

И моя основная GameScene:

import SpriteKit

class GameScene: SKScene {

    override init(size: CGSize) {
        super.init(size: size)

        anchorPoint = CGPoint(x: 0.5, y: 0.5)
        let circle = SKShapeNode(ellipseOf: CGSize(width: size.width / 2, height: size.height / 2))
        circle.fillColor = SKColor.green
        circle.strokeColor = SKColor.blue
        addChild(circle)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        anchorPoint = CGPoint(x: 0.5, y: 0.5)
        let circle = SKShapeNode(ellipseOf: CGSize(width: size.width / 2, height: size.height / 2))
        circle.fillColor = SKColor.green
        circle.strokeColor = SKColor.clear
        addChild(circle)
    }
}

Я довольно новичок в металле, поэтому яуверен, что я просто упускаю что-то простое.

...