OpenGL-显示列表

来源:互联网 发布:淘宝零食店加盟 编辑:程序博客网 时间:2024/04/26 07:05

1. 显示列表如何提高性能

 

(1)可以定义一个几何图形,在以后多次执行它。

 

(2)当通过网络在另一台远程机器上运行OpenGL程序时,显示列表存放在服务器上,于是可以大大减少网络的数据传输量。

 

2. 显示列表在以下领域可以体现优化作用

 

(1)矩阵操作

 

如一个glRotate函数,可能会有相当大得性能提升,因为产生旋转矩阵的计算是比较复杂的

 

(2)对位图和图像进行光栅化

 

程序所指定的光栅化数据的格式并不一定最合适硬件,在编译显示列表时,OpenGL可能会把数据转换为最适合硬件的形式。

 

(3)光源、材料属性和光照模型

 

3. 创建和执行显示列表

 

GLuint listName;

listName = glGenLists(1);

 

glNewList(listName, GL_COMPILE);

...

glEndList();

glCallList(listName);

 

4. 显示列表的管理

 

(1)GLuint glGenList(GLsizei range)

分配range个相邻的未被占用的显示列表索引。这个函数返回的是一个正整数索引值,它是一组连续空索引的第一个值。返回的索引都标志为空且已被占用,以后再调用这个函数时不再返回这些索引。若申请索引的指定数目不能满足或range为0则函数返回0。 
(2)GLboolean glIsList(GLuint list);

 询问显示列表是否已被占用的情况。若索引list已被占用,则函数返回TURE;反之,返回FAULSE。

 

(3)glDeleteLists(GLuint list,GLsizei range);

 

删除从list开始的range个显示列表

 

5.层次式显示列表

 

glNewList(listIndex, GL_COMPILE);

 

glCallList(list1);

glCallList(list2);

 

glEndList();

 

6. 用显示列表管理状态变量

 

glNewList(listIndex, GL_COMPILE);

glPushMatrix();

glPushAttrib(GL_CURRENT_BIT);

...

glPopAttrib();

glPopMatrix();

 

封闭模式修改:

 

GLuint offset;

offset = glGenLists(3);

 

glNewList( offset, GL_COMPILE);

glDisable(GL_LINE_STIPPLE);

glEndList();

 

glNewList( offset+1, GL_COMPILE);

glEnable(GL_LINE_STIPPLE);

glEndList();

 

 

glCallList(offset);

drawLine();

 

glCallList(offset+1);

drawLine();