【问题标题】:Using CVPixelBuffer is only way to create CAMetalTexture(MTLTexture)?使用 CVPixelBuffer 是创建 CAMetalTexture(MTLTexture) 的唯一方法吗?
【发布时间】:2020-08-10 02:47:17
【问题描述】:

在CVPixelBuffer中,有没有一种方法可以简单地使用copyMemory以外的指针从yuv数据指针的基地址指向y,u,v平面来创建纹理?

通过copyMemory创建纹理的方法大约需要0.5ms,但我想获得更好的速度。

我知道 OpenGL 和 DirextX 可以通过传递指针并让 GPU 生成纹理来获得更快的速度。

请告诉我任何更快的纹理创建方法

【问题讨论】:

    标签: swift graphics metal


    【解决方案1】:

    欢迎!

    您可以使用CVMetalTextureCacheCVPixelBuffers 创建纹理。

    您需要先使用CVMetalTextureCacheCreate 创建纹理缓存,然后在CVMetalTextureCacheCreateTextureFromImage 中使用它来创建纹理(示例请在文档页面上向下滚动)。 您可以(并且应该)使用适当的设置创建一次纹理缓存,并在每次需要创建纹理时重新使用它。

    【讨论】:

    • 有什么方法可以在不使用 CVMetalTextureCacheCreate 和 CVMetalTextureCacheCreateTextureFromImage 的情况下将 YUV 像素数据制作成 MTLTexture?我不想花时间将内存从 YUV 像素数据的基地址复制到 CVPixelBuffer 的 y、u、v 平面。这是因为时间管理对在屏幕上输出多个摄像头图像很敏感。
    • CVMetalTextureCacheCreateTextureFromImage 不会复制数据。它将创建一个具有相同底层缓冲内存的纹理,所以它应该很快。
    • 在创建yTexture的时候,大概需要0.5ms左右,后续创建u和vTexture在0.00~ms之间是非常微不足道的。 1. yTexture 是否因为第一次使用缓存而需要更长的时间? 2. 我的目标是在 60hz 下输出 30 ips 64 的相机图像,但是创建纹理需要超过 0.5ms,如果我添加渲染环境设置需要 1.5ms 或更多。在这种情况下,似乎很难实现这一目标。
    猜你喜欢
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多