Skia を Vulkan, SwiftShader 有効でビルドするメモ


## 準備

* **python2** 環境! gn というよくわからない Google ツールが python2 でないと動きません. gn はバイナリなので, `python2 ./bin/gn` みたいなのができません. conda あたりで python2 環境を作っておくとよいでしょう. `PYTHON` 変数で指定という手もあるかも?
* ninja とか(https://skia.org/user/download の dept_tool を使うのも手)

## セットアップ

https://skia.org/user/build

を参考に,

```
$ python2 tools/git-sync-deps
```

して依存ライブラリなどを引いておきます.

### Shared Linux 

`is_official_build=true` だと, 一部の依存ライブラリは, skia の third_party フォルダのものではなく, システムの dll を使います.

fontconfig(+ expat), libjpeg, unicode(icu), vulkan, webp を求められます.

```
$ sudo apt install libfontconfig1-dev libjpeg-dev libicu-dev libvulkan-dev libwebp-dev
```

で関連ライブラリをインストールしておきます.
libpng, X11 関連も必要かもしれません.


## Vulkan 

`skia_use_vulkan=true` を gn の引数 or `args.gn` ファイルに記載して gn 実行します.


例

```
$ bin/gn gen out/Shared --args='is_official_build=true is_component_build=true skia_use_vulkan=true'
```

libskia.so を ldd すると以下となりました.

```
	linux-vdso.so.1 (0x00007ffce21b9000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f19583fc000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f19581dd000)
	libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f1957f51000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f1957d34000)
	libicuuc.so.60 => /usr/lib/x86_64-linux-gnu/libicuuc.so.60 (0x00007f195797d000)
	libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f1957715000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f19574e3000)
	libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f195722f000)
	libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f1956fea000)
	libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f1956db8000)
	libwebp.so.6 => /usr/lib/x86_64-linux-gnu/libwebp.so.6 (0x00007f1956b4f000)
	libwebpdemux.so.2 => /usr/lib/x86_64-linux-gnu/libwebpdemux.so.2 (0x00007f195694a000)
	libwebpmux.so.3 => /usr/lib/x86_64-linux-gnu/libwebpmux.so.3 (0x00007f1956740000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f19563b7000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1956019000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1955e01000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1955a10000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1959095000)
	libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f19557df000)
	libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f1955529000)
	libicudata.so.60 => /usr/lib/x86_64-linux-gnu/libicudata.so.60 (0x00007f1953980000)
	libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f1953648000)
	libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f1953420000)
	libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f195321c000)
	libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f1953016000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f1952e01000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f1952bf9000)
```

## SwiftShader 有効でビルドする

https://skia.googlesource.com/skia/+/master/docker/skia-with-swift-shader-base/build.sh

にあるように,

`skia_use_egl = true` あたりを設定し, SwiftShader の include を見るように `args.gn` を設定して gn します.

ただ, こちらで Linux 環境で試したところ, viewer は画面が真っ黒になってしまいました.
 
## TODO

* [ ] Skia を Pure CPU rendering(Vulkan backend + SwiftShader Vulkan, Skia EGL + SwiftShader)で動かせるか試す
  * CPU レンダリングや, offscreen レンダリング周りの SKia のドキュメント, サンプルコードがなさすぎてつらい