Если я выделяю MDLAsset, используя металл, а затем инициализирую SCNNode, используя этот актив, копируются ли объекты SCNGeometrySource в буферы, отличные от Metal?

Если я выделю MDLAsset и SCNNode вот так

let device: MTLDevice = (sceneView?.device)!
let allocator = MTKMeshBufferAllocator(device: device)
let url = Bundle.main.url(forResource: name, withExtension: "obj")
let asset = MDLAsset(url: url! as URL, vertexDescriptor: nil, bufferAllocator: allocator)

guard let object = asset.object(at: 0) as? MDLMesh else {
      print("Failed to get mesh from obj asset")
      return nil
}

let node = SCNNode.init(mdlObject: object)
let geometrySources = node.geometry.sources

Мои geometrySource объекты, поддерживаемые буферами Metal, или процесс пошел и скопировал данные в NSData?

1 ответ

После экспериментов действительно так, что если вы явно не инициализируете SCNGeometrySource с металлическим буфером он будет поддерживаться неизменяемым NSDataбуфер. Это даже если obj файл был загружен в MDLAsset используя MTLMeshBufferAllocator в начальной настройке.

Другие вопросы по тегам