我的 OpenGL 设备真的只支持 90 个统一缓冲区对象吗?

问题描述 投票:0回答:1

我正在尝试创建一个需要大量 UBO 的 OpenGL 应用程序,尽管单个着色器只需要能够绑定到 6-7 个 UBO。因此,我试图为所有 UBO 创建一堆绑定点,但是当我将第 91 个 UBO 传递给 glUniformBlockBinding 时,我收到了无效参数错误。我看到 GL_MAX_UNIFORM_BUFFER_BINDINGS 为 90,这对我来说似乎低得令人难以置信。这真的意味着我的 GPU 只支持 90 年代的模拟 UBO 吗?

opengl
1个回答
0
投票

是的,您的 GPU 仅支持 90 个单独的缓冲区,用于统一数据在同一个绘制调用/着色器中

您不会将缓冲区“永久”绑定到 UBO 绑定点。绑定到绑定点索引是一项临时操作,仅当您想要使用该缓冲区为特定绘制调用中的特定着色器提供统一数据时才需要执行此操作。这与纹理没有什么不同;仅当您想在渲染操作中使用该纹理时,才将纹理绑定到纹理单元。 与纹理一样,您应该尝试对绘制操作进行排序,以便不同的着色器或绘制调用可以使用相同的缓冲区来获取它们之间不会改变的统一数据(对于许多绘制调用,相机和透视矩阵往往是相同的) )。但是,是的,您需要在渲染场景时绑定不同的缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.