当我像这样在着色器中编写uniformBuffer时。
uniform Material {
uniform vec4 u_DiffuseColor;
uniform vec4 u_TilingOffset;
uniform vec3 u_MaterialSpecular;
uniform float u_AlphaTestValue;
uniform float u_Shininess;
};
gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS) 和 gl.getActiveUniform(program, i) 仍然包含uniformBuffer项(例如u_DiffuseColor,它是多余的!),我发现的唯一一件事是gl.getUniformLocation(program, uniName) ) 将返回 null。
是否有另一种更好的方法可以让我获得不包含uniformBuffer项目的制服,因为我应该用两种不同的方式处理它们。
How can I find a list of all the uniforms in OpenGL es 2.0 vertex shader pro 当使用 opengles3.0 在着色器中使用uniformBuffer block 时,这可能不是最好的方法
最佳答案
给定一些事件统一索引列表,您可以使用 getActiveUniforms
查询该列表中每个项目的属性值。可查询的属性之一是UNIFORM_BLOCK_INDEX
,它是uniform所属的uniform block 的索引。如果它不是任何 block 的成员,则该值为-1。
基本上,您构建一个所有统一索引(0 到 ACTIVE_UNIFORMS - 1)的列表,查询它们的 block 索引,然后仅查询 block 索引为 -1 的索引的属性.
或者,您可以使用getActiveUniformBlockParameter
查询每个事件 block (0到ACTIVE_UNIFORM_BLOCKS
- 1)的统一索引列表,这些索引是该 block 的成员,传递 UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
作为要查询的属性。因此,任何不在这些列表之一中的统一索引都不是 block 的成员。
关于glsl - webgl2.0我如何获得除uniformBuffer项目之外的所有制服,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60933510/