2012-08-31 34 views
1

我正在談論的標誌是GL_STREAM_DRAW,GL_STATIC_DRAW和GL_DYNAMIC_DRAW。 The manual page is clear about when you should use them but ambiguous about what will happen if you doglBufferData中的提示標誌實際上做了什麼嗎?

現在,在你們大家都回答得太快之前,讓我說明我明白他們應該做什麼,並且可以想象出一些假設可能很重要的假設情景。但我懷疑它在實踐中有很大的不同。最近我一直在想,將旗子設置爲GL_DYNAMIC_DRAW並忘記它會很好,但我腦子裏有一種嘮叨的疑問,即如果我那樣做,我可能會在自己的腳下開槍。

沒有人真的知道更多具體這些事情做什麼?特別是我對STATIC_DRAW和DYNAMIC_DRAW之間的區別最好奇。選錯了一個框架死亡陷阱還是他們只是安慰劑?我想,任何真正的答案將取決於實際的驅動程序實現。或者,如果你能想出一個真實世界的例子,其中這些標誌做什麼(真的有什麼),那麼我會有興趣看到它。

+0

注意:該手冊頁是可悲的過時。而且我不是在談論它只有OpenGL 2.1這一事實。 [手冊頁的維護者已經聲明他們不會修正2.1頁中的任何錯誤。](http://www.khronos.org/bugzilla/show_bug.cgi?id=464#c1)所以你應該避免從使用它們。 –

+0

這是很好的知道,但我不認爲在過去幾年中glBufferData已經發生了很大的變化。我想我會發佈一個鏈接,而不是提供參考pdf的頁碼。你知道手冊頁面的更好來源嗎? – Mikola

+0

我厭倦了維護人員修復錯誤的速度緩慢,因此[我將整個事情上傳到OpenGL Wiki](http://www.opengl.org/wiki/Category:Core_API_Reference),其中錯誤可以被修復,因爲它們被發現,而不是等待。這隻公開*核心* OpenGL API,而不是兼容性。如果你想使用「官方」4.3核心API參考,[在這裏可以找到](http://www.opengl.org/sdk/docs/man4/)。我只是希望如果他們不保持最新狀態,他們會把舊頁面刪除。 –

回答

3

使用提示將永遠不會有任何行爲改變。他們會做的最多的是改變各種操作的表現。也許即使不是那樣。例如,the usage hints were so misused that AMD effectively ignores them。他們會根據您的緩衝區使用如何使用來移動內存,而不是基於使用提示。 NVIDIA的驅動程序更不願意妥協。

一般來說,知道使用哪個使用提示以獲得最大性能的唯一方法是使用配置文件它。您可以選擇哪種提示可以提供最佳性能。

+0

這是一個有趣的參考,雖然有點粗略。你有更多的信息,特別是當你設置STATIC_DRAW vs DYNAMIC_DRAW時會發生什麼? 我完全理解需要配置文件和測試事物以選擇最佳配置,並且我知道這些標誌不會改變渲染行爲,但這不是我在這裏要求的。我想了解的是,如果我選擇一個標誌而不是另一個標誌,並知道它會如何影響性能,會發生什麼。 (如果這篇文章是可信的,那麼至少在2010年的AMD硬件上似乎沒有什麼...) – Mikola

+0

這可能是一個平臺的東西,只要支持。我知道,我所交談的Apple工程師對使用'GL_STATIC_DRAW'進行特定優化的iOS設備非常清楚,這似乎反映在我在自己的應用程序中看到的內容中。他們在自己的OpenGL ES編程指南中詳細討論了這些擴展:http://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html#//apple_ref/doc/uid/TP40008793-CH107-SW5 –

+0

@BradLarson:再次很高興知道。性能方面,這些優化會發生什麼?當你發出一堆更新或使用更多內存時,它們會減慢速度嗎?任何想法發生了什麼? – Mikola

相關問題