- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每次切换程序或渲染时都必须设置制服/属性等吗?比如下面这几行?或者我可以在初始化时设置一次吗?
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/
有什么方法可以防止着色器编译器删除它检测到未使用的统一/属性?我偶尔会注释掉我的着色器的一部分进行测试,但这会导致我程序的其余部分出现问题,因为突然某些名称不再存在(从而导致查找错误,并在尝试设置值时
在做了一些没有额外库 + GLSL 着色器的“常规”WebGL 之后,我开始使用 ThreeJS 的 WebGL 渲染器。我现在正在尝试在我的 ThreeJS 程序中编写自定义着色器,我注意到 Thr
我正在使用 创建效果 hr = D3DXCreateEffectFromFile( g_D3D_Device, shaderPath.c_str(), macros,
我不知道制服在内存中是如何表示的。 制服似乎会占用宝贵的寄存器空间,但它们最终会传入/通过/传出到全局内存中,对吗? 制服不用时情况会发生变化吗?编译器可以将它们优化掉吗?--在这种情况下,我已经将无
我正在尝试从 Blender 导出一个带有纹理的对象。导出的 JSON 如下所示: { "metadata" : { "formatVersion" : 3.1,
我通过 this book 逐步学习 WebGL .我尝试通过使用缓冲区 (gl.ARRAY_BUFFER) 而不是循环来绘制三个点(正如我之前在本书的其他示例中所做的一样)。 var u_Fra
假设我有四个浮点值想要发送到着色器,以下哪一个是发送它们的最佳方式。 将它们作为单独的 float 发送: uniform float uniformValue1; uniform float uni
如果我正在进行实例化渲染并且需要将每个实例一个 mat4 发送到顶点着色器,对于大量实例,哪种方法可能更快? 使用实例化的 mat4 属性 (glVertexAttribDivisor) 并将 mat
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!