2009-10-31 48 views
0

我正在開發一個使用OpenGL提供的顯示列表的應用程序。我的想法是調用重複性任務的顯示列表,例如轉換和服務器狀態集。 實際上,實現允許每個可渲染對象有兩個顯示列表。在這兩種情況下,顯示列表不包含頂點,法線等,但僅包含矩陣和服務器狀態。顯示列表生成

我現在的問題是如何決定何時生成顯示列表:它可能會發生,在某些情況下,生成顯示列表的屬性會發生變化,從而導致顯示列表的新編譯(認爲鼠標移動了旋轉一個東西)。

只有當屬性在N個渲染循環中沒有改變時,生成顯示列表可能是適當的嗎?如何量化這個N?我應該禁用臨時特定的顯示列表嗎?

注:和在RenderState(315:356):源可以在Renderable(201 187)中找到。對於身份不好(我認爲這是我的VS ...)我只注意到了。 :(

OT:如何重新格式化只identation :)

回答

0

請記住,答案沒有考慮使用或不使用顯示列表。 (編輯:顯示列表可用於舊系統,並可提高這些系統的性能)。

N數量應該與存儲在顯示列表中的數據量成比例。只有當顯示列表中的數據發生變化時纔會進行顯示列表重新編譯,但如果數據頻繁變化,則重新編譯過程可能會延遲,直到驗證穩定的數據。

6

說實話,我不推薦使用顯示列表。他們已經被OpenGL標準所棄用。相反,你應該使用頂點緩衝區(檢查出glDrawArraysglDrawElements)。

然後,你不必擔心你的再生顯示列表,只需設置你的頂點數組。

+1

+1顯示列表緩慢,過時並且使事情複雜化 – 2009-10-31 15:44:34

+0

我已經使用了緩衝區對象。在僅用於OpenGL 3的實現中,可以排除顯示列表管理,但在大多數顯卡上,顯示列表允許避免大量的PInvoke;另外高效地顯示列出緩存命令和數據,增加渲染性能(例如,在照明期間的預計算反矩陣)。 – Luca 2009-10-31 15:47:57

+0

您是否測試過實際性能提升?這取決於很多事情;而且,如果您對性能感興趣,則可以(也可能應該)預先計算並自行存儲照明矩陣。 – 2009-10-31 15:59:04