webgl2 方法解析: getActiveUniformBlockParameter()

56 阅读1分钟

getActiveUniformBlockParameter() 是 WebGL2 中用于查询统一变量块(Uniform Block)参数的方法。它允许开发者获取关于着色器中统一变量块的各种信息。

方法签名

any gl.getActiveUniformBlockParameter(program, uniformBlockIndex, pname);

参数说明

  1. program - 包含统一变量块的WebGL程序对象

  2. uniformBlockIndex - 要查询的统一变量块的索引

  3. 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`);

注意事项

  1. 使用此方法前必须确保程序已成功链接
  2. 统一变量块是WebGL2的特性,在WebGL1中不可用
  3. 查询UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES时返回的是数组,其他查询通常返回单个值