SceneKit,动态加载和替换纹理的最有效方法是啥? UIImage,MTLTexture,MDLTexture,URL?
Posted
技术标签:
【中文标题】SceneKit,动态加载和替换纹理的最有效方法是啥? UIImage,MTLTexture,MDLTexture,URL?【英文标题】:SceneKit, what is the most efficient way to load and replace textures on the fly? UIImage, MTLTexture, MDLTexture, URL?SceneKit,动态加载和替换纹理的最有效方法是什么? UIImage,MTLTexture,MDLTexture,URL? 【发布时间】:2020-11-02 00:20:59 【问题描述】:我需要在运行时尽快加载和替换各种纹理,同时保持尽可能低的内存使用量。应尽快从 VRAM 中删除未使用的旧纹理。将所有内容重写为 Metal 可能会有所帮助,但工作量很大。
我们可以从 Apple 的文档中看到,纹理可能是:
UIImage / NSImage / MTLTexture / MDLTexture / String / URL
那么,哪一个是最好的。我测试了其中一些,但它们在 macOS 和 ios 上的行为不同。
【问题讨论】:
【参考方案1】:文件路径和 URL 更好,因为它们不会为纹理数据预先分配内存。例如,在处理 UIImage
或 CGImageRef
时,SceneKit 无法代表您丢弃原始图像数据,这可能与 SceneKit 内部想要使用的色彩空间和/或像素格式不匹配。
【讨论】:
不使用 UIImage 的代码会是什么样子? 我发现了这个,它肯定有助于内存管理。即使我没有过渡效果。我可能会找到解决方法... var documentsUrl: URL return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!以上是关于SceneKit,动态加载和替换纹理的最有效方法是啥? UIImage,MTLTexture,MDLTexture,URL?的主要内容,如果未能解决你的问题,请参考以下文章