Meine HTML-Seite (pipad.org/tmp/fourier02.html) enthält zwei Shadern:Vermeidung von Code-Duplizierung für eine Funktion geteilt zwischen zwei GLSL Shadern
<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>
ich hoffe ich bin nicht zu stark zu vereinfachen, kann ich zu überarbeiten, wenn ich es bin. Diese Shader werden auf verschiedene Arten verwendet (ShaderB ist RTT).
Wie man sieht, ist f
in beiden Fällen identisch.
Gibt es eine Möglichkeit zu vermeiden, es zweimal zu schreiben?
Der einzige Weg, ich sehe die Shadern als Strings hält, was unordentlich ist, weil Syntax nicht mehr hervorheben funktioniert und was Sie tun müssen:
:
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"
;
usw.
das ist ... meh. Kein klarer Vorteil gegenüber dem Original. Wir haben gerade die Duplikation gegen Ickness ausgetauscht.
Gibt es einen besseren Weg?