我正在阅读Nehe OpenGL教程,并有一个关于显示列表的教程。是否有任何理由使用它而不是“类和对象”方式?例如,创建类的立方体,然后只是简单地写cube.render(x,y,z); ?Opengl - 显示列表与OOP
0
A
回答
3
想法是利用硬件和板载显示列表处理。基本上,你会在图形处理器的内存中创建显示列表,然后通过发送一个命令来显示整个列表,而不是在每次显示对象时重新发送所有坐标。这可以大幅降低CPU与GPU之间的带宽需求。
实际上,它在很大程度上依赖于您正在使用的硬件和OpenGL实现。通过一些实现,显示列表可以帮助您大幅提升性能 - 但在其他实施中,它基本上没有任何优势。
1
我在阅读Nehe OpenGL教程,并且有关于显示列表的教程。
我建议停止阅读讷河。我从来没有见过任何与Ne和相关的东西在stackoverflow上被提及,而我看到的教程使用了太多的特定于平台的API。
取代NEHE,转到OpenGL.org并检查“书籍”部分。或者,第一版“OpenGL红皮书”可在glprogramming.com处获得。虽然它不包含OpenGL 4中的最新API,但通过“兼容性配置文件”,即使在最新版本的OpenGL中,所有可用的方法仍然可用。
是否有任何理由使用它来代替“类和对象”的方式?
你混淆了两个不同的概念。显示列表是OpenGL的方式来保存OpenGL调用序列,以便以后可以快速“召回”它们。取决于OpenGL的实现,它可能会提高应用程序的性能。显示列表的使用与您的程序(OOP)的内部组织无关。您可以使用OOP并仍使用cube.render()中的显示列表。或者你可以使用顶点缓冲对象或任何你想要的。或者你可以使用“非OOP”风格并仍然使用显示列表。
1
显示列表是在GPU级别预编译的。 您自己的渲染功能是在CPU级别编译的,其各个命令在运行时仍需要通过GPU。
这就像比较“存储过程”与调用内联SQL的自定义函数。 编译存储过程并在服务器端生成执行计划,而自定义函数仅在客户端组件中编译。 “
相关问题
- 1. OpenGL - 显示列表
- 2. 显示列表和OpenGL状态
- 3. 带GLTesselated对象的显示列表? (OpenGL)
- 4. 何时使用OpenGL显示列表?
- 5. OpenGL:带显示列表的材质?
- 6. opengl重新编译显示列表
- 7. 显示列表和VBO OpenGL/LWJGL
- 8. OpenGL - 显示点阵列
- 9. 显示列表 - 李与CSS
- 10. MySQL显示表名与列
- 11. Python OOP和列表
- 12. SDL2与OpenGL纹理显示不正确
- 13. 你如何显示与opengl的fps(android)
- 14. OpenGL和OOP程序结构
- 15. LWJGL的OpenGL显示
- 16. OpenGL抬头显示
- 17. openGL视频显示
- 18. 显示列表和转换
- 19. 显示列表
- 20. 显示列表
- 21. 显示列表
- 22. 列表显示
- 23. 在OpenGL中删除嵌套的显示列表
- 24. OpenGL显示列表:用于绘制2D精灵?
- 25. 使用Python在OpenGL中显示列表的效率?
- 26. OpenGL不会释放显示列表内存
- 27. 如何在openGL显示列表中投影/未投影
- 28. 是最适合此的显示列表吗? (OpenGL)
- 29. OpenGL的 - 从显示列表转换为使用VBO
- 30. 宣布所有显示列表头文件的OpenGL
”显示列表在GPU级别预编译。“不正确,这是不能保证的。存储显示列表的位置以及特定实现的方式,并未在OPenGL标准中定义。请阅读标准。 – SigTerm
@SigTerm:OpenGL标准中的任何内容都不能保证在GPU或CPU上运行。但是这个答案清楚地说明了它是如何完成的*。所以,从我+1。 – ybungalobill