金属性能着色器和后备复制分配器

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 255 小节,累计 39w+ 字,讲解图:1716 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1300+ 小伙伴加入,欢迎点击围观

使用 Metal Performance Shaders 时可用的选项之一是就地过滤纹理。这在 What's New in Metal Part 2 中进行了讨论,但略微掩盖了实际的实现。更糟糕的是,后备复制分配器直到最新的 iOS 9 beta 版本才真正起作用,所以如果你一直在苦苦挣扎,这里有一篇简短的博客文章可以提供帮助。

过滤源纹理并填充目标纹理时, encodeToCommandBuffer() 具有以下签名:


 encodeToCommandBuffer(commandBuffer, sourceTexture: srcTexture, destinationTexture: targetTexture)

但是,使用以下语法,我们可以将滤镜应用于适当的纹理:


 encodeToCommandBuffer(commandBuffer, sourceTexture: srcTexture, destinationTexture: targetTexture)

一些过滤器,例如 MPSImageMedian 无法就地过滤,在这种情况下,我们需要创建一个 MPSCopyAllocator 实例,它会创建一个纹理并确保就地版本的 encodeToCommandBuffer 始终成功。实际上并没有可用的 descriptorFromTexture() 方法(如 WWDC 视频中所示),因此 copyAllocator 的正确 Swift 定义是:


 encodeToCommandBuffer(commandBuffer, sourceTexture: srcTexture, destinationTexture: targetTexture)

...现在以下将起作用:


 encodeToCommandBuffer(commandBuffer, sourceTexture: srcTexture, destinationTexture: targetTexture)

简单的!