簡體   English   中英

OpenGL PBO不能提高繪圖速度

[英]Opengl PBO is not improving the drawing speed

我正在使用帶有紋理的opengl進行視頻流。 為了提高效率,我嘗試了PBO方法。

但是我發現當我使用PBO時

glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[pboturn]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, 0);

當我不通過致電僅使用PBO時:

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, mydata);

盡管兩者都在繪制圖像,但是PBO並沒有提供任何效率上的改進...這是因為我使用的是集成的Intel HD4000系列視頻設備,但沒有任何獨立的視頻卡(實際上是Surface Pro)?

glTexSubImage2D大約需要10毫秒以上的時間才能上傳1920 * 1080 RGB圖像。 這正常嗎? 我正在Qt下進行開發,還有其他方法可以改善性能嗎?

更新:我已經在AMD圖形卡上測試了相同的程序。 而且消耗的時間降到了1ms以下...我可以說這是Intel圖形設備的極限嗎?

UPDATE2:

這是緩沖區生成和數據上傳部分:

glGenBuffers(1, pboIds);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pboIds[0]);
glBufferData(GL_PIXEL_UNPACK_BUFFER, cols*rows*4, data, GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);

對於測試,我只在初始化期間發送一次數據,因此測試代碼中沒有更多數據上載到PBO,也沒有緩沖區映射。

如果您僅將PBO用作圖像上傳的順序代理,您將一無所獲,因為您實際上是受I / O約束的,必須等待數據傳輸。 PBO背后的想法是,您可以在GPU忙於繪圖的同時“在后台”進行數據傳輸和紋理圖像指定。

因此,要真正受益於PBO版本的上傳,您必須使程序異步運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM