免责声明:由于缺少文档,我无法使用任何较新版本的OpenGL
我想知道哪个更好用,只使用一次的显示列表,或OpenGL中的Immedient模式。
以此为例:
示例1:
glBegin(GL_QUADS);
glVertex2f(1.0f, 0.0f);
glVertex2f(1.0f, 1.0f);
glVertex2f(0.0f, 1.0f);
glVertex2f(0.0f, 0.0f);
glEnd();
示例2:
GLuint quad;
quad = glGenLists(1);
glNewList(quad, GL_COMPILE);
glBegin(GL_QUADS);
glVertex2f(1.0f, 0.0f);
glVertex2f(1.0f, 1.0f);
glVertex2f(0.0f, 1.0f);
glVertex2f(0.0f, 0.0f);
glEnd();
glEndList();
glCallList(quad);
如果我做了示例1或示例2每次更新(在显示列表的情况下,变量 cube 将必须再次编译并给出新的顶点),这将是快?
答案 0 :(得分:1)
显示列表的概念是重用以节省进行所有这些调用的开销。建立一个DL,然后立即调用它,只是在疯狂之后立即丢弃。它只会增加绘制单个内容的开销。
话虽如此,你不应该使用显示列表或立即模式。使用顶点数组和VBO。
答案 1 :(得分:0)
您的免责声明没有任何意义 - 不要光顾,您是否尝试使用谷歌搜索?这是顶点规范的wiki page。您可以仔细阅读维基的其余部分,以了解哪些功能已被弃用以及何时添加了新功能。例如,请查看glBindBuffer()上的页面。公平地说, 需要花费一些精力来解决所有OpenGL文档的问题 - 许多教程已经过时了,找到了正确的PDF s而other pages本身就是一项任务。
您应该使用最新版本的OpenGL - 使用VBO和VAO。它们比显示列表和立即模式要好得多。当你驾驶毒蛇时,为什么要在思域和甲虫之间争论?
如果您必须知道,速度答案是:它取决于OpenGL实现。该显示列表非常小,因此显示列表的开销可能高于立即模式下的开销。 Ye olde Red Book 1.1 explains this whole concept详细介绍。
您可以尝试分析代码以查看哪些代码运行得更快。这将为您提供硬件上的明确答案。
答案 2 :(得分:0)
由于缺乏文件
的完整opengl函数参考
Specifications and reference pages.
OpenGL extension wrangler library.
OpenGL不乏文档。您可以找到几乎与OpenGL相关的文档。
显示仅使用一次的列表,或OpenGL中的Immedient模式。
立即模式。显示列表应该被重用,如果你只使用一次显示列表,渲染只需要更长时间(99.9%的确定性)。