当前位置: 首页 > 知识库问答 >
问题:

每个VBO都需要一个VAO吗?

邰勇军
2023-03-14

目前,我有一个renderobject类的集合,其中包含一个纹理、一个VAO和一个VBO。由于所有的状态切换和使用少量三角形调用gldrawarrays,绘制数千个这样的对象会导致性能下降。

因此,现在我将更改我的实现,以便创建一系列1MIB VBO(从一个开始,一旦它满了,创建第二个1MIB VBO并继续填充它)。每个VBO需要单独的VAO吗?VBO已经使用了交错的顶点数据,所以我不是在谈论使用多个VBO来处理顶点、法线、纹理库等。

共有1个答案

江礼骞
2023-03-14

我想可能有些混乱。顶点属性是指每个顶点元素的数量,你可以通过一个顶点(法线可以是一个,UVs另一个,等等)。在您的实现中,这一限制为16,您很可能不会超过这一限制。

VAOs存储发出单个绘制调用所需的状态信息。这包括存储需要为该调用绑定哪些VBO。鉴于每个VBO必须在它自己单独的draw调用中绘制,我还认为您需要一个VAO来存储每个VBO的设置信息。

这里有一个很好的解释:

http://ogldev.atspace.co.uk/www/tutorial32/tutorial32.html

 类似资料:
  • 因此,我将从一个代码库构建一组应用程序,并使用productFlavors自定义每个应用程序。 每种口味都需要有自己的Google Analytics跟踪ID,所以我开始为每种口味生成一个新的google-services.json,我发现Google Developer控制台有一个限制。 问题是,如何对所有口味使用相同的json文件?(每种口味都有自己的applicationID)

  • 问题内容: 每个Java程序都要求至少存在一个类。 以上说法总是正确的吗? 问题答案: 是的,您至少需要一个类才能拥有一个程序,但是 不需要 ,您不需要任何方法(与其他答案相反)。 需要一个类的原因是因为在Java中,所有代码都在类内部。因此,要获取任何代码,您需要一个类。但是,代码不一定需要包含在方法中。它也可以在初始化器中。因此,这是一个没有方法的完整Java程序: 那给… 编辑:从Java

  • 问题内容: 术语“ 内部类” 通常被认为是“需要一个封闭实例的嵌套类”。但是,JLS声明如下: 8.1.3。内部类和封闭实例 […] 内部类包括本地(第14.3节),匿名(第15.9.5节)和非静态成员类(第8.5节)。 […] 内部类的声明发生在静态上下文中的实例没有词法包围的实例。 也, 15.9.5。匿名类声明 […] 匿名类始终是内部类(第8.1.3节);从来没有(§8.1.1,§8.5.

  • 在我的理解中:一个VAO代表一个特定的状态。如果我绑定了一个VAO,添加一些VBO和元素缓冲区,用于索引和东西,我可以保存我想绘制和激活的对象的某个状态,然后在我想渲染东西的时候轻松地绘制它们。对吧? 所以VBO保存实际数据,而VAO只是一个“包装器-对象”,保存指向我为它定义的所有缓冲区的指针? 更改VAOs成本很高(更改VBO也是如此?!)。目前,我加载网格,并将它们组合到模型中。每个模型都使

  • 是否每个div、section、main和article都需要有role属性来实现可访问性?只是问因为一个同事提到了,现在我觉得我要重做很多标记。例如,如果您使用div来设计样式呢? 假设我有一个看起来像这样的HTML: 在这种情况下是否需要role=“heading”?

  • 我一直在尝试将我的游戏原型渲染器从即时模式测试实现转换为实际的VAO/VBO实现。VBO正在屏幕上渲染,但拒绝纹理。下面是显示问题的最简单测试类: 纹理绑定调用如下所示(其中包装=GL_REPEAT和过滤器=GL_NEAREST): 花了一个周末的时间在谷歌上搜索,却没有找到答案,我是不是做错了什么?我还测试了使用即时模式,它仍然使用纹理进行渲染。