不斷向GPU上傳紋理(並替換舊紋理)的開銷是多少。我正在研究使用OpenGL的新跨平臺3D窗口系統,並計劃爲每個窗口(包含UI元素)上傳單個位圖。該位圖將與GPU同步更新(使用VSync)。我想知道這是否是一個好主意,或者如果經常編寫位圖會帶來太多的性能開銷。謝謝!在OpenGL中不斷向GPU上傳新紋理的開銷是多少?
回答
好像nVidia的Geforce 460M在本地內存上有60GB/sec的帶寬。
PCI Express 2.0 x16可以管理8GB /秒。
因此,如果您嘗試通過PCIe總線傳輸太多紋理,您可能會遇到內存帶寬問題。它在60Hz時每幀可以提供約136 meg。未壓縮的24位1920x1080大約是6兆。所以,足以說你可以在16x顯卡上每幀上傳幾幀視頻。
當然不是那麼簡單。有大約20%的PCIe開銷。所有繪圖命令也必須通過該鏈接上傳。
一般來說,雖然你應該罰款,你不要過度做。請記住,在下一個(甚至更晚)之前上傳一個您不期望使用的幀的紋理是明智的。這樣,您就不會在渲染停止等待PCIe上傳完成時造成瓶頸。
應該指出,純glTexImage具有重新初始化紋理對象的開銷。如果性能很重要,應該使用glTexSubImage;在像素緩衝區對象的情況下glBufferSubData + glTexSubImage – datenwolf 2011-03-03 00:37:27
一旦你使總線飽和,創建新紋理對象的CPU時間是否真的很重要? – 2011-03-03 00:44:46
這可能是因爲在傳輸之前,創建一個新的紋理對象需要至少2個內存分配(實際上,更有可能3:用於數據結構,一個用於主內存中的位圖,另一個用於位於gpu內存中的位圖)甚至開始。轉移的延遲不會隱藏這種開銷,它是最重要的。此外,分配必須不僅在應用程序的線程中同步,而且還在系統上的所有線程中同步,因爲內存由所有內容共享,所以我不一定會在「不顯着」類別中預訂開銷。 – Damon 2011-03-03 10:50:20
最終,你的答案將被分析。但是,如果沒有更改,可以進行的一些早期優化是避免更新紋理。根據紋理和像素格式的大小,這可能會非常昂貴。
配置文件具有更簡單的情況,可以模擬您期望的使用類型。根據這些窗口的大小,我懷疑性能開銷(沒有我提到的優化,至少)將無法使用,如果你有一些窗口更大。
- 1. 如何在玩家在opengl中向上移動時不斷更新紋理牆?
- 2. opengl多紋理
- 3. OpenGL - 向紋理添加新數據
- 4. OpenGL紋理不
- 5. OpenGL FBO多紋理
- 6. 在Actionscript 3中使用代理的性能開銷是多少?
- 7. GPU上的內存大小分配 - opengl紋理加載問題
- 8. GPU上的紋理圖像處理?
- 9. 在OpenGL中,GPU如何訪問紋理數據?
- 10. 在Cocos2d中,如何從OpenGL內存(GPU)釋放紋理?
- 11. gpu上size_t的sizeof是多少?
- 12. 使用glTexImage2D在OpenGL中更新紋理
- 13. OpenGL ES在多紋理中使用glColor4f
- 14. 在OpenGL中使用多個紋理
- 15. REXX中length()的處理開銷是多少?
- 16. 在opengl中繪製兩個紋理到一個新紋理
- 17. OpenGL:處理紋理時至少綁定一個紋理?
- 18. OpenGL,GL_MODULATE和多紋理
- 19. OpenGL多位Alpha紋理
- 20. 多活動紋理opengl
- 21. GPU紋理潑灑
- 22. Castle Active Record的開銷是多少?
- 23. 巨大功能的開銷是多少?
- 24. OpenGL中多個紋理的問題
- 25. 在Android上使用AUTOINCREMENT for SQLite的開銷是多少?
- 26. 多少表開銷太多?
- 27. 在OpenGL中重複紋理
- 28. 在opengl中不刪除紋理
- 29. OpenGL紋理合並不(總是)工作
- 30. 高斯模糊與OpenGL(不是紋理)
爲什麼渲染ui客戶端? – RecursiveExceptionException 2016-07-10 18:05:16