代码之家  ›  专栏  ›  技术社区  ›  marcgfx

webgl替换程序着色器

  •  0
  • marcgfx  · 技术社区  · 9 年前

    我正在尝试交换程序中使用的fragement着色器。片段着色器都有相同的变量,只是计算不同。我试图为较低级别的硬件提供替代着色器。

    我最终得到了单色输出(而不是纹理),有人知道我可能做错了什么吗?我知道正在使用着色器,因为颜色会相应变化。

         //if I don't do this: 
         //WebGL: INVALID_OPERATION: attachShader: shader attachment already has shader
    gl.detachShader(program, _.attachedFS);
         //select a random shader, all using the same parameters
    attachedFS = fragmentShaders[~~(Math.qrand()*fragmentShaders.length)];
         //attach the new shader
    gl.attachShader(program, attachedFS); 
         //if I don't do this nothing happens
    gl.linkProgram(program);
         //if I don't add this line:
         //globject.js:313 WebGL: INVALID_OPERATION: uniform2f: 
         //location not for current program
    updateLocations();
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   c0r3D    9 年前
    • 我假设您已经调用了gl.compileShader(fragmentShader);
    • 您是否尝试删除片段着色器(gl.deleteShader(attachedFS);)就在拆下它之后。这个 以前的着色器在内存中可能仍有指针。
        2
  •  0
  •   marcgfx    9 年前

    在尝试了所有其他事情之后,我发现了这个问题。这也解释了为什么我看到着色器发生了变化,但只是得到了一个平面颜色。我没有更新某些属性。