If I allocate an MDLAsset and SCNNode like so

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

Are my geometrySource objects backed by Metal buffers, or has the process gone and copied the data in NSData?

1

There are 1 answers

0
blueether On

After experimentation, it is indeed the case that unless you explicitly initialize a SCNGeometrySource with a metal buffer it will be backed by a non-mutable NSData buffer. This is even if the obj file was loaded into an MDLAsset using an MTLMeshBufferAllocator in the initial setup.