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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

使用 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)

简单的!

相关文章