解決したいこと
WebGL で使用する頂点シェーダーとフラグメントシェーダーの GLSL ES コードは単純な文字列データであればよいので、下記のように JavaScript のコードに埋め込んでしまう方法が最初に思いつきます。
しかし、これだとアプリ側のコードとシェーダーのコードが混ざってしまうので美しくありません。
ここでは、シェーダーコードを分離するいくつかの方法を示します。
script 要素内にシェーダーコードを埋め込む方法
下記のような感じで、頂点シェーダーとフラグメントシェーダー用の script 要素を用意して、そこにコードを埋め込んでしまう方法です。
それぞれのシェーダーコードは、JavaScript コードで下記のようにして取り出すことができます。
import でシェーダーファイルを読み込む方法
ECMAScript 2015 (ES6) の import 構文 を使用すると、別ファイルとして保存した JavaScript ファイルを読み込むことができます。
例えば、下記のように個別の JS ファイルとしてシェーダーコードを保存しておければ、少なくともアプリ側の JS コードにシェーダーコードが埋もれてしまうことは防ぐことができます。
import
を使用するスクリプトの <script>
タグには、type="module"
を指定しておく必要があります。
メインスクリプトを JavaScript ファイルに分離するのであれば次ような感じ。
関連記事