显示列表
来源:互联网 发布:淘宝模特拍照姿势技巧 编辑:程序博客网 时间:2024/05/17 09:34
显示列表可以提高性能,因为他可以存储OPENGL的函数,供以后使用,如果需要多次重绘同一个几何图形,或者如果一次需要多次调用的用于更改状态的函数,把这些函数存储在显示列表中(将显示列表中的矩阵结果集保存,后续使用不需要重复计算以提高性能)
当通过网络在另外一台远程计算机上运算OPENGL程序时,把绘画命令保存在显示列表中具有特别重要意义,由于显示列表是服务器的一部分,这样可以减少网络通信,提高性能
显示列表更像是命令缓存器,而不是动态数据库,也就是说当显示列表创建后,就无法修改。同时显示列表的创建也存在一定的系统开销,因此一个小的显示列表未必会提升性能命名和创建,执行显示列表1.申请索引值
Gluint listName = glGenLists (Glsizei range);
分配range个连续的,以前未分配的显示列表索引,返回值为连续索引的起始
2.指定显示列表的开始
glNewList (listName, mode);
mode:GL_COMPILE
GL_COMPILE_AND_EXECUTE
3.OPENGL指令
4.显示列表定义结束
glEndList ();
5.执行显示列表
glCallList (listName);层次式显示列表
可以创建层次式显示列表,这是一种在glNewList()与glEndList()之间调用glCallList()执行其他显示列表的显示列表
glNewList (listName, mode);
glCallList (name1);
glCallList (name2);
glCallList (name3);
glCallList (name4);
glEndList ();
显示层次最少的嵌套层次是64,可能更高,通过GL_MAX_LIST_NESTING 属性查询管理显示列表索引
Glboolean glIsList(Gluint list)
void glDeleteLists(Gluint listm,Glsizei range)执行多个显示列表
glListBase(base);
指定一个偏移量,它将与glCallLists()函数中的显示列表索引值想加,以获取最终的显示列表索引,显示列表基址对于glCallList(),glNewList()无任何效果
glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
执行n个显示列表
type:GL_BYTE
GL_UNSIGNED_BYTE
GL_SHORT
GL_UNSIGNED_SHORT
GL_INT
GL_UNSIGNED_INT
GL_FLOAT
GL_2_BYTES
GL_3_BYTES
GL_4_BYTES
举例:
base = glGenLists (128);
glListBase(base);
glNewList(base+'A', GL_COMPILE); drawLetter(Adata); glEndList();
glNewList(base+'E', GL_COMPILE); drawLetter(Edata); glEndList();
glNewList(base+'P', GL_COMPILE); drawLetter(Pdata); glEndList();
char *test1 = "A SPARE SERAPE APPEARS AS";
GLsizei len = strlen(s);
glCallLists(len, GL_BYTE, (GLbyte *)s);
当通过网络在另外一台远程计算机上运算OPENGL程序时,把绘画命令保存在显示列表中具有特别重要意义,由于显示列表是服务器的一部分,这样可以减少网络通信,提高性能
显示列表更像是命令缓存器,而不是动态数据库,也就是说当显示列表创建后,就无法修改。同时显示列表的创建也存在一定的系统开销,因此一个小的显示列表未必会提升性能命名和创建,执行显示列表1.申请索引值
Gluint listName = glGenLists (Glsizei range);
分配range个连续的,以前未分配的显示列表索引,返回值为连续索引的起始
2.指定显示列表的开始
glNewList (listName, mode);
mode:GL_COMPILE
GL_COMPILE_AND_EXECUTE
3.OPENGL指令
4.显示列表定义结束
glEndList ();
5.执行显示列表
glCallList (listName);层次式显示列表
可以创建层次式显示列表,这是一种在glNewList()与glEndList()之间调用glCallList()执行其他显示列表的显示列表
glNewList (listName, mode);
glCallList (name1);
glCallList (name2);
glCallList (name3);
glCallList (name4);
glEndList ();
显示层次最少的嵌套层次是64,可能更高,通过GL_MAX_LIST_NESTING 属性查询管理显示列表索引
Glboolean glIsList(Gluint list)
void glDeleteLists(Gluint listm,Glsizei range)执行多个显示列表
glListBase(base);
指定一个偏移量,它将与glCallLists()函数中的显示列表索引值想加,以获取最终的显示列表索引,显示列表基址对于glCallList(),glNewList()无任何效果
glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
执行n个显示列表
type:GL_BYTE
GL_UNSIGNED_BYTE
GL_SHORT
GL_UNSIGNED_SHORT
GL_INT
GL_UNSIGNED_INT
GL_FLOAT
GL_2_BYTES
GL_3_BYTES
GL_4_BYTES
举例:
base = glGenLists (128);
glListBase(base);
glNewList(base+'A', GL_COMPILE); drawLetter(Adata); glEndList();
glNewList(base+'E', GL_COMPILE); drawLetter(Edata); glEndList();
glNewList(base+'P', GL_COMPILE); drawLetter(Pdata); glEndList();
char *test1 = "A SPARE SERAPE APPEARS AS";
GLsizei len = strlen(s);
glCallLists(len, GL_BYTE, (GLbyte *)s);
显示列表管理状态变量
显示列表可以包含用于修改opengl状态变量值的函数,这些值在执行显示列表时被修改,并且这些值在显示列表执行完仍然会保持,简单的说,假如在显示列表中设置 glColor(1,0,0), 在显示列表执行完成后,设置的颜色依然起作用。
有时候,我们希望显示列表的修改对后面不产生影响,这就需要进行恢复属性
glNewList (listName, mode);
glPushMatrix();
glPushAttrib(GL_CURRENT_BIT)
...
do_some_draw();
glPopAttrib()
glPopMatrix();
glEndList ();
显示列表Demo:
多个显示列表Demo:
0 0
- 显示列表
- 列表显示
- 显示列表
- 显示列表
- 显示列表
- 显示列表
- 显示列表
- 列表显示所有网上邻居
- 进程列表显示初探
- OpenGL显示列表(转)
- OpenGL 显示列表(转)
- 跨站点显示列表
- 显示用户列表页面
- MVC数据列表显示
- 列表显示所有网上邻居
- 有关显示列表
- Ext grid 显示列表
- OPengl显示列表
- DFA算法 及java版本实现敏感词过滤
- 我的服务器开发之路-子域名配置以及showdoc配置
- CCF 201512-2 消除类游戏 题解
- 《我的豆瓣》项目开发(三)
- linux 安装中文字体
- 显示列表
- 登录页面设计(一)
- pycharm的debug
- html5流体线 视频做法
- DOMJ节点关系(二)
- C#设计模式-抽象工程模式(5)
- SSH原理与运用(2):远程操作与端口转发
- 设计模式之Iterator和容器与迭代器遍历
- VC 获取打印机与打印作业的状态