我的HTML页面(pipad.org/tmp/fourier02.html)之间共享包含两个着色器:一个函数避免重复代码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>
我希望我没有简单化,我可以有如果我是修改。这些着色器以不同的方式使用(着色器B是RTT)。
可以看出,f
在两种情况下都是相同的。
有没有办法避免两次写?
我能看到的唯一方法是保持着色器为字符串,因为语法高亮不再工作这是混乱的,你要做的:
:
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"
;
等
这是... MEH。没有明显的优势。我们刚刚交换了琐碎的重复。
有没有更好的方法?