0

我想知道是否有任何方法(标准或巧妙的技巧)将参数传递给 OpenGL 显示列表。让我举一个例子来澄清我的意思。

假设我们有以下代码:

GLuint l = glGenLists(1);
glNewList(l, GL_COMPILE);
  // ...some OpenGL function calls
  glBindTexture(GL_TEXTURE_2D, some_texture); // <-- here, I want `some_texture' to be a parameter that I can set when calling the display list
  //...some more stuff...
glEndList();

有没有办法完成我想要的?

4

2 回答 2

3

嗯,是的,绑定的纹理是全局状态,如果你绑定一个纹理然后调用一个显示列表,当列表执行时纹理应该仍然被绑定。

但最好停止使用显示列表并使用 VA/VBO,我推荐它们!

于 2011-04-25T13:03:30.387 回答
0

那是行不通的。请务必仔细阅读规范和常见问题解答,特别是:

可以通过提供唯一指定特定显示列表的数字来指示 GL 处理特定显示列表(可能重复)。这样做会导致列表中的命令被执行,就像它们被正常给出一样。唯一的例外与依赖于客户端状态的命令有关。当这样的命令累积到显示列表中时(即发出时,而不是执行时),当时有效的客户端状态将应用于该命令。

16.010 为什么显示列表会占用这么多内存?OpenGL 显示列表必须对重新创建创建它的调用序列所需的所有数据进行复制。

换句话说,如果您打算稍后更改纹理的数据存储,则不会有任何影响,因为 OpenGL 保留自己的副本以确保它可以准确地再现当前状态。

在显示列表中获得某种可变性的唯一方法是通过嵌套显示技巧,但正如 Matias Valdenegro 已经建议的那样,如果你能提供帮助,你根本不应该使用显示列表。其他功能(例如 VBO)更灵活,具有相同或更好的性能。

于 2011-04-25T13:55:59.197 回答