我的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。沒有明顯的優勢。我們剛剛交換了瑣碎的重複。
有沒有更好的方法?