看后 Metal 的开发文档后,除了官方所宣称的一些长处外(比方说更easy理解和使用的
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 去完成。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

大约 Apple Metal API 一些想法的更多相关文章

  1. 关于 Apple Metal API 的一些想法

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

  2. JDK的第三个LTS版本JDK17来了

    目录 简介 JDK17中的新特性 语言上的新特性 核心库的优化 支持新的平台 预览特性 其他改动 总结 简介 2021年9月JDK17发布了,JDK17是最新的一个LTS版本.所谓LTS版本就是可以得 ...

  3. 剖析虚幻渲染体系(13)- RHI补充篇:现代图形API之奥义与指南

    目录 13.1 本篇概述 13.1.1 本篇内容 13.1.2 概念总览 13.1.3 现代图形API特点 13.2 设备上下文 13.2.1 启动流程 13.2.2 Device 13.2.3 Sw ...

  4. iOS开发——Metal教程

    Metal Swift教程   学习使用苹果GPU加速3D绘图的新API:Metal!   在iOS 8里,苹果发布了一个新的接口叫做Metal,它是一个支持GPU加速3D绘图的API.   Meta ...

  5. iOS 8 Metal Swift教程(一) :开始学习

    在本篇教程中,你将应用到3D图形中的一系列矩阵变换,并会学习到如下内容: 如何使用模型(model),视图(view)以及投影变换(projection transformations). 如何使用矩 ...

  6. [Apple开发者帐户帮助]六、配置应用服务(4)创建MusicKit标识符和私钥

    要与Apple Music服务进行通信,您将使用MusicKit私钥对一个或多个开发人员令牌进行签名. 首先注册音乐标识符以识别您的应用.为使用Apple Music API的每个应用注册音乐标识符. ...

  7. iOS 13-Sign In with Apple

    最近了解了iOS 13新增功能之Sign In with Apple,Sign In with Apple是跨平台的,可以支持iOS.macOS.watchOS.tvOS.JS.本文主要内容为Sign ...

  8. 主流的 API 架构

    1. RPC:调用另一个系统的函数 2. SOAP:使数据作为服务可用 3. REST:使数据作为资源可用 4. GraphQL:仅请求所需要的数据 1. RPC:调用另一个系统的函数 远程过程调用是 ...

  9. Flink整合面向用户的数据流SDKs/API(Flink关于弃用Dataset API的论述)

    动机 Flink提供了三种主要的sdk/API来编写程序:Table API/SQL.DataStream API和DataSet API.我们认为这个API太多了,建议弃用DataSet API,而 ...

随机推荐

  1. 在Java中使用MD5和BASE64

    MD5: 在上一篇<Servlet的学习之Session(5)>中,为了能使获取的所有随机数都能有相同的位数,我们采用MD5获取随机数的消息摘要(或称数据指纹.数据摘要等等). MD5可以 ...

  2. box-sizing:content-box

    box-sizing:content-box 规定两个并排的带边框的框:

  3. SqlHelper初探之二

    在上一篇简单的介绍了sqlhelper的基本知识,接下来就让我们进一步学习他的实践过程. 首先:我们要明白的一件事Sqlhelper不是写出来的,而是在D层的代码中提炼出来的?那么就会反问一句“D层中 ...

  4. [Android Studio 权威教程]Windows下安装Android Studio

    从AS 0.5版本号開始使用.也是AS的推行者,在ApkBus公布的第一篇Android Studio Perview 2 获得了50K的浏览,1800多条回复下载. 在我的[Android Stud ...

  5. 4. Qt的容器类

      Qt提供来一组通用的基于模板的容器类. 一. QList类,QLinkedList类 和  QVector类         QList类.QLinkedList类和QVector类常常使用到的Q ...

  6. 爱的歌我uhegierhiuerh5怕哦一

    http://www.huihui.cn/share/8424421 http://www.huihui.cn/share/8424375 http://www.huihui.cn/share/842 ...

  7. 实现web多语言的一种解决办法

    实现web多语言可能有多种解决办法,现在分享一种比较简单的思路,这篇文章主要用于记录学习过程,肯定存在不少谬误,欢迎批评指正. web多语言实现最简单的一种方法可能是每一种语言一套代码,但这样存在一个 ...

  8. 一切皆为 JavaScript

    JavaScript起源于Netscape公司的LiveScript语言,这是一种基于对象和事件驱动的client脚本语言.最初的设计是为了检验HTML表单输入的正确性. 早些年,JavaScript ...

  9. Common Lisp Style Guide - Ariel Networks Labs

    Common Lisp Style Guide - Ariel Networks Labs Common Lisp Style Guide

  10. data URI scheme及其应用

    data URI scheme通俗的来讲就是将一张图片直接塞到HTML中而不是通过HTTP请求去获取.这样从表面上看会降低一次HTTP的请求,实现了对于网页的优化(只是看了其它一些文章data URI ...