重用WebGLP程序是个好主意吗?

重用WebGLP程序是个好主意吗?,webgl,webgl2,Webgl,Webgl2,与其使用gl.createProgram()创建新的WebGlProgram,不如继续重用它 我列出了如果我要重用一个,我应该执行的步骤: AttachShader(s):在我的例子中,我只需要附加一个新的片段着色器。(问题:我可以使用编译的着色器吗?) 链接程序 使用程序 获取属性 getUniformLocation 你想干什么?99.9%的GPU应用程序制作着色器程序,并已完成。他们可能会赚1,他们可能会赚5000,但他们永远不会在一个甚至需要考虑你的问题的位置。那你到底想做什么 允许您编

与其使用
gl.createProgram()
创建新的
WebGlProgram
,不如继续重用它

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

  • AttachShader(s):在我的例子中,我只需要附加一个新的片段着色器。(问题:我可以使用编译的着色器吗?)
  • 链接程序
  • 使用程序
  • 获取属性
  • getUniformLocation

  • 你想干什么?99.9%的GPU应用程序制作着色器程序,并已完成。他们可能会赚1,他们可能会赚5000,但他们永远不会在一个甚至需要考虑你的问题的位置。那你到底想做什么

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

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


    如果更改着色器,它不会影响程序,除非/直到您使用
    gl.linkProgram
    重新链接该程序。无论何时调用
    gl.linkProgram
    ,如果调用成功,则该程序以前的所有统一位置都已过时,您必须查询新位置

    我认为您的问题将从一个示例代码中受益匪浅,该示例代码展示了您试图完成的工作。为什么要重用旧程序?挂起已编译的着色器是什么意思?请提供一些例子来说明你想做什么。我同意这个问题过期,或者我甚至可能要求删除它。问题是,一旦我开始写下需要做什么,那么我就已经回答了我的问题。谢谢你,格曼。缓存程序的原因与缓存纹理、编译着色器的原因相同,任何可以提高性能的东西后来我意识到,如果我缓存整个程序及其链接的着色器和属性/统一位置,我就有更好的机会提高我的应用程序的性能,而不仅仅是尝试重用一个程序。