WebGL:在着色器之间切换

WebGL:在着色器之间切换,webgl,shader,Webgl,Shader,我编写了一个在着色器之间切换的小函数,但不幸的是它不起作用。 我创建着色器并将其作为着色器对象返回 program=gl.createProgram(vs,fs,“顶点显示”、“纹理命令”、“顶点法线”) depthprogram=gl.createProgram(vs,fs,“VertexPosition”,false,false) 我在更新功能中使用开关功能,包括: function Update(){ gl.switchProgram(program);

我编写了一个在着色器之间切换的小函数,但不幸的是它不起作用。 我创建着色器并将其作为着色器对象返回

  • program=gl.createProgram(vs,fs,“顶点显示”、“纹理命令”、“顶点法线”)

  • depthprogram=gl.createProgram(vs,fs,“VertexPosition”,false,false)

  • 我在更新功能中使用开关功能,包括:

        function Update(){ 
                gl.switchProgram(program);
                gl.Draw(Teapot, cam);
        };
    
    在绘图功能中绑定模型的所有缓冲区(参数:模型、相机位置)

    以下是导致的错误:WebGL:无效的\u操作:抽屉元素:属性未正确设置 如果我发表评论,一切正常,但我无法切换:(


    两个着色器是否使用相同的属性? 据我从您的代码得出的结论,第一个着色器使用:

    attribute vertexPos;
    attribute vertexNormal;
    attribute textureCoord;
    
    而第二只会用

    attribute vertexPos;
    
    如果尝试发送程序的顶点着色器中未使用的属性,或者未发送顶点着色器请求的属性,则会收到警告。 我想说的是,虽然第一个着色器需要vertexNormal和TextureOrd,但您不发送它们

    希望这有帮助

    attribute vertexPos;
    attribute vertexNormal;
    attribute textureCoord;
    
    attribute vertexPos;