2011-05-03 26 views
1

我工作的一個新的OpenGL應用程序,並且我知道,顯示列表將被棄用,在OpenGL 3.1(連同其他許多有用的功能,這(對我來說)似乎有點傻)並替換爲頂點緩衝區對象。我成功在NVidia卡上繪製了一個使用VBOs的三角形,但該示例未能在我的上網本上的Intel芯片上運行,因爲它不支持glGenBuffers。看來OpenGL存在一個關鍵缺陷(新舊GPU/GMA之間的兼容性損壞)。作爲一個小型企業,我的遊戲需要與儘可能多的系統兼容,但是我不希望我的程序不能在較新的顯卡上工作(由於它依賴於顯示列表,這些列表已從OpenGL 4.1中刪除規範)。這會給我對顯卡的最大支持(舊的和新的)。顯示列表或頂點緩衝區對象?維也納組織或顯示列表 - GPU兼容性

回答

4

如果您的應用程序上運行GMA,你一定有一個低多邊形數量。因此,在新顯卡的驅動程序中模擬顯示列表的效率低下不會成爲問題,它們有足夠的帶寬可供使用。

如果您仍然關心效率,請務必使用glVertexPointer/glDrawArray來最大化批量大小。這可以與顯示列表結合使用,但可以減少列表中單獨操作的次數,從而使仿真更少問題。

最壞的情況下,如果一些平臺真的不支持顯示列表,你可以用一個函數調用替換glCallList

+0

它們在驅動程序中模擬,完全從GPU(包括驅動程序)中刪除,還是有必要使用「兼容性上下文」使其在GPU上工作? – IDWMaster 2011-05-03 23:51:53

+0

@IDWMaster:支持的驅動程序(如果你支持GMA您必須使用1.5左右反正還是老版本的OpenGL的)當你請求一個兼容性方面。無論是100%仿真還是部分硬件加速都取決於芯片,但無論如何它應該跟上英特爾GMA可以處理的任何幾何尺寸。 – 2011-05-03 23:54:38

+0

謝謝!不知道glDrawArray函數!這應該肯定會提高性能!我會在3分鐘內接受答案。 – IDWMaster 2011-05-03 23:54:51

3

您的英特爾網卡做,但只能通過ARB接口支持維也納組織。嘗試glGenBuffersARB(同時將所有其他VBO代碼轉換爲使用ARB版本)。它將在nVidia和英特爾GMA上運行。

+0

ARB接口與標準接口有什麼缺點?爲什麼有兩種不同的方式來繪製維也納國際組織? – IDWMaster 2011-05-04 00:02:32

+0

ARB接口來自添加新功能(體系結構評審委員會)的建議,並在接口完成之前表示它們。在一個給定的驅動程序(支持這兩種驅動程序)中,通常ARB和常規接口的行爲幾乎相同(假設提案通過時規範沒有太大變化)。 – 2011-05-04 00:27:32

+0

@IDWMaster:大多數OpenGL功能是作爲供應商擴展開始的,然後成爲ARB認可的擴展,然後最終被添加到核心規範的未來版本中。這可以防止核心規格混亂與失敗的功能。對擴展沒有後向兼容性要求,而核心接受的功能永遠存在(至少在兼容性配置文件中)。 – 2011-05-04 00:28:56

0

或者,您可以查詢OpenGL版本支持的系統,並相應地使用DisplayLists或VBO,而不是依靠一種方法來與每個OpenGL版本兼容。通過這種方式,您可以確定您正在使用最新,最高效和最快速的繪圖方式,無論系統支持何種方法(displaylists/VBO)。

此外,這樣的實施方式可以容易地擴展,以支持在,比方說,4.4的OpenGL或OpenGL 5.0未來繪圖方法。然而,這會導致多個代碼在功能上完成同樣的任務:告訴GPU要做什麼,這可能會增加代碼大小和複雜性。