【问题标题】: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 上的行为不同。

【问题讨论】:

    标签: ios objective-c macos scenekit metal


    【解决方案1】:

    文件路径和 URL 更好,因为它们不会为纹理数据预先分配内存。例如,在处理 UIImageCGImageRef 时,SceneKit 无法代表您丢弃原始图像数据,这可能与 SceneKit 内部想要使用的色彩空间和/或像素格式不匹配。

    【讨论】:

    • 不使用 UIImage 的代码会是什么样子?
    • 我发现了这个,它肯定有助于内存管理。即使我没有过渡效果。我可能会找到解决方法... var documentsUrl: URL { return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多