0

Disclamer:由于缺乏文档,我不能使用任何更新版本的 OpenGL

我想知道哪个更好用,只使用一次的显示列表,或者 OpenGL 中的即时模式。

以此为例:

示例 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(在显示列表的情况下,变量立方体必须再次编译并提供新的顶点),哪个会更快?

4

3 回答 3

1

显示列表的想法是重复使用以节省进行所有这些调用的开销。构建一个 DL 然后立即调用它,然后立即被丢弃是疯狂的。它只会增加绘制单个事物的开销。

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

于 2013-07-10T08:33:52.027 回答
0
  1. 您的免责声明没有任何意义 - 不要光顾,您是否尝试过谷歌搜索?这是关于顶点规范的wiki 页面。您可以仔细阅读 wiki 的其余部分,以查看哪些功能已被弃用以及何时添加了新功能。例如,查看glBindBuffer()上的页面。公平地说,要弄清楚所有 OpenGL 文档确实需要一些努力——许多教程都已经过时了,找到正确的PDF其他页面本身就是一项任务。

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

  3. 如果你必须知道,速度的答案是:它取决于 OpenGL 的实现。该显示列表非常小,因此显示列表的开销可能高于仅在立即模式下执行。Ye olde Red Book 1.1详细解释了整个概念

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

于 2013-07-10T14:47:59.803 回答
0

由于缺乏文件

完整的opengl函数参考

  1. OpenGL 4
  2. OpenGL 3.3
  3. OpenGL 2

规格和参考页。

opengl.org(书籍、文档等)

OpenGL 扩展牧马人库。

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

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

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

于 2013-07-10T15:21:21.520 回答