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?
After experimentation, it is indeed the case that unless you explicitly initialize a
SCNGeometrySourcewith a metal buffer it will be backed by a non-mutableNSDatabuffer. This is even if theobjfile was loaded into anMDLAssetusing anMTLMeshBufferAllocatorin the initial setup.