与其创建新WebGlProgram
的使用gl.createProgram()
,不如继续重用一个好主意?
如果我要重用一个,我列出了我应该执行的步骤:
- AttachShader(s):在我的情况下,我只需要附加一个新的 Fragment 着色器。(问题:我可以继续使用已编译的着色器吗?)
- 链接程序
- 使用程序
- 获取属性位置
- 获取统一位置
你想做什么?99.9% 的 GPU 应用程序制作着色器程序并完成。他们可能会赚 1,他们可能会赚 5000,但他们从来没有处于甚至需要考虑您的问题的位置。那么你真正想要做什么?
那些允许您编辑着色器的少数应用程序(shadertoy、glslsandbox、vertexshaderart,...)要么制作新的并删除旧的或重用。对一个或另一个没有好处,这只是风格问题。
是的,您可以保留着色器。您可以将着色器与多个程序一起使用。这样做很常见。
如果您更改着色器,它不会影响程序,除非/直到您将该程序重新链接到gl.linkProgram
. 任何时候,只要你打电话gl.linkProgram
并且它成功了,你以前为该程序的所有统一位置都是过时的,你必须查询新的。