OpenGL实战教程(8) -- 第七站:显示列表

1、为什么要用显示列表

对于复杂的图形,有成千上万个顶点,每次刷新屏幕都于重新计算顶点,让CPU执行重复的工作,浪费了CPU资源和运行速度的下降。如果把计算好的结果存放到显示列表中,需要刷新屏幕时,只需要把数据刷新到显卡里就可以了,节省CPU计算资源。

2、分配显示列表编号

GLuint glGenLists (GLsizei range);
GLsizei range:指定要分配几个显示列表。
返回的是分配的若干连续编号中最小的一个(即起始号)。

GLuint  minNum2= glGenLists (2); // 分配2个显示列表
GLuint  minNum3 = glGenLists (3); // 分配3个显示列表

3、创建显示列表

void glNewList (GLuint list, GLenum mode);
GLuint list:当前正在操作的显示列表号。
GLenum mode:GL COMPILE和GL COMPILE AND EXECUTE,
GL COMPILE声明当前显示列表只是装入相应OpenGL语句,不执行;
GL COMPILE AND EXECUTE表示在装入的同时,执行一遍当前显示列表。

glNewList(list, GL_COMPILE); 
glColor3f(1.0f, 0.0f, 0.0f); 
glVertex2f(0.0f, 0.0f); 
glEnd();

4、调用显示列表

void glCallLists (GLsizei n, GLenum type, const GLvoid *lists);// 调用一组
void glCallList (GLuint list);// 调用一个

GLsizei n:表示显示列表的个数
GLenum type,:表示lists的类型,GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,GL_UNSIGNED_INT,GL_FLOAT。
const GLvoid *lists:显示列表数组

GLuint lists[] = {1, 3, 4, 8}; 
// 起始值为10
glListBase(10); 
// 则实际上调用的是编号为11, 13, 14, 18的四个显示列表。
glCallLists(4, GL_UNSIGNED_INT, lists); 

5、销毁显示列表

void glDeleteLists (GLuint list, GLsizei range);
GLuint list:指定起始号
GLsizei range:指定要分配几个显示列表。

6、例程下载

运行效果:
在这里插入图片描述
下载例程

发布了30 篇原创文章 · 获赞 9 · 访问量 913

猜你喜欢

转载自blog.csdn.net/x879014419/article/details/105221090
今日推荐