显示列表

OpenGL 显示列表是一组预先存储并编译过的的 opengl 命令,它可以在任何地方被调用并按顺序立即执行。

 

说说几个相关的函数:

 

    1,显示列表的创建:

        void  glNewList(GLuint list , GLenum mode);    

                第一个参数为自己指定的显示列表的序号,调用时要用到,如果序号指定重复则后面的显示列表将覆盖前面的

                第二个参数表示显示列表被处理的方式,有 编译 和 便宜且执行 两种,分别对应常量 GL_COMPILE  和 

                            GL_COMPILE_AND_EXECUTE

        void  glEndList();

        你所要进行的操作则定义在上面两个函数之间,如下(不过没什么实用):

	glNewList(1 , GL_COMPILE);
		glBegin(GL_LINES);
			glVertex2f(-0.5f , -0.5f);
			glVertex2f(0.5f , 0.5f);
		glEnd();
	glEndList();

    

    2,单个显示列表的执行:

        glCallList(GLuint list);

                参数即为定义显示列表时所指定的序号,如:glCallList(1);

 

    3,显示列表的管理:

        GLuint glGenLists(GLsizei range);

                如前说过的,因为显示列表是由其序号来识别的,如果定义了一个相同序号的显示列表,则后定义的显示列表会代替已存在的显示列表,这当然不是我们想要的。为了避免这一点,可以用上面这个函数来创建一个或多个没有用过的显示列表。

                该函数创建 range 个连续且未被占用的显示列表的序号,返回一个整数,该整数就是这 range 个连续显示列表序号中的最小序号。如若返回的是 n , 则创建的显示列表序号为 n , n+1 , ……, n + range -1 。

	GLint index = glGenLists(1);
	glNewList(index , GL_COMPILE);
		// 其他代码
	glEndList();

 

        GLboolean  glIsList(GLuint list);

                该函数用来查询指定序号的显示列表是否已经被占用

        void  glDeleteLists(GLuint  list  ,  GLsizei  range);

                显示列表既然能被创建那么一定也能被删除,上面的函数用来删除序号从 list 起的连续 range 个显示列表

   

    4,多个显示列表的执行:

        void  glListBase(GLuint  base);

                该函数用来指定将要执行的多个显示列表的序号基数,将与下面说的函数的相关参数进行配合。参数 base 可以为任何整数,初始为 0

        void  glCallLists(GLsizei  n , GLenum  type , const  GLvoid  *  lists);

                该函数执行一个显示列表序列。其中,参数 n 表示将要执行的显示列表的个数;参数 type 表示 第三个参数 lists 的类型,如: GL_BYTE , GL_UNSIGNED_INT 等等;第三个参数 lists 是一个数组地址,记录一系列的偏移量,前一个函数指定的显示列表基数加上偏移量就是将要执行的显示列表的序号。如下:

	GLint index = glGenLists(4);
	glListBase(index);

	glNewList(index , GL_COMPILE);
		// 其他代码
	glEndList();

	glNewList(index + 1 , GL_COMPILE);
		// 其他代码
	glEndList();

	glNewList(index + 2, GL_COMPILE);
		// 其他代码
	glEndList();

	glNewList(index + 3, GL_COMPILE);
		// 其他代码
	glEndList();

	GLbyte bArray[4] = {0 , 1 , 2 , 3};
	glCallLists(4 , GL_BYTE , bArray);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值