防止webgl glsl自动内联功能?

时间:2019-02-16 22:34:28

标签: glsl webgl inlining

在我的GLSL代码中,我有多次调用的大型函数。

例如,在我的perlin杂讯函数中,我多次运行哈希函数。

float perlinNoise (...) {
    ...
    float x0y0z0 = pcgUnit3(seedminX,seedminY,seedminZ);
    float x0y0z1 = pcgUnit3(seedminX,seedminY,seedmaxZ);
    float x0y1z0 = pcgUnit3(seedminX,seedmaxY,seedminZ);
    float x0y1z1 = pcgUnit3(seedminX,seedmaxY,seedmaxZ);
    float x1y0z0 = pcgUnit3(seedmaxX,seedminY,seedminZ);
    float x1y0z1 = pcgUnit3(seedmaxX,seedminY,seedmaxZ);
    float x1y1z0 = pcgUnit3(seedmaxX,seedmaxY,seedminZ);
    float x1y1z1 = pcgUnit3(seedmaxX,seedmaxY,seedmaxZ);
    ...
}

在程序生成算法中,我多次调用了perlin噪声函数。

我注意到,每当我添加对perlin noise函数的调用时,着色器的编译时间就会花费更长的时间。我认为问题在于glsl内联函数调用,因此着色器代码变得非常大。

我是否对内联进行了纠正,如果可以,如何防止其发生?

1 个答案:

答案 0 :(得分:0)

GLSL_ES_Specification_1.00的第13页上,介绍了如何设置实用指示语

  • #pragma Optimize(关闭)
  • #pragma debug(on)

那将是“内联”情况。 “我对内联是否正确..”。就我所知,不。也不太确定后台发生了什么。在Windows上,它已转换为ANGEL,也许看看源代码可能会有所帮助。

通常:尝试降低岁差,请考虑三位数1.000可能足够“不错”。浮点数只能存储5 -6位数字。避免分支。那应该是急救孩子。

一些调试器工具随处可见(请自行研究)

Optimizer