对于相对昂贵但常量的东西,例如具有运行前用户指定常量的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
答案 0 :(得分:3)
#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);
非常相似
好处是它使您的代码更具可读性?