簡體   English   中英

實時2D渲染到系統內存

[英]Real-time 2D rendering to system memory

通過編寫處理系統( 非視頻 )內存中的圖像/幀數據的視頻濾鏡,渲染2D圖形,應該是跨平台的(至少是Windows,Linux和OSX )並且工作得非常快,我查看了不同的渲染器,比如開羅AGG和許多其他項目。 我不喜歡GPU要求,因此到目前為止我的重點是軟件渲染。

令人遺憾的是, 開羅在復雜的路徑和漸變上變得非常慢,並且通過微小的路徑段產生了丑陋的幾何缺陷, AGG也很慢,因為缺少優化需要用戶進行大量工作,其他項目只是渲染到窗口或性能不重要對他們來說 Blend2D讓我很好奇但是他的時間變得成熟了。

現在我問我:我應該渲染一個OpenGL幀緩沖區並通過幾何庫做2D到3D的東西,接受挑戰從頭開發軟件渲染器(由SIMD,線程管道等加速)還是我想念一個適合我的圖書館?

推動與GPU相關的所有圖形總是值得的,因為近來便宜的數據傳輸到視頻內存和從視頻內存傳輸,即使使用1080p或更大的圖像?

典型的台式機CPU有4個處理核心,運行頻率為2.5GHz。 現代桌面GPU (大約2010年)有48到480個着色器,運行頻率為1.4GHz。 因此,就原始處理能力而言,GPU可以比CPU快7到70倍處理圖形。

至於傳輸帶寬,1080p圖像是1920×1080像素,幀速率是每秒30幀,像素是4字節(32位)。 因此,實時1080p處理所需的總總線帶寬是

1920 x 1080 x 30 x 4 = 248 MB/s

PCI Express 2.0 x16插槽的帶寬為8000 MB / s。 也就是說CPU到GPU的傳輸速率不是問題。

所以,回答你的問題:是的,即使使用1080p或更大的圖像,推送與GPU相關的所有圖形總是值得的。

OpenCV的替代品可能是SDL 至少有一個教程和文檔專門討論將視頻數據流式傳輸到硬件 當然,你必須用glsl重寫你的過濾器來獲得任何不錯的加速度。

也就是說,聽起來您的問題可能會從OpenCL或Cuda等GPU計算解決方案中獲益更多。 在這種情況下,不涉及渲染,而是將數據發送到GPU內核,並在處理時將其恢復。 或者可以將它發送到OpenGL / DirectX(視頻內存可以很容易地作為紋理重用而不會丟失性能)進行渲染。 如果您不想超越OpenGL api,還可以使用計算着色器 像傳統着色器一樣工作,除了它在傳遞中計算,但有一些額外的約束和限制。

你試過OpenCV嗎?

它為軟件和硬件渲染器提供了大量高度優化的函數 ,用於實時圖像處理和渲染。

暫無
暫無

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

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