显示列表最适合这个吗? (OpenGL)
Posted
技术标签:
【中文标题】显示列表最适合这个吗? (OpenGL)【英文标题】:Is a display list best for this? (OpenGL) 【发布时间】:2010-06-13 03:55:59 【问题描述】:我第一次使用 GLUTesselator 渲染 2D 多边形,然后将它们存储在显示列表中以供后续使用。我认为 VBO 可能会更快,但是由于我无法访问 tesselator 输出的东西,并且由于它使用 gl_triangle、quad、strip 等的混合,我不确定我该怎么做,即使我想在 GLUTesselator 完成后使用 VBO 以获得最佳性能。谢谢
【问题讨论】:
【参考方案1】:自从我使用 GLU tesselator 已经有一段时间了,但我记得它只是将标准三角形添加到您的顶点列表中。您传递给它的回调函数之一将接收新顶点并将它们放在某处。这发生在您的代码中,因此数据不会对您隐藏。
显示列表比立即模式渲染要好,但与 VBO 相比,它们通常是一个非常糟糕的选择。
更新:“专业”市场的 OpenGL 驱动程序,如 Quadro 和 FireGL,将比消费级显卡在显示列表实现方面投入更多精力。但即便如此,他们可以做的优化量也比 SGI 时代的老式 3D 程序员认为的要少得多。显示列表应该捕获状态变化和其他因素,但仍然考虑可能独立于显示列表而改变的其他状态。
自从我获得有关当前驱动程序实现的硬信息以来已经有几年了,但此时显示列表会将您的几何数据保存在软件中并像普通顶点数组一样上传它们,因为它可能需要知道某些 gl 状态才能制作在上传到 GPU 内存之前对数据进行调整。基本上,显示列表为您提供了理论上的灵活性,可以在执行时进行更改,在上传数据之前需要知道这些更改。 VBO 以一种可以在创建时直接进入内存的方式锁定格式。
【讨论】:
我从未体验过显示列表比 VBO 更差。实际上,它们的实现应该非常相似。你能提供更多关于这方面的信息吗? 哦,还有 +1 因为带有回调提示。可能 VBO 很可能总是更好(尽管可能只是稍微好一点),但是由于您可以完全控制它们,我想这就是获得的方法 另外值得一提的是,显示列表在较新版本的 OpenGL 规范中已正式弃用。【参考方案2】:由于您的几何图形是二维的,因此显示列表可能是更好的选择。
您已经让它们工作了。 支持 FBO 的新卡足够快,即使显示列表的速度是 FBO 的 1/10,它仍然足够快 显示列表也适用于不支持 FBO 的旧卡,但对于 2-D 几何图形仍然足够快【讨论】:
【参考方案3】:我不同意 Alan 的观点,即与 VBO 相比,显示列表总是一个非常糟糕的选择。我认为这在很大程度上取决于驱动程序和实际使用情况,在某些情况下,DL 可能会更好。 所以,如果你能以某种方式选择 VBO,我想你应该 - 但无论如何你都在使用“遗留”的 GLUTesselator 东西,我认为留在 DLs 一点也不坏。
我还没有尝试过,但我发现这些人比较了 VBO 和 DL: http://www.mofeel.net/312-comp-graphics-api-opengl/1470.aspx
您可能想自己尝试一下。我记得上次测试我工作中的一个实际案例时,我注意到 DL 和 VBO 在高端硬件上没有区别。正如已经提到的,我认为这取决于驱动程序和使用情况。
【讨论】:
以上是关于显示列表最适合这个吗? (OpenGL)的主要内容,如果未能解决你的问题,请参考以下文章