Я настроил SKRenderer
для рендеринга SKScene
в MTKView
в macOS.Однако любые SKShapeNode
s в сцене отображаются так, как будто они игнорируют альфа-значения:
Вот мой 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)
}
}
Я довольно новичок в металле, поэтому яуверен, что я просто упускаю что-то простое.