对于一些相对昂贵但不变的东西,例如带有运行前用户指定常量的 pow(),是否可以使用 define 来减少运行时计算?或者 define 的每次出现都会被它定义的内容替换吗?

例如,这样做有什么好处:

#define MENGER_ITER 3
#define MENGER_ITER_POW pow(3.0, -float(MENGER_ITER))

// ...other code
return (length(max(abs(vec3(x, y, z))-1.0, 0.0))-0.25)*MENGER_ITER_POW;
// ...other code

与此相反:
// ...other code
return (length(max(abs(vec3(x, y, z))-1.0, 0.0))-0.25)*pow(3.0, -float(MENGER_ITER));
// ...other code

最佳答案

#define 只是做一个文本替换

对于你的情况,它与

shaderSource = shaderSource.replace(/MENGER_ITER_POW/g, "pow(3.0, -float(MENGER_ITER))");
shaderSource = shaderSource.replace(/MENGER_ITER/g, "3");
gl.shaderSource(someShader, shaderSource);

它与 the C/C++ preprocessor 非常相似

好处是它使您的代码更具可读性?

关于GLSL 定义计算还是替换文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27118133/

10-12 03:23