游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3833|回复: 3

glNewList和glCallList嵌套时出现的问题

[复制链接]

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-12-4 11:36:00 | 显示全部楼层 |阅读模式
GLuint templist=glGenLists(1);
glNewList(templist,GL_COMPILE);
  glPushMatrix();
    glMultMatrixd(A);
    glMultMatrixd(B);
    glCallList(onething);                   ---------(1)
  glPopMatrix();
    glCallList(m_WorldDisplayList);      ---------(2)
glEndList();
glDeleteLists(m_WorldDisplayList,1);
m_WorldDisplayList=templist;

这里面的m_WorldDisplayList是反复更新的,这么写会有问题吗?
(1)处是一个没有任何变换的绘制,比如一个小球,(2)处显然包括以前的glMultMatrixd(A);和glMultMatrixd(B);过程。
为什么我的程序里面这么写,(1)处可以正常处理,而(2)处好像就是被省略掉了一样?
难道glNewList中嵌套的glCallList只能是那种不包含变换的实体绘制吗?

13

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2005-12-4 14:51:00 | 显示全部楼层

Re:glNewList和glCallList嵌套时出现的问题

具体的要测试才能知道

不过我的经验是,如果在LIST中加入数据的操作一定要最后写上glEndList()

否则内存会飙升

你调试的时候打开任务管理器看看吧,如果程序没有什么异常就可以认为正常

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-12-4 15:44:00 | 显示全部楼层

Re:glNewList和glCallList嵌套时出现的问题

谢谢你的解答!
问题已经找到了! 是这样的:
glNewList和glEndList之间的glCallList实际上是一个分配了的空间。
并不是把glCallList的内容展开在glNewList和glEndList之间,而是利用类似指针的机制指向这个空间,也就是说并不是复制操作而是地址操作。
但是我最后加了glDeleteLists(m_WorldDisplayList,1);,,,,,,,,,,本来想节省一点空间的,以为上面已经复制进去了,后来想了一会儿,有以上猜想,然后把glDeleteLists(m_WorldDisplayList,1)删除了,就好了。
共同学习! 共同进步!

3

主题

17

帖子

23

积分

注册会员

Rank: 2

积分
23
发表于 2005-12-4 20:59:00 | 显示全部楼层

Re: glNewList和glCallList嵌套时出现的问题

glDeleteLists是一定要的,但不是和glNewList/glEndList放在一起,我们一般喜欢在init()函数里使用显示列表,最后删除显示列表在destroy()函数里~ [em21]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 21:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表