在OpenGL中删除嵌套的显示列表

3

我有一个关于OpenGL中嵌套显示列表删除的问题。您可以简单地通过以下方式创建显示列表:

    GLuint myList = glGenLists(1);
    glNewList(myList, GL_COMPILE);
    // ...code for objects in list...
    glEndList();

如果我没记错的话,这样的列表可以通过以下方式简单删除:
    glDeleteLists(myList, 1);

现在,一个显示列表也可以被嵌套使用,这样每个列表可以包含另一个或多个显示列表。代码的格式将如下所示:

    GLuint parentList = glGenLists(1);      // ID = 1
    glNewList(parentList , GL_COMPILE);

    GLuint childList1 = glGenLists(1);      // ID = 2
    glNewList(childList1 , GL_COMPILE); 
    // .. code for some objects here
    glEndList();

    GLuint childList2 = glGenLists(1);      // ID = 3
    glNewList(childList2, GL_COMPILE); 
    // .. code for more objects here
    glEndList();

    glEndList();

但我的问题是,如何删除这样的嵌套列表?仅删除父级是否足够,还是应该单独删除其子级?在后一种情况下:顺序是否重要?

1个回答

3

在编译过程中,glNewList不会被记录,而是会生成一个错误。如果需要了解更多信息,请参考glNewList文档

GL_INVALID_OPERATION is generated if [...] glNewList is called 
while a display list is being defined

所以这些“嵌套”的列表并不存在。

谢谢!虽然很有趣,因为有太多的网站将嵌套显示列表称为真实的东西,尽管它们中没有一个似乎给出任何示例。即使在OpenGL网站上,在常见问题解答中也提到了它: “16.030 嵌套显示列表如何工作?调用的列表会被复制到调用列表中吗?” http://www.opengl.org/archives/resources/faq/technical/displaylist.htm但是答案也非常不具描述性... - Yellow
嵌套显示列表是关于在一个显示列表内调用另一个显示列表。glNewList没有被记录,但是glCallLists被记录了。 - Bahbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接