C++ 显示列表最适合于此吗?(OpenGL)

C++ 显示列表最适合于此吗?(OpenGL),c++,c,opengl,C++,C,Opengl,我第一次使用臀大肌振荡器渲染二维多边形,然后将它们存储在显示列表中以供后续使用。我认为VBO的速度可能更快,但由于我无法访问tesselator输出的内容,并且由于它使用gl_三角形、四边形、条形等的混合体,我不确定如何做到这一点,即使我希望在完成臀大肌振荡器后使用VBO以获得最佳性能。谢谢我已经有一段时间没有使用GLU tesselator了,但我记得它只是将标准三角形添加到顶点列表中。传递给它的回调函数之一将接收新顶点并将它们放置在某个位置。这发生在代码中,因此数据不会对您隐藏 显示列表优于

我第一次使用臀大肌振荡器渲染二维多边形,然后将它们存储在显示列表中以供后续使用。我认为VBO的速度可能更快,但由于我无法访问tesselator输出的内容,并且由于它使用gl_三角形、四边形、条形等的混合体,我不确定如何做到这一点,即使我希望在完成臀大肌振荡器后使用VBO以获得最佳性能。谢谢

我已经有一段时间没有使用GLU tesselator了,但我记得它只是将标准三角形添加到顶点列表中。传递给它的回调函数之一将接收新顶点并将它们放置在某个位置。这发生在代码中,因此数据不会对您隐藏

显示列表优于即时模式下的渲染,但与VBOs相比,它们通常是一个非常糟糕的选择

更新:“专业”-市场上的OpenGL驱动程序,如Quadro和FireGL,将比消费者级卡在显示列表实现上投入更多精力。但即便如此,他们所能做的优化量也远低于SGI时代的老派3D程序员所认为的。显示列表应捕获状态变化和其他因素,但仍应考虑可能独立于显示列表而变化的其他状态


我已经有好几年没有掌握当前驱动程序实现的硬信息了,但在某一点上,显示列表将在软件中保存您的几何体数据,并像普通顶点数组一样上载它们,因为在上载到GPU内存之前,它可能需要知道某些gl状态以对数据进行调整。基本上,显示列表为您提供了理论上的灵活性,可以在执行时进行更改,在上传数据之前需要知道这些更改。VBO锁定格式的方式可以在创建时直接进入内存。

我不同意Alan的观点,即与VBO相比,显示列表始终是一个非常糟糕的选择。我认为这在很大程度上取决于驱动程序和实际使用情况,在某些情况下,DL可能更优越。 所以,如果你能以某种方式选择VBO,我想你应该——但不管怎样,由于你使用的是“遗留”的臀大肌振荡器,我认为留在DLs一点也不坏

我还没有尝试过,但我发现这些人正在比较VBO和DLs:


你可能想自己试试。我记得上一次测试我的工作中的一个实际案例时,我注意到DL和VBO在高端硬件上没有区别。如前所述,我认为这取决于驱动程序和使用情况

因为几何体是二维的,所以显示列表可能是更好的选择

  • 你已经让他们工作了
  • 支持FBO的新卡足够快,即使显示列表的速度是FBO的1/10,也足够快
  • 显示列表也适用于不支持FBO的旧卡,但对于二维几何体仍然非常快速

我从未体验过显示列表比VBO更糟糕。实际上,它们的实现应该非常相似。你能提供更多关于这个的信息吗?哦,还有+1,因为有回调提示。可能VBO总是更好(虽然可能只是稍微好一点),但由于您对它们有完全的控制权,我想这就是获得它们的方法。另外,值得一提的是,在OpenGL规范的较新版本中,显示列表已被正式弃用。