SceneKit,动态加载和替换纹理的最有效方法是什么? UIImage,MTLTexture,MDLTexture,URL?
SceneKit, what is the most efficient way to load and replace textures on the fly? UIImage, MTLTexture, MDLTexture, URL?
我需要在运行时尽快加载和替换各种纹理,同时保持尽可能低的内存使用率。应尽快从 VRAM 中删除未使用的旧纹理。将所有内容重写为 Metal 可能会有所帮助,但这需要大量工作。
从Apple的文档中可以看出,纹理可以是:
UIImage / NSImage / MTLTexture / MDLTexture / String / URL
所以,哪一个是最好的。我测试了其中一些,但它们在 macOS 和 iOS.
上的表现不同
文件路径和 URL 更好,因为它们不会为纹理数据预先分配内存。例如,在处理 UIImage
或 CGImageRef
时,SceneKit 无法代表您丢弃原始图像数据,这可能与颜色 space and/or 像素不匹配格式 SceneKit 将要在内部使用。
我需要在运行时尽快加载和替换各种纹理,同时保持尽可能低的内存使用率。应尽快从 VRAM 中删除未使用的旧纹理。将所有内容重写为 Metal 可能会有所帮助,但这需要大量工作。
从Apple的文档中可以看出,纹理可以是:
UIImage / NSImage / MTLTexture / MDLTexture / String / URL
所以,哪一个是最好的。我测试了其中一些,但它们在 macOS 和 iOS.
上的表现不同文件路径和 URL 更好,因为它们不会为纹理数据预先分配内存。例如,在处理 UIImage
或 CGImageRef
时,SceneKit 无法代表您丢弃原始图像数据,这可能与颜色 space and/or 像素不匹配格式 SceneKit 将要在内部使用。