在看完 Metal 的开发文档后,除了官方所宣称的一些优点外(比如说更容易理解和使用的 API,更直接和精细的硬件控制,减少 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经验看来,以下一些方面更让人兴奋。

更方便和友好的多线程 GPU 渲染支持

GLES 的设计,所有东西都必须跟一个 GL Context 绑定,由 GL Context 内部所控制的状态机驱使,而 GL Context 又跟单个线程本身紧密绑定在一起,导致很难支持构建一个良好的多线程 GPU 渲染架构,Chrome 的解决办法是在 GL 之上构建了一套 GL Context 的 Proxy 机制,Proxy GL Context 允许多个线程创建不同的实例,而每个 Proxy GL Context 内部使用一个 Command Buffer 跟真正的 GL Context 进行通讯和保持同步。

而 Metal 在设计时就考虑了如何更好地支持多 CPU 线程同时“使用“ GPU,它的 Command Queue/Command Buffer 的模型虽然有点类似 Chrome 的 Proxy 机制,不同的 CPU 线程可以 Encode Commands 到不同的 Command Buffer,然后放入同一个 Queue 里面等待 GPU 的真正执行。但是 Metal 的这种内建的支持当然比 Chrome 在 GL 上面的封装来的更方便,易用和高效,也没有那么多限制。

GPU 渲染和计算的无缝整合(Rendering and Compute)

虽然 GLES 未来也会支持 Compute Shader,但是能否做到 Metal 这样无缝的衔接(包括 Command 的执行和资源的共享)就比较难说了。

统一的资源内存管理模型,允许 CPU 直接访问 Metal Resource (Buffer/Texture) 的存储内存,并设定了明确的 CPU/GPU 同步时机

虽然 GLES 3 可以通过 Pixel Buffer Object 支持一块 GPU 控制的内存可供 CPU 直接访问,但是毕竟限制太多,用途有限(另外也由于 GLES 本身缺少良好的多线程支持)。而 Android 的 GraphicsBuffer 系统/硬件兼容性问题成堆,性能参差不齐,没有明确的 CPU/GPU 同步时机,也只能用于特定场景。

简而言之,Metal 让 CPU/GPU 之间的协作更紧密和高效,允许 CPU 通过更多方式,更灵活地使用 GPU,把更多的任务交由 GPU 来完成。

您可能感兴趣的文章

  • [译文]关于移动Web性能的5个神话
  • 高性能Android Canvas游戏开发
  • 实时监控Android设备网络封包

关于 Apple Metal API 的一些想法相关推荐

  1. 大约 Apple Metal API 一些想法

    看后 Metal 的开发文档后,除了官方所宣称的一些长处外(比方说更easy理解和使用的 API.更直接和精细的硬件控制,降低 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发 ...

  2. android metal api,Metal 简述及其API

    Metal介绍 Metal是苹果在2018年推出用于取代在苹果端的业务的图形编程接口,在2018年之前使用的是基于OpenGL ES 封装的GLKit,通过Metal相关API直接操作GPU,能最大限 ...

  3. android metal api,Metal 简述 API

    Metal介绍 Metal是苹果在2018年推出用于取代在苹果端的业务的图形编程接口,在2018年之前使用的是基于OpenGL ES 封装的GLKit,通过Metal相关API直接操作GPU,能最大限 ...

  4. android metal api,Metal简述与常用API

    Metal介绍 Metal是苹果在2018年推出用于取代在苹果端的业务的图形编程接口,在2018年之前使用的是基于OpenGL ES 封装的GLKit,通过Metal相关API直接操作GPU,能最大限 ...

  5. Sign in with Apple REST API / Revoke tokens (JAVA)

    Sign in with Apple REST API / Revoke tokens (JAVA) 前言 由于Apple政策, Apple ID登录的用户注销时需要进行Revoke Token. 顺 ...

  6. 苹果新Metal API实测:四倍完爆OpenGL ES

    这几年,图形API领域十分热闹.首先是AMD Mantle,虽仅支持自家GCN架构显卡,但开创了访问硬件底层.提高执行效率的先河.微软DirectX 12与其有异曲同工之妙,而且兼容所有厂商硬件,走得 ...

  7. android metal api,Metal入门002-Metal相关API

    1. MTKView 在MetalKit中提供了一个视图类MTKView,类似于GLKit中GLKView,它是NSView(macOS中的视图类)或者UIView(iOS.tvOS中的视图类)的子类 ...

  8. Apple Watch API的功能

    1.IWatch 的API 2.API的功能 3.通讯机制 4.UI 1.watch的API及功能 WatchKit 框架 WKInterfaceController 生命周期 //初始化watch的 ...

  9. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

最新文章

  1. 设置复杂密码为了防范谁? | 每日趣闻
  2. mysql select符合查询_数据库select group by 和having语句 多表连接查询 复合查询
  3. Atitit 关于处理环保行动联盟和动物解放阵线游击队的任命书 委任状
  4. MassTransitamp;amp;Sagas分布式服务开发ppt分享
  5. web安全---浏览器解析提交数据的过程
  6. eclispe---快捷键设置
  7. mac mysql 8.0.11安装_Mac下安装mysql8.0.11
  8. Pr 入门教程,如何确保剪辑保持同步?
  9. BLP防数据泄露安全操作系统:道里云公司参展英特尔北京IDF峰会产品介绍(二)
  10. 使用python的turtle函数绘制滑稽表情
  11. Python库(x)纯小学生(我)自制
  12. 【系统化学习】CSDN算法技能树测评
  13. pathon包傻瓜升级
  14. 谷歌表格_您应该知道的5种Google表格功能
  15. JS 流行库(三):Zepto
  16. 去法国,买哪些伴手礼既有面子又不破费
  17. Unity中进行网络通信:三:unity客户端和Unity服务端互相发消息
  18. 基于VB图书管理系统的设计与实现
  19. 【报告分享】品牌营销数智化转型白皮书-阿里研究院群邑GroupM(附下载)
  20. 《大教堂与集市》读书笔记

热门文章

  1. android编程多组件布局,Android把多个控件定义成一个整体的布局类使用
  2. p=(1 r) 2c语言编程,菜鸟编程~!1.2
  3. python异常处理_Python 工匠: 异常处理的三个好习惯
  4. mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...
  5. VBA读取html表格内容,科学网—VBA读取word文档表格中table的cell的text文本 - 付安民的博文...
  6. python随机读取字符_利用python3随机生成中文字符的实现方法
  7. 营业税计提及企业所得税的相关计算公式
  8. 使用jsp实现word excel格式报表打印-JSP教程 Jsp/Servlet
  9. 安卓案例:结合volley使用Gson
  10. 【BZOJ3223】文艺平衡树,Splay反转区间