這不是一個OpenGL問題,而是更多的C++組織問題。OpenGL狀態集
我將會有一個簡單的場景圖(一棵n-tree),其節點(爲了這個問題)將會渲染一些幾何圖形。更具體地說,它們在draw()
方法中都有一些OpenGL繪圖命令。
出於優化的原因,我想將相似的對象批量打包並一次繪製。出於這個原因,我想要表達一種我稱之爲「狀態集」的OpenGL。一個狀態集只是一堆OpenGL綁定,或者是在X對象上調用繪製之前獲取的命令,之後會被取消設置。
所以一個狀態集至少有set()
和unset()
,並且在渲染系統使用這個狀態集的節點的繪製命令之前和之後將被調用系統調用。
我的問題是如何表達所說的狀態集?肯定有一堆功能可以做,但我寧願能夠命名一組並記住它。與節點A相似,狀態集爲LIGHTING_AND_SHADOW
,節點B爲CEL_SHADING
。
由於這個原因,抽象類叫做stateSet
,它本質上是一個接口,用於set()
和unset()
方法,並且每個狀態集都從它繼承,這似乎是一個好主意。但是,它需要創建一堆對象才能獲得名稱。似乎可能會有更好的方法。
理想情況下,我想列出所有可以輕鬆召回的stateSets
。例如,在渲染開始之前,能夠按照它們的stateSet
對場景圖中的所有節點進行排序會很好。
任何想法?
這聽起來像是你要求我們給你的狀態集命名。你能否詳細說明你正在尋找哪種幫助。 – Mads
如果活動的GLSL程序是你的「狀態集」的一部分,那麼你可以讓這些「狀態集」成爲你的GLSL程序類的一部分:每個人都知道它需要設置什麼狀態以及它需要激活的程序。然後在渲染之前按節目對節點進行分組。 – Gigi