[英]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,還可以使用計算着色器 。 像傳統着色器一樣工作,除了它在傳遞中計算,但有一些額外的約束和限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.