Подтвердить что ты не робот

SceneKit cocoa неудачное утверждение моментального снимка

Я работаю над быстрым/ cocoa/Xcode-приложением.

Это приложение содержит представление SceneKit. API рендеринга установлен в значение по умолчанию (так что я думаю, что это Metal).

Если я запустил snapshot() в этом объекте viewkit view, я получаю это сообщение об ошибке. То, что я хочу сделать, - захватить UIImage сцены, просматриваемой с камеры

Texture PixelFormat MTLPixelFormatBGRA8Unorm does not match Resolve PixelFormat MTLPixelFormatRGBA8Unorm

Если я устанавливаю API рендеринга в OpenGL, у меня нет ошибки, все работает.

Я пробовал то же самое в приложении iOS, он работает в обоих случаях (Metal или OpenGL).

Я не понимаю, почему я получаю эту ошибку и что я должен делать, чтобы избежать ее...

Спасибо

- Изменить -

Вот пример кода:

import SceneKit
import Cocoa

class ViewController: NSViewController {

    @IBOutlet weak var vue_scene: SCNView!
    @IBOutlet weak var img_snapshot: NSImageView!

    let camera_node = SCNNode()
    var box_node:SCNNode = SCNNode()

    override func viewDidLoad()
    {
        super.viewDidLoad()

        let scene = SCNScene()
        vue_scene.scene = scene

        vue_scene.backgroundColor = NSColor.clear

        vue_scene.showsStatistics = false
        vue_scene.allowsCameraControl = false
        vue_scene.autoenablesDefaultLighting = true;

        camera_node.camera = SCNCamera()
        camera_node.camera?.zNear = 0.01
        camera_node.camera?.zFar = 1000000.0
        vue_scene.pointOfView = camera_node
        vue_scene.scene!.rootNode.addChildNode(camera_node)

        let box = SCNBox(width: 10.0, height: 10.0, length: 10.0, chamferRadius: 0.0)
        box.firstMaterial?.diffuse.contents = NSColor.red

        box.firstMaterial?.isDoubleSided = true
        box_node = SCNNode(geometry:box)
        box_node.position = SCNVector3Make(0,0,0)
        box_node.opacity = 1.0
        vue_scene.scene!.rootNode.addChildNode(box_node)

        camera_node.position = SCNVector3Make(
            0.0,
            0.0,
            70.0)
    }

    @IBAction func on_btn(_ sender: Any)
    {
        // signal SIGABRT here:
        // /Library/Caches/com.apple.xbs/Sources/Metal/Metal-56.6.1/ToolsLayers/Debug/MTLDebugCommandBuffer.mm:215: failed assertion `Texture PixelFormat MTLPixelFormatBGRA8Unorm does not match Resolve PixelFormat MTLPixelFormatRGBA8Unorm'
        let image = vue_scene.snapshot()
        img_snapshot.image = image;
    }
}
4b9b3361