# WebAssembly と OpenGL(WebGL) と Tensorflow.js の関係性について
###### tags: `Learning`
調査日:2018年06月17日から未定
## 調査前の戯言
WebAssemblyはJavaScriptから中間言語へコンパイルしたコードを実行する規格であり、WebGLのようなAPIなどとの関係性及び、Tensorflow.jsのようなJavaScriptライブラリ(内部的にはWebGLを用いていると思われるが)との直接的な関係性を問うことは微妙におかしい。とは言え、今後これらの3つを互いに利用し、画像系のソフトウェアをウェブブラウザで提供することはかなり一般的になると考えられる。
それらの現在状況にキャッチアップするため、これらの3つの技術の関連性について調査することとした。
具体的には
- 具体的な利用方法
- それぞれのAPIの利用方法
- Input、Output
- それらの相互変換方法
を理解すれば概ね問題ないように思っているので、そのあたりについて調査をしよう。
## 調査
### WebAssenbly
#### 概要
#### 利用可能な言語
- C/C\+\+
- Rust
- C#
- LLVM対応言語(?/少々怪しい)
- Swift/Objective-C
参考文献: https://blog.htmlhifive.com/2018/05/08/webassembly-language/
#### 利用方法
### WebAssenbly + WebGL
現行のモデルでは、直接JavaScriptのオブジェクトのメソッド(WebAPI)をWebAssenbly側から呼ぶことはできないため、WebAssenblyを用いることによってWebGLアプリケーションを書く意味は薄いように思われる。実際、現行のC/C\+\+のEMScripenによるOpenGL(WebGL)の実装では、Worker側とClient側と分けてサーバークライアントを立て、メッセージをやり取りすることによってWebGLのメソッドを呼び出しているようである。
将来的には、[JavaScriptのオブジェクトをWebAssenbly側から直接呼び出すことが可能になる計画がある](https://github.com/WebAssembly/gc/blob/master/README.md)がまだ利用はできないので、現時点で積極的にC/C++を利用してのWebAssembly+WebGL開発は効果が薄いであろう。ただし、既存資産を流用しブラウザ上で動作を行いたい場合については除く。
参考文献: https://medium.freecodecamp.org/how-to-use-webgl-shaders-in-webassembly-1e6c5effc813