使用一次时,显示列表是否比内置模式更好?

时间:2013-07-10 07:28:38

标签: c++ opengl graphics rendering

免责声明:由于缺少文档,我无法使用任何较新版本的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 将必须再次编译并给出新的顶点),这将是快?

3 个答案:

答案 0 :(得分:1)

显示列表的概念是重用以节省进行所有这些调用的开销。建立一个DL,然后立即调用它,只是在疯狂之后立即丢弃。它只会增加绘制单个内容的开销。

话虽如此,你不应该使用显示列表或立即模式。使用顶点数组和VBO。

答案 1 :(得分:0)

  1. 您的免责声明没有任何意义 - 不要光顾,您是否尝试使用谷歌搜索?这是顶点规范的wiki page。您可以仔细阅读维基的其余部分,以了解哪些功能已被弃用以及何时添加了新功能。例如,请查看glBindBuffer()上的页面。公平地说, 需要花费一些精力来解决所有OpenGL文档的问题 - 许多教程已经过时了,找到了正确的PDF s而other pages本身就是一项任务。

  2. 您应该使用最新版本的OpenGL - 使用VBO和VAO。它们比显示列表和立即模式要好得多。当你驾驶毒蛇时,为什么要在思域和甲虫之间争论?

  3. 如果您必须知道,速度答案是:它取决于OpenGL实现。该显示列表非常小,因此显示列表的开销可能高于立即模式下的开销。 Ye olde Red Book 1.1 explains this whole concept详细介绍。

  4. 您可以尝试分析代码以查看哪些代码运行得更快。这将为您提供硬件上的明确答案。

答案 2 :(得分:0)

  

由于缺乏文件

的完整opengl函数参考
  1. OpenGL 4
  2. OpenGL 3.3
  3. OpenGL 2
  4. Specifications and reference pages.

    opengl.org (books, docs, etc)

    OpenGL extension wrangler library.

    OpenGL不乏文档。您可以找到几乎与OpenGL相关的文档。

      

    显示仅使用一次的列表,或OpenGL中的Immedient模式。

    立即模式。显示列表应该被重用,如果你只使用一次显示列表,渲染只需要更长时间(99.9%的确定性)。