如果我使用金属分配 MDLAsset,然后使用该资产初始化 SCNNode,是不是将 SCNGeometrySource 对象复制到非金属缓冲区?
Posted
技术标签:
【中文标题】如果我使用金属分配 MDLAsset,然后使用该资产初始化 SCNNode,是不是将 SCNGeometrySource 对象复制到非金属缓冲区?【英文标题】:If I allocate MDLAsset using metal, then inititialize an SCNNode using that asset, are the SCNGeometrySource objects copied to non-Metal buffers?如果我使用金属分配 MDLAsset,然后使用该资产初始化 SCNNode,是否将 SCNGeometrySource 对象复制到非金属缓冲区? 【发布时间】:2021-03-02 08:13:39 【问题描述】:如果我像这样分配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
缓冲区支持。即使在初始设置中使用MTLMeshBufferAllocator
将obj
文件加载到MDLAsset
中也是如此。
【讨论】:
以上是关于如果我使用金属分配 MDLAsset,然后使用该资产初始化 SCNNode,是不是将 SCNGeometrySource 对象复制到非金属缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章