gpt4 book ai didi

opengl - VBO 与立即模式性能

转载 作者:行者123 更新时间:2023-12-02 05:57:04 26 4
gpt4 key购买 nike

如果我有一个顶点不断变化的模型,因此我需要在每一帧上重新绑定(bind) VBO 上的所有信息,使用即时模式是否会提高性能?或者,所有数据同时传递到 GFX 卡的事实仍然是 VBO 的救赎因素吗?

根据第一个问题的答案,这是否意味着为每个网格保留一个世界矩阵比简单地平移几何体并重新创建 VBO 更好?

最佳答案

与几乎所有性能问题一样,答案是:这取决于情况。许多因素都会发挥作用,主要是您的确切使用模式以及 OpenGL 实现的特征。

虽然立即模式在很大程度上被认为已经过时,并且已从现代 OpenGL 版本中删除,但如果您的几何图形高度动态,则使用 VBO 获得更好的性能可能会非常困难。

作为一个案例研究,我已经在一个爱好项目 (1) 上工作了相当长的时间(并且有很长的休息时间)。在这种情况下,所有顶点坐标都是动态计算的,并且仅用于渲染一次。最初的版本使用立即模式,因为它对于这种情况很方便,而且当我编写它时,立即模式还没有那么过时。几年后,当我再次拿起它并将其移植到 Core Profile 和 ES 3.0 时,我最初很难获得同等的性能。

您必须尝试各种选项才能找到最适合您的用例和平台的选项。常见选项包括:

  • 将顶点数据写入本地内存,然后使用 glBufferSubData() 批量将其输入 VBO。
  • 通过使用 NULL 数据指针调用 glBufferData() 创建一个足够大以容纳数据的 VBO。然后使用 glMapBuffer()glMapBufferRange() 映射缓冲区内存,并将顶点数据写入映射的内存。
  • 对于之前的方法,您可能还想尝试使用多个缓冲区并循环使用它们,以减少 CPU 和 GPU 之间的同步。

关于立即模式如何在当前 GPU 上工作,存在一个常见的误解(部分反射(reflect)在其他答案中)。目前没有 GPU(据我所知)实际上支持立即模式。当您进行立即模式调用时,驱动程序通常会将顶点数据放入缓冲区中,并稍后将这些缓冲区提交给 GPU。所以 GPU 最终会执行几乎相同的绘图。唯一的区别是您是否构建缓冲区(通过使用基于 VBO 的绘图),或者是否让驱动程序处理它(通过使用立即模式)。

立即模式绘制通常效率低下的主要原因是它需要如此多的 API 调用,而不是因为 GPU 最终执行的内容。

(1) 无耻的插件,如果有人想看看它是什么:http://retokoradi.com/volume-rendering/ .

关于opengl - VBO 与立即模式性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com