0

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

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

  1. AttachShader(s):在我的情况下,我只需要附加一个新的 Fragment 着色器。(问题:我可以继续使用已编译的着色器吗?)
  2. 链接程序
  3. 使用程序
  4. 获取属性位置
  5. 获取统一位置
4

1 回答 1

1

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

那些允许您编辑着色器的少数应用程序(shadertoy、glslsandbox、vertexshaderart,...)要么制作新的并删除旧的或重用。对一个或另一个没有好处,这只是风格问题。

是的,您可以保留着色器。您可以将着色器与多个程序一起使用。这样做很常见。

如果您更改着色器,它不会影响程序,除非/直到您将该程序重新链接到gl.linkProgram. 任何时候,只要你打电话gl.linkProgram并且它成功了,你以前为该程序的所有统一位置都是过时的,你必须查询新的。

于 2018-08-18T18:15:52.153 回答