Next.js
でgl-react
を使ってGLSL
を使っていますが、文字列直書きなのが気になり始めたので.frag
や.vert
などのGLSL
ファイルに分けて管理しようと思います。
具体的にはwebpack
のローダーを追加して読み込めるようにした覚書き。
他のモジュールバンドラでも文字列読み込みはあると思いますが、大体の環境ではBabel
でトランスパイルしてwebpack
でバンドルしてると思います(主観)。
raw-loader
とglslify-loader
raw-loader
はファイルを文字列として読み込むローダーです。
基本的なGLSL
ならこれだけでOK。
glslify-loader
はglslfy
されたファイルを読み込むローダーです。
GLSL
自体をモジュール化などして管理するならこちらも使います。
必要がないときに入れて問題が起きるわけではないですが読み込み時に#define GLSLIFY 1
などが追加されます。
1 2 3 |
npm i -D raw-loader glslify-loader or yarn add -D raw-loader glslify-loader |
webpackの設定
webpack
単体だとサンプル通りwebpack.config.js
のmodule
に追記するだけです。
Next.js
でwebpack
機能をいじるにはnext.config.js
を書き換えます(Doc)。
今回の場合はこんな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 |
webpack: (config, options) => { config.module.rules.push({ test: /\.(glsl|frag|vert)$/, use: [ options.defaultLoaders.babel, { loader: "raw-loader" }, { loader: "glslify-loader" }, ], exclude: /node_modules/, }); return config; }, |
これで適当なところに置いたGLSL
ファイルを読み込めるようになりました。
1 2 3 |
import sepia from "@components/glsl/frags/sepia.frag"; or const { default: sepia } = require("@components/glsl/frags/sepia.frag"); |