VBOs或显示列表- GPU兼容性
本文关键字:GPU 兼容性 列表 显示 VBOs | 更新日期: 2023-09-27 17:54:25
我正在开发一个新的OpenGL应用程序,我意识到显示列表将在OpenGL 3.1中被弃用(以及许多其他有用的功能,(对我来说)似乎有点傻),并被顶点缓冲对象取代。我在NVidia卡上使用VBOs成功地画了一个三角形,但这个例子无法在我的上网本上的英特尔芯片上运行,因为它不支持glGenBuffers。OpenGL似乎有一个关键的缺陷(新旧gpu/gma之间的兼容性中断)。作为一家小型企业,我的游戏必须兼容尽可能多的系统,但我不希望我的程序不能在较新的显卡上运行(因为它依赖于显示列表,这已经从OpenGL 4.1规范中删除了)。这将给我最广泛的支持图形卡(旧的和新的)。显示列表,还是顶点缓冲对象?
如果您的应用程序将在GMA上运行,则必须具有低多边形计数。因此,在新显卡的驱动程序中模拟显示列表的效率低下将不是问题,它们有多余的带宽。
如果您仍然关心效率,请确保使用glVertexPointer
/glDrawArray
来最大化批量大小。这可以与显示列表结合使用,但减少了列表中单独操作的数量,因此使仿真问题更少。
最坏的情况下,如果某些平台确实不支持显示列表,您可以用函数调用代替glCallList
。
您的英特尔卡确实支持vbo,但只能通过ARB接口。尝试glGenBuffersARB
(以及将所有其他VBO代码转换为使用ARB版本)。它可以在nVidia和Intel GMA上运行
或者您可以查询系统支持的OpenGL版本,并相应地使用DisplayLists或VBO,而不是依赖于一种方法来兼容每个OpenGL版本。通过这种方式,您可以确定您正在使用最新,最有效和最快的绘图方式,无论系统支持哪种方法(显示列表/VBO)。
而且,这样的实现可以很容易地扩展到支持未来的绘图方法,比如OpenGL 4.4或OpenGL 5.0。然而,这可能会导致多段代码在功能上做同样的事情:告诉GPU做什么,这可能会增加代码的大小和复杂性。