我想在各种function showDowntown() {
var x = document.getElementById("Downtown");
if (x.style.display === "") {
x.style.display = "block";
} else {
x.style.display = "";
}
}
文件中使用相同的噪波功能,而不必每次都复制和粘贴代码。
实现此目的的处理方式是什么?
答案 0 :(得分:0)
Afaik,在处理中无法动态地做到这一点。但是,您可以使用glslify
(这是GLSL编译时包含系统)单独编译着色器。
glslify
(https://github.com/glslify/glslify)有点过分。每当我创建OpenGL / GLSL应用程序时,我都会滚动自己的系统。
诸如此类(取自我的Java OpenGL Minecraft克隆here):
private static String process(String code){
String[]lines=code.split("\n");
for(int i=0;i<lines.length;i++){
if(lines[i].startsWith("#include : ")){
lines[i]=process(Utils.loadFile("path_to_include_directory/"+lines[i].replace("#include : ","")+".glsl"));
}
}
StringBuilder str= new StringBuilder();
for(String s:lines){
str.append(s).append("\n");
}
return str.toString();
}
此代码对包含文件进行复制粘贴。用法:
///// MAIN FILE
#include : bar_module
float foo(vec3 p){
return bar(p * 5.0);
}
///// path_to_include_directory/bar_module.glsl
float bar(vec3 p) {
/* ... ... */
}
这是一个在运行时相当有效的递归包含机制。无需静态编译! 唯一的缺点是没有检测到循环依赖。但是无论如何,您都不应该处于循环依赖的情况下:)
免责声明 我实际上不记得这些东西是如何工作的,但是我认为这是一般的想法:
File file=new File("my_shader.vert");
file.setContents(process(file.readContents()));
PShader my_shader=new PShader("my_shader");
注意:setContents
和readContents
实际上并不存在,但您知道了:)
PS Utils.loadFile返回以字符串形式传入的文件名的内容。