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
SCNGeometrySource
with a metal buffer it will be backed by a non-mutableNSData
buffer. This is even if theobj
file was loaded into anMDLAsset
using anMTLMeshBufferAllocator
in the initial setup.