什么是OpenGL中的"active"统一块



OpenGL文档不太清楚什么是活动的统一块(而不是那些不活跃的(。所以我的理解是,这是关于它们在着色器程序中被引用/使用......还是它!

请考虑以下着色器程序:

顶点着色器

#version 300 es
precision highp float;
layout(std140) uniform globals
{
    mat4 world_view_proj;
};
layout(std140) uniform foo
{
    vec3 bar;
};
layout(std140) uniform dog
{
    vec3 cat;
};
layout(location = 0) in vec4 position0;
layout(location = 4) in lowp vec4 color0;
out lowp vec4 v_color;
void main ( )
{
    v_color = color0;
    gl_Position = position0 * world_view_proj;
}

片段着色器

#version 300 es
precision highp float;
in lowp vec4 v_color;
layout(location = 0) out lowp vec4 frag_color;
void main()
{
    frag_color = v_color;
}

即使我不使用foodog统一块,查询以获取活动统一块的数量......

GLint count = 0;
glGetProgramiv(program, GL_ACTIVE_UNIFORM_BLOCKS, &count);
for (auto i = 0; i < count; ++i) {
    ...
}

。对于此着色器程序,始终返回 3。无论我在Android,iOS还是WebGL2上运行,我都会得到相同的结果。我还没有在桌面OpenGL上测试过(与OpenGL ES 3.0相比(,但我不希望有不同的结果(但我想它可以吗?

  1. 那么,一个统一的块处于活动状态意味着什么呢?
  2. 有没有办法只检索用过的统一块(跳过未使用的块(?

谢谢!

未使用的统一块可以通过实现进行优化。但它可能也不好;这一切都取决于实施。OpenGL不需要实现来优化未使用的制服或块;它只是允许这种可能性。

没有办法保证获取正在使用的统一块。

相关内容

  • 没有找到相关文章

最新更新