我正在阅读Nehe OpenGL教程,并且有一个关于显示列表的教程。是否有任何理由使用它而不是“类和对象”的方式?例如,创建立方体类,然后只需编写cube.render(x,y,z); ?
答案 0 :(得分:3)
想法是利用带有板载显示列表处理的硬件。基本上,您将在图形处理器的内存中构建显示列表,然后您可以通过发送单个命令来显示整个列表,而不是每次要显示对象时重新发送所有坐标。这可以大大降低CPU和GPU之间的带宽需求。
实际上,它在很大程度上取决于您正在使用的硬件和OpenGL实现。通过一些实现,显示列表可以显着提高性能 - 但在其他实现中,它基本上没有任何好处。
答案 1 :(得分:1)
我正在阅读Nehe OpenGL教程,并且有一个关于显示列表的教程。
我建议你不要读尼赫。我从未在stackoverflow上看到过与Nehe相关的任何相关内容,我看到的教程使用了太多特定于平台的API。
取代NEHE,转到OpenGL.org并查看“books”部分。或者,第一版“OpenGL红皮书”可在glprogramming.com获得。虽然它不包括OpenGL 4中最新的API,但即使在最新版本的OpenGL中,所有可用的方法仍可通过“兼容性配置文件”使用。
有没有理由使用它而不是“类和对象”的方式?
你混淆了两个不同的概念。显示列表是用于保存OpenGL调用序列的OpenGL方式,因此您可以在以后快速“调用”它们。根据OpenGL实现,它可能会提高应用程序性能。使用显示列表与内部组织与您的程序(OOP)无关。您可以使用OOP并仍然使用cube.render()中的显示列表。或者你可以使用顶点缓冲对象或任何你想要的。或者您可以使用“非OOP”样式并仍然使用显示列表。
答案 2 :(得分:1)
显示列表是在GPU级别预编译的。
您自己的渲染函数是在CPU级别编译的,其各个命令在运行时仍需要通过GPU。
这就像将“存储过程”与调用内联SQL的自定义函数进行比较。
编译存储过程并在服务器端生成执行计划,而自定义函数仅在客户端程序集中编译。