首页 > 解决方案 > 您如何在 Metal 中处理非常大的图像?

问题描述

TL;DR:在 macOS 10.13 中,anMTLTexture的最大宽度和高度为 16,384。您可以使用哪些策略来使用 Metal 处理和显示大于 16,384 像素的图像?

在我目前正在使用的照片查看器中,我已将大部分图像查看移动到使用 Core Image 进行任何图像调整的 Metal 支持的视图中。这工作得很好,但我最近开始对一些非常大的图像(全景图)进行测试,现在我遇到了一些限制,我不完全确定如何在保持相对性能的同时解决问题。

我现在的环境是这样的:

但是,如果我尝试在一个维度上打开大于 16,384 像素的图像,则无法在我的笔记本电脑上创建原始的 IOSurface 16,384。(13" MBP-TB 2016)

但是,即使我可以创建一个更大IOSurfaceMTLTexture.

请参阅:Apple 的金属功能表集

我很好奇其他人会推荐什么策略来允许一个人打开大图像文件,同时仍然利用 Core Image 和 Metal。

我所做的一个尝试是让根源图像成为一个CIImageCGImageRef. CIImage但是,这种排列方式与更小尺寸图像的纹理支持之间的性能显着下降。

我有但尚未探索的另一个想法CIImageProvider是以某种容量使用,但我不完全确定我将如何“平铺”潜在的几个IOSurfacesor MTLTextures,如果这甚至有意义或者它是否会最好只分配一个大缓冲区来读取。(或者也许dispatch_data以某种身份使用?)

(macOS 10.13 甚至 10.14 都可以。)

标签: macoscocoametalmetalkit

解决方案


推荐阅读