首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解GLSL中UBO的局限性

理解GLSL中UBO的局限性
EN

Stack Overflow用户
提问于 2022-06-10 15:31:50
回答 1查看 325关注 0票数 4

我即将实现一些使用统一缓冲区对象的功能,在此之前,我试图了解UBO的局限性。例如,让我们使用这些GL_MAX_*值和这个简单的片段着色器:

代码语言:javascript
运行
复制
- GL_MAX_UNIFORM_BUFFER_BINDINGS -> 84
- GL_MAX_UNIFORM_BLOCK_SIZE -> 16384
- GL_MAX_VERTEX_UNIFORM_BLOCKS -> 14
代码语言:javascript
运行
复制
#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);
}  

问题:

  1. 每个定义的统一变量是否每个消耗一个GL_MAX_VERTEX_UNIFORM_BLOCKS,或者是否存在存储这些变量的默认统一块(我猜是后者)?
  2. GL_MAX_UNIFORM_BLOCK_SIZE对所有定义的统一块的限制,还是每个定义的UBO具有这个参数的最大大小?在这个示例中,允许传递给着色程序229,376字节(分布于多个ubos)的最大统一数据量?
  3. ,如果我在问题1中的假设是正确的,在默认的统一缓冲区对象中包含单独定义的统一变量:H 112A)此默认缓冲区是否也符合16384字节限制,这意味着所有单独定义的统一变量的合并大小不得超过16384字节?
    • B.)此默认缓冲区是否使用统一块,使max可用(在定义任何其他ubos之前) 13?

  1. 确实在GL_MAX_UNIFORM_BUFFER_BINDINGS参数中单独定义了统一变量,在本例中留下了81个可用的绑定位置?

EN

回答 1

Stack Overflow用户

发布于 2022-06-10 16:09:58

未在块中声明的制服不计入任何统一块限制。统一的限制也不适用于他们;非块状制服有他们自己的,单独的限制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72576744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档