重用 WebGLProgram 是个好主意吗?

Is reusing a WebGLProgram a good idea?

与其使用 gl.createProgram() 创建新的 WebGlProgram,不如继续重复使用一个是个好主意吗?

我列出了如果要重用一个我应该执行的步骤:

  1. AttachShader(s):在我的例子中,我只需要附加一个新的片段着色器。 (问题:我可以挂在编译好的着色器上吗?)
  2. 链接程序
  3. 使用程序
  4. getAttribLocation
  5. 获取统一位置

你想做什么? 99.9% 的 GPU 应用程序制作着色器程序并完成。他们可能赚到 1,他们可能赚到 5000,但他们从来没有处于他们甚至需要考虑您的问题的位置。那么你到底想做什么?

少数允许您编辑着色器的应用程序(shadertoy、glslsandbox、vertexshaderart 等)要么创建新的并删除旧的,要么重复使用。两者没有任何好处,只是风格问题。

是的,您可以坚持使用着色器。您可以在多个程序中使用着色器。这样做很常见。

如果您更改着色器,它不会影响程序 unless/until 您将该程序与 gl.linkProgram 重新链接。任何时候您调用 gl.linkProgram 并且它成功时,该程序以前的所有统一位置都已过时,您必须查询新的位置。