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、例程下载

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值