私のHTMLページ(pipad.org/tmp/fourier02.html)は、二つのシェーダ含まれています。私はoversimplifyingないよ願ってい2つのGLSLシェーダの間で共有機能のためのコードの重複を回避
<script type="application/glsl" id="shaderA">
uniform vec4 a;
vec4 f(vec4 x, vec4 y){ ... } // DUP
vec4 main(vec4 u, vec4 v) { return f(a,u); }
</script>
<script type="application/glsl" id="shaderB">
uniform vec4 a;
vec4 f(vec4 x, vec4 y){ ... } // DUP
vec4 main(vec4 u) { return f(a,u); } // notice main's sig is different
</script>
を、私は持っていること私がいれば改訂する。これらのシェーダはさまざまな方法で使用されます(shaderBはRTTです)。
わかるように、f
はどちらの場合も同じです。
2度書くことを避ける方法はありますか?私が見ることができる
唯一の方法は、構文は、もはや作品を強調していないし、あなたがしなければならないので厄介である、文字列としてシェーダを保っている。
:
var
f =
"vec4 f(vec4 x, vec4 y){\n" +
"...\n" +
"}\n",
shaderA = f +
"uniform vec4 a;\n" +
"vec4 main(vec4 u, vec4 v) { return f(a,u); }\n",
shaderB = f +
"uniform vec4 a;\n" +
"vec4 main(vec4 u) { return f(a,u); }\n"
;
など
であります...メー。オリジナルよりも明らかな利点はありません。私たちはちょうど嬉しさのために重複を交換しました。
良い方法がありますか?