重用 WebGLProgram 是个好主意吗?
Is reusing a WebGLProgram a good idea?
与其使用 gl.createProgram()
创建新的 WebGlProgram
,不如继续重复使用一个是个好主意吗?
我列出了如果要重用一个我应该执行的步骤:
- AttachShader(s):在我的例子中,我只需要附加一个新的片段着色器。 (问题:我可以挂在编译好的着色器上吗?)
- 链接程序
- 使用程序
- getAttribLocation
- 获取统一位置
你想做什么? 99.9% 的 GPU 应用程序制作着色器程序并完成。他们可能赚到 1,他们可能赚到 5000,但他们从来没有处于他们甚至需要考虑您的问题的位置。那么你到底想做什么?
少数允许您编辑着色器的应用程序(shadertoy、glslsandbox、vertexshaderart 等)要么创建新的并删除旧的,要么重复使用。两者没有任何好处,只是风格问题。
是的,您可以坚持使用着色器。您可以在多个程序中使用着色器。这样做很常见。
如果您更改着色器,它不会影响程序 unless/until 您将该程序与 gl.linkProgram
重新链接。任何时候您调用 gl.linkProgram
并且它成功时,该程序以前的所有统一位置都已过时,您必须查询新的位置。
与其使用 gl.createProgram()
创建新的 WebGlProgram
,不如继续重复使用一个是个好主意吗?
我列出了如果要重用一个我应该执行的步骤:
- AttachShader(s):在我的例子中,我只需要附加一个新的片段着色器。 (问题:我可以挂在编译好的着色器上吗?)
- 链接程序
- 使用程序
- getAttribLocation
- 获取统一位置
你想做什么? 99.9% 的 GPU 应用程序制作着色器程序并完成。他们可能赚到 1,他们可能赚到 5000,但他们从来没有处于他们甚至需要考虑您的问题的位置。那么你到底想做什么?
少数允许您编辑着色器的应用程序(shadertoy、glslsandbox、vertexshaderart 等)要么创建新的并删除旧的,要么重复使用。两者没有任何好处,只是风格问题。
是的,您可以坚持使用着色器。您可以在多个程序中使用着色器。这样做很常见。
如果您更改着色器,它不会影响程序 unless/until 您将该程序与 gl.linkProgram
重新链接。任何时候您调用 gl.linkProgram
并且它成功时,该程序以前的所有统一位置都已过时,您必须查询新的位置。