我第一次使用GLUTesselator渲染2D多边形,然后将它们存储在显示列表中供以后使用。我认为VBO可能会更快,但由于我无法访问tesselator输出的东西,并且因为它使用gl_triangle,quad,strip等的混合物,我不知道我怎么能做到这一点,即使我想一旦使用GLUTesselator完成性能,就可以使用VBO。感谢
答案 0 :(得分:1)
我使用GLU tesselator已经有一段时间了,但我记得它只是在你的顶点列表中添加了标准三角形。传递给它的一个回调函数将接收新的顶点并将它们放在某处。这在您的代码中发生,因此数据不会对您隐藏。
显示列表优于立即模式下的渲染,但与VBO相比,它们通常是一个非常糟糕的选择。
更新:像Quadro和FireGL这样的“专业”市场OpenGL驱动程序将比消费级卡更多地投入到显示列表实现中。但即便如此,他们可以做的优化程度远远低于SGI时代认为他们得到的老派3D程序员。显示列表应该捕获状态变化和其他因素,但仍然考虑可能独立于显示列表而改变的其他状态。
自从我获得有关当前驱动程序实现的硬信息已经有几年了,但是在某一点上,显示列表会将您的几何数据保存在软件中并像普通顶点数组一样上传它们,因为它可能需要知道某些gl状态才能生成在上传到GPU内存之前调整数据。基本上,显示列表为您提供了理论上的灵活性,可以在执行时进行更改,以便在上载数据之前进行更改。 VBO以一种可以在创建时直接进入内存的方式锁定格式。
答案 1 :(得分:1)
由于几何图形是2D,因此显示列表可能是更好的选择。
答案 2 :(得分:0)
我不同意Alan的观点,即与VBO相比,显示列表总是一个非常糟糕的选择。我认为这很大程度上取决于驱动程序和实际使用情况,在某些情况下DL甚至可能更优越。 所以,如果你能以某种方式去维也纳人民共和国,我想你应该 - 但是正如你使用“传统”GLUTesselator的东西一样,我认为坚持使用DL并不是那么糟糕。
我还没有尝试,但我发现这些人比较VBO和DLs: http://www.mofeel.net/312-comp-graphics-api-opengl/1470.aspx
你可能想试试自己。我记得上次测试我的工作中的实际案例,我注意到顶级硬件上的DL和VBO没有区别。正如已经提到的那样,我认为这取决于驱动程序和使用情况。