uniformBlockBinding()
是 WebGL2 中用于将统一变量块(Uniform Block)绑定到特定绑定点的方法。
功能描述
uniformBlockBinding()
方法用于将着色器程序中的统一变量块关联到一个绑定点,这样可以通过该绑定点将缓冲区对象(UBO)与统一变量块连接起来。
方法签名
js
void WebGL2RenderingContext.uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
参数说明
program
: 包含统一变量块的 WebGL 程序对象uniformBlockIndex
: 统一变量块的索引,可通过getUniformBlockIndex()
获取uniformBlockBinding
: 要绑定到的绑定点索引(0 到MAX_UNIFORM_BUFFER_BINDINGS
-1 之间的整数)
使用示例
js
// 首先获取统一变量块索引
const uniformBlockIndex = gl.getUniformBlockIndex(program, "LightBlock");
if (uniformBlockIndex !== gl.INVALID_INDEX) {
// 将统一变量块绑定到绑定点0
gl.uniformBlockBinding(program, uniformBlockIndex, 0);
// 创建并绑定UBO到同一绑定点
const ubo = gl.createBuffer();
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
gl.bufferData(gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW);
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
}
相关概念
- 统一变量块(Uniform Block) : GLSL中组织多个统一变量的结构
- 统一缓冲区对象(UBO) : 存储统一变量块数据的缓冲区对象
- 绑定点(Binding Point) : 连接统一变量块和UBO的桥梁
注意事项
- 绑定点是全局的,同一个绑定点可以被多个程序使用
- 绑定操作需要在绘制调用前完成
- 最大绑定点数量可通过
gl.getParameter(gl.MAX_UNIFORM_BUFFER_BINDINGS)
查询 - 此方法仅在WebGL2中可用
典型工作流程
- 获取统一变量块索引 (
getUniformBlockIndex
) - 将块绑定到绑定点 (
uniformBlockBinding
) - 创建UBO并填充数据
- 将UBO绑定到同一绑定点 (
bindBufferBase
或bindBufferRange
)