我将实现一些使用统一缓冲对象的功能,在此之前我将尝试了解UBO的局限性。例如,让我们使用这些GL_MAX_*
值和这个简单的片段着色器:
第一个
问题:
1.每个统一变量是否都使用一个GL_MAX_VERTEX_UNIFORM_BLOCKS
,或者是否有一个默认的统一块来存储这些变量(我猜是后者)?
GL_MAX_UNIFORM_BLOCK_SIZE
是所有定义的统一块的限制,还是每个定义的UBO都有此参数的最大大小,在本例中,允许传递到着色器程序的统一数据的最大数量为229,376字节(分布在多个ubo上)?
- 如果我在问题1中的假设是正确的,其中单独定义的统一变量包含在默认的统一缓冲区对象中:
- A.)这个默认缓冲区是否也遵守16384字节的限制,这意味着所有单独定义的统一变量的组合大小不得超过16384字节?
- B.)这个默认的缓冲区是否消耗了一个统一的块,留下max可用(在定义任何其他ubo之前)13?
- 单独定义的统一变量是否计入
GL_MAX_UNIFORM_BUFFER_BINDINGS
参数,从而在本例中留下81个可用绑定位置?
1条答案
按热度按时间wixjitnu1#
未在区组中声明的制服不计入 * 任何 * 统一区组限制。统一区组限制也不适用于它们;非块状制服具有它们自己的、单独的限制。