1

我正在开发一个新的 OpenGL 应用程序,并且知道显示列表将在 OpenGL 3.1 中被弃用(以及许多其他有用的功能,(对我来说)这似乎有点傻)并被顶点缓冲区对象取代。我在 NVidia 卡上使用 VBO 成功绘制了一个三角形,但该示例无法在我上网本的英特尔芯片上运行,因为它不支持 glGenBuffers。OpenGL 中似乎存在一个关键缺陷(新旧 GPU/GMA 之间的兼容性中断)。作为一家小型企业,我的游戏需要与尽可能多的系统兼容,但我不希望我的程序无法在较新的显卡上运行(因为它依赖于显示列表,这些显示列表已从 OpenGL 4.1 中删除)规格)。这将为我提供最广泛的显卡支持(旧的和新的)。显示列表,

4

3 回答 3

4

如果您的应用程序将在 GMA 上运行,则您的多边形数量必然较低。因此,在新显卡的驱动程序中模拟显示列表的低效率将不是问题,它们有可用的带宽。

如果您仍然关心效率,请确保使用glVertexPointer/glDrawArray来最大化批量大小。这可以与显示列表结合使用,但减少了列表中单独操作的数量,因此减少了仿真问题。

最坏的情况,如果某些平台真的不支持显示列表,您可以glCallList用函数调用替换。

于 2011-05-03T23:49:28.307 回答
3

您的 Intel 卡确实支持 VBO,但只能通过 ARB 接口。尝试glGenBuffersARB(以及将所有其他 VBO 代码转换为使用 ARB 版本)。它将在 nVidia 和 Intel GMA 上运行。

于 2011-05-03T23:57:59.203 回答
0

或者,您可以查询系统支持的 OpenGL 版本并相应地使用 DisplayLists 或 VBO,而不是依赖一种方法来与每个 OpenGL 版本兼容。通过这种方式,您可以确定您使用的是最新、最有效和最快的绘图方式,无论系统支持何种方法(显示列表/VBO)。

此外,这样的实现可以很容易地扩展以支持未来的绘图方法,例如 OpenGL 4.4 或 OpenGL 5.0。但是,这可能导致多段代码在功能上执行相同的操作:告诉 GPU 做什么,这可能会增加代码大小和复杂性。

于 2013-07-30T11:45:23.777 回答