getActiveUniformBlockParameter() 是 WebGL2 中用于查询统一变量块(Uniform Block)参数的方法。它允许开发者获取关于着色器中统一变量块的各种信息。
方法签名
any gl.getActiveUniformBlockParameter(program, uniformBlockIndex, pname);
参数说明
-
program - 包含统一变量块的WebGL程序对象
-
uniformBlockIndex - 要查询的统一变量块的索引
-
pname - 指定要查询的参数类型,可以是以下值之一:
gl.UNIFORM_BLOCK_BINDING- 返回统一变量块的绑定位置gl.UNIFORM_BLOCK_DATA_SIZE- 返回统一变量块的数据大小(以字节为单位)gl.UNIFORM_BLOCK_NAME_LENGTH- 返回统一变量块名称的长度(包括null终止符)gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS- 返回块中活动统一变量的数量gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES- 返回包含块中活动统一变量索引的数组gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER- 返回布尔值,指示统一变量块是否被顶点着色器引用gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER- 返回布尔值,指示统一变量块是否被片段着色器引用
返回值
根据查询的pname参数,返回不同类型的值:
- 数值(对于大小、长度、计数等查询)
- 布尔值(对于引用查询)
- 数组(对于索引查询)
使用示例
// 获取程序中第一个统一变量块的数据大小
const program = ...; // 已链接的WebGL程序
const blockIndex = 0;
const dataSize = gl.getActiveUniformBlockParameter(
program,
blockIndex,
gl.UNIFORM_BLOCK_DATA_SIZE
);
console.log(`Uniform block data size: ${dataSize} bytes`);
注意事项
- 使用此方法前必须确保程序已成功链接
- 统一变量块是WebGL2的特性,在WebGL1中不可用
- 查询
UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES时返回的是数组,其他查询通常返回单个值