gpt4 book ai didi

swift - 在ARKit中渲染新图像时如何清除内存?

转载 作者:行者123 更新时间:2023-11-30 10:41:06 25 4
gpt4 key购买 nike

我是第一次使用 Swift ARKit,在我的渲染器 didUpdate 方法中,我为用户提供了更改正在渲染的图像的选项。当他们更改图像时,我创建一个新图像(使用调整大小的图像)并将该图像用作faceGeometry 节点的内容。问题是,每当发生这种情况时,都会增加大约 50-100mb 的内存使用量,如果这样做的次数足够多,应用程序就会崩溃。

每次添加新图像时如何清除旧图像的内存?我是否错过了一个步骤,或者我不应该在 didUpdate 方法中更新/创建图像?

func renderer(
_ renderer: SCNSceneRenderer,
didUpdate node: SCNNode,
for anchor: ARAnchor) {

guard let faceGeometry = node.geometry as? ARSCNFaceGeometry,
let faceAnchor = anchor as? ARFaceAnchor
else { return }


if imageChanged {
let material = faceGeometry.firstMaterial!

let resizedImg = resizeImage(image: primaryImage!, targetSize: CGSize(width: imageWidth, height: imageHeight))

let expandedSize = CGSize(width: 1000, height: 1000)

let imageOnBlueCanvas = drawImageOnCanvas(resizedImg, canvasSize: expandedSize, canvasColor: .clear, x: imageX, y: imageY)

let v = UIImageView(image: imageOnBlueCanvas)

material.diffuse.contents = v// Example texture map image.
material.lightingModel = .physicallyBased


imageChanged = false
}


faceGeometry.update(from: faceAnchor.geometry)

}

最佳答案

我通过对所有图像使用单个引用来解决这个问题,并在创建新图像时更新这些引用。这释放了旧内存,我不再出现内存溢出。

关于swift - 在ARKit中渲染新图像时如何清除内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com