OpenGL-顯示列表

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();

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章