gpt4 book ai didi

javascript - 更改程序时是否设置 webgl 制服属性?

转载 作者:行者123 更新时间:2023-12-03 07:38:34 25 4
gpt4 key购买 nike

每次切换程序或渲染时都必须设置制服/属性等吗?比如下面这几行?或者我可以在初始化时设置一次吗?

        gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer);
//gl.enableVertexAttribArray(this.attrCell.a_texCoord);
gl.vertexAttribPointer(this.attrCell.a_texCoord, 2, gl.FLOAT, false, 0, 0);
gl.uniform2f(this.uniformCell.u_resolution, this.canvas.width, this.canvas.height);
gl.bindBuffer(gl.ARRAY_BUFFER, this.posCoordBuffer);
//gl.enableVertexAttribArray(this.attr.a_position);
gl.vertexAttribPointer(this.attrCell.a_position, 2, gl.FLOAT, false, 0, 0);

gl.activeTexture(gl.TEXTURE0 + 0);
gl.bindTexture(gl.TEXTURE_2D, this.texture[0]);
//gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
//gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
//gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
//gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.uniform1i( this.uniformCell['u_image'], 0);

最佳答案

每个 webgl 上下文都有一组属性,每个着色器程序都有自己的一组制服。基本上,属性是所有着色器程序都可以访问的全局变量,并且每个着色器程序都有自己的统一变量实例。

例如,如果您使用着色器 #1 设置属性,当您切换到着色器 #2 时,如果您使用相同的属性,则无需再次重新设置该属性。如果您在着色器 #1 中设置了统一,那么当您切换到着色器 #2 时,即使统一相同,您也需要在着色器 #2 中设置统一。但是,如果您切换回着色器#1,并且仍在使用之前相同的统一集,则无需再次重新设置它,因为您已经第一次设置了它。

另请注意,统一位置和属性位置都是针对每个着色器程序的。例如,对于使用相同纹理的两个程序来说,纹理的统一位置可能不同。属性位置相同。

关于javascript - 更改程序时是否设置 webgl 制服属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com