我想知道是否有任何方法(标准或聪明的技巧)将参数传递给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();
有没有办法实现我想要的?
答案 0 :(得分:3)
嗯,是的,绑定纹理是全局状态,如果绑定纹理然后调用显示列表,则在执行列表时仍应绑定纹理。
但最好停止使用显示列表并使用VAs / VBO,我推荐它们!
答案 1 :(得分:0)
那不行。请务必仔细阅读规范和FAQ,特别是:
可以指示GL处理a 特定显示列表(可能 反复)通过提供一个数字 唯一地指定它。这样做会导致 列表中的命令 执行就像他们被给予一样 一般。唯一的例外是 到依赖客户端的命令 州。 当这样的命令是 累积到显示列表中 (即发布时,而不是何时发布 已执行),客户端状态有效 那时适用于该命令。
16.010为什么显示列表占用了这么多内存?一个OpenGL显示列表 必须复制所有数据 需要重新创建调用序列 创造了它。
换句话说,如果您打算稍后更改纹理的数据存储,它将没有区别,因为OpenGL保留自己的副本以确保它可以完全重现当前状态。
将某些类型的可变性显示在显示列表中的唯一方法是通过嵌套显示技巧,但正如Matias Valdenegro已经建议的那样,如果可以提供帮助,则根本不应使用显示列表。其他功能(例如VBO)更灵活,性能相同或更好。