Google angle 学习笔记 一、编译

因为想搞跨平台的工具,之前有学习过BGFX。

bgfx 采取的跨平台方式是抽象,渲染器后端多种多样,bgfx抽象了一套渲染api。

在shader这一块也是抽象,抽象了自己的shader语言,有点像glsl,然后通过宏替换静态编译。


实际搞了一圈总觉得哪里差点什么东西。为了兼容而抽象,实际上导致各个平台使用的资源不同,bgfx引入了一个多出来的编译shader的过程。

这个跨平台是做的不够优雅的。

而且还要考虑到webgl这一层,套一个抽象壳会加重对浏览器的压力。


我是一个不断求索的人,bgfx差的那一点点总觉得好像在哪里见过,突然一天灵光乍现,想起来了,这不就是 google angle吗?

Angle是chrome浏览器底层的webgl提供者,因为webgl就是基于gles2 ,webgl2 基于gles3,所以angle主要的目标就是让不同平台的不同渲染器都可以来执行gles,所以他是almost native.

这让angle成了一个事实上的跨平台渲染器,而且比bgfx做的更好,不需要shader抽象,不需要api抽象。他表现出的外在就是gles。


wps1

如图所示,angle 2011年10月的版本已经完成了gles2 的全部平台兼容,gles3 的 metal差一点点,metal差那一点不算啥,从图上看,只影响ios

3.1 3.2的完成度不高,这也不重要,我们的目标从一开始就是一个gles3级别的跨平台渲染器。而且还有在ios直接用原生gles3 这个选项……,苹果也不可能禁止使用gles3的。实际上现在的angel metal也是已经能跑的,只是还在开发中,google的资料不多,不知道还有哪些test没通过。


Google 有文档

https://chromium.googlesource.com/angle/angle/+/HEAD/doc/DevSetup.md

注,大量操作需要FQ,这个我就管不着了

1.安装python

Depot_tools 在windows 下只认通过微软商店安装的python

我安装了python 3.10

2.安装depot_tools

https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up

wps2

在windows 下要做四个动作

A.下载包

B.找个地方解开

C.添加path

D.执行gclient

3. 获取代码


下面的操作开个命令行 连续操作

先加一个这,要不然后续会需要到googlestore下东西,google文档把这个写在后面,出错了以后才发现,就只能再来一遍了

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

注意,这行黄字非常重要,不加你一会儿就得删除目录重新fetch

mkdir angle

cd angle

fetch angle

这个fetch 是 depot_tools包含的,之前你添加过路径,这里就可以

这会自己下载安装代码以及各种依赖

4. 安装vs2022 vc 桌面环境

注意 windows sdk 必须安装 10.0.20348

wps3

wps4

还需要sdk里的调试工具,注意这个安装位置比较奇妙,我花了一段时间才摸索到,如图

5.编译

产生输出目录

gn gen out/Debug

开始编译

autoninja -C out/Debug

5.A.编译release

gn gen out/Release

gn args out/Release

修改参数,会弹出一个记事本,在里面加一行

is_debug = false

然后保存退出

开始编译

autoninja -C out/Release

5.B. VS编译

如果你不要antoninja,想观察更多,用VS来编译更合适

可以试试这样

gn gen out/VSDebug --sln=angle-debug --ide=vs2022

可以产生一个vs解决方案


6.翻翻例子

image

想看代码就用5.b 生成一份vs代码看,他的使用就像egl一样

不出以外的话 lib_egl 和 lib_glesv2 两个文件带走就行了,写代码和 gles一样,实际上在pc的首选渲染后端是dx11.

但是我不要关心dx11的shader,vulkan的shader,全部按照gles 给你glsl 300 就完了。


不需要任何额外的抽象api和shader,这才是我心目中完美的跨平台渲染API。



下一步

更多实践未完持续。


如果将来想要新api的特性怎么办?


这一次我们的目标是 webgl2 相当的跨平台工具,那么googleangle 刚好可以满足需求。

下一次我们的目标就是 webgpu 相当的跨平台工具,google可能没有像angle这样抽个项目出来,但是源码就在chrome里啊,webgpu的实现后端有三个 dx12 vulkan metal。chrome里还是分别不同的平台实现不同的webgpu相应的处理,去chrome里面扒呗。^_^开源真棒。

posted @ 2022-09-07 17:13  疯光无线  阅读(1377)  评论(0编辑  收藏  举报