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)
(2)GLboolean glIsList;
詢問顯示列表是否已被佔用的情況。若索引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();