我正在开发一个新的OpenGL应用程序,并且我知道显示列表将在OpenGL 3.1中被弃用(以及许多其他有用的功能,对我来说似乎有些愚蠢)并被Vertex Buffer Objects取代。我在NVidia卡上使用VBO成功绘制了一个三角形,但该示例无法在我的上网本上运行英特尔芯片,因为它不支持glGenBuffers。在OpenGL中似乎存在一个至关重要的缺陷(新旧GPU / GMA之间的兼容性破坏)。作为一个小型企业,我的游戏需要与尽可能多的系统兼容,但我不希望我的程序无法在较新的图形卡上工作(由于它依赖于已从OpenGL 4.1中删除的显示列表规格)。哪个会给我最大的图形卡支持(旧的和新的)。显示列表或顶点缓冲区对象?
答案 0 :(得分:4)
如果您的应用程序将在GMA上运行,则您必须具有较低的多边形数量。因此,在新视频卡的驱动程序中模拟显示列表的效率低下不会成为问题,它们可以节省带宽。
如果您仍然关注效率,请务必使用glVertexPointer
/ glDrawArray
来最大化批量。这可以与显示列表结合使用,但可以减少列表中单独操作的数量,从而减少仿真问题。
最糟糕的情况是,如果某个平台确实不支持显示列表,您可以使用函数调用替换glCallList
。
答案 1 :(得分:3)
您的Intel卡支持支持VBO,但仅限于ARB接口。尝试glGenBuffersARB
(以及转换所有其他VBO代码以使用ARB版本)。它适用于nVidia和Intel GMA。
答案 2 :(得分:0)
或者,您可以查询支持系统的OpenGL版本,并相应地使用DisplayLists或VBO,而不是依赖一种方法与每个OpenGL版本兼容。通过这种方式,您可以确定使用最新,最有效和最快速的绘图方式,系统支持任何方法(displaylists / VBO)。
此外,可以轻松扩展此类实现,以支持OpenGL 4.4或OpenGL 5.0中的未来绘图方法。 但是,这可能导致多个代码在功能上做同样的事情:告诉GPU做什么可能会增加代码大小和复杂性。