我即将实现一些使用统一缓冲区对象的功能,在此之前,我试图了解UBO的局限性。例如,让我们使用这些GL_MAX_*
值和这个简单的片段着色器:
- GL_MAX_UNIFORM_BUFFER_BINDINGS -> 84
- GL_MAX_UNIFORM_BLOCK_SIZE -> 16384
- GL_MAX_VERTEX_UNIFORM_BLOCKS -> 14
#version 330 core
layout (location = 0) in vec3 aPos;
// UBO
layout (std140, binding = 0) uniform Matrices
{
mat4 projection;
mat4 view;
};
// Individual uniform variables
uniform mat4 model;
uniform vec3 camPos;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
问题:
GL_MAX_VERTEX_UNIFORM_BLOCKS
,或者是否存在存储这些变量的默认统一块(我猜是后者)?GL_MAX_UNIFORM_BLOCK_SIZE
对所有定义的统一块的限制,还是每个定义的UBO具有这个参数的最大大小?在这个示例中,允许传递给着色程序229,376字节(分布于多个ubos)的最大统一数据量?H 112
A)此默认缓冲区是否也符合16384字节限制,这意味着所有单独定义的统一变量的合并大小不得超过16384字节?GL_MAX_UNIFORM_BUFFER_BINDINGS
参数中单独定义了统一变量,在本例中留下了81个可用的绑定位置?。
发布于 2022-06-10 16:09:58
未在块中声明的制服不计入任何统一块限制。统一的限制也不适用于他们;非块状制服有他们自己的,单独的限制。
https://stackoverflow.com/questions/72576744
复制相似问题