搜尋
首頁後端開發C#.Net教程簡單評論Adobe的FlashPlayer的渲染演算法

前一些時候看到CSDN上一篇文章介紹FlashPlayer的渲染效能是HTML 5的數倍文章,回想起幾年來對Adobe的FlashPlayer研究,想從理論上探究一下為什麼會有這樣的結果,同時也解釋一下針對傳統硬體加速(非GPU方案)為什麼Adobe的FlashPlayer會被批評的原因; 
早年在一家IC設計公司為一個低端平台(具有硬體3D加速)作官方的FlashPlayer的硬體加速,幾個月下來,硬體渲染引擎做好了,但最後的結果非常出人意料----- 改用硬體加速後的效能居然比軟體渲染的要差;為了解釋其中的原因,我們還是先從Adobe的FlashPlayer軟體渲染演算法原理上入手; 
事實上,FlashPlayer的2D渲染引擎使用的是最常見的掃描線演算法(Scanline演算法),及簡單的講,是以虛擬顯示設備(對於考慮抗鋸齒的情況下,虛擬顯示設備大於實際顯示設備,如4 x 4抗鋸齒,虛擬顯示設備的縱向是實際顯示設備的4倍)每條掃描線計算和向量圖形的各邊(Edge)的交點,並根據不同的填充法則填充兩個交點間的水平線;這樣隨著掃描線自上而下逐條計算完成後,在虛擬顯示設備中即完成了一幅完整圖形的構成,然後,再根據超採樣算法,將虛擬顯示設備上的圖形輸出到實際顯示設備上,這樣,在實際顯示設備上即得到一幅完美的無鋸齒的圖形;以一定的速率重複以上動作,及可以得到連續的動畫;FlashPlayer通過解析流式的swf文件,並且以指定的速度更新畫面完成動畫的播放,因此,我們已經有些簡單的結論: 
l  向量運算是一個工程浩大的計算;這也解釋了為什麼FlashPlayer在多數平台上存在的效能問題;非常遺憾的是,目前即時2D向量圖形播放軟體似乎只有FlashPlayer,所以這個黑鍋是沒辦法了; 
l  為什麼高畫質的顯示效能要較低畫質的差很多;因為在高畫質下,FlashPlayer是使用的4 x 4的超採樣抗鋸齒,及表示透過掃描線計算交點的計算量是低畫質的4倍; 
(關於2D向量圖形顯示,參考我之前的資源:http://download.csdn. net/source/5773340) 
在實際的2D向量引擎中,問題往往更為複雜,在考慮Cap和Join後,實際即使是一根很簡單的折線或Bezier曲線都是由很多的曲線構成的(如圖折線的兩個端點---- Cap): 

這樣可以理解為什麼現在為止鮮有可以和Adobe FlashPlayer相抗衡的實時2D矢量顯示程序了,這是不是有些矛盾:為什麼Adobe的FlashPlayer會一枝獨秀呢?以上只是關於2D向量圖形顯示的原理性解釋,其他2D向量顯示引擎,如OpenVG(gingkoVG)、agg等使用的是完全相同的原理,Adobe的FlashPlayer相對通用的2D向量顯示引擎一定有他自己特殊的定義,仔細閱讀Adobe關於FlashPlayer的官方技術檔(swf_file_format_spec_v10),我們很快就發現了兩處很有趣的說明: 
l  FlashPlayer只支援2階的貝塞爾曲線(Quadratic Bezier),而不支援類似PostScript和OpenVG等傳統2D向量引擎所使用的3階貝塞爾曲線(Cubic Bezier); 


相對2階Beizer曲線,3階貝塞爾曲線單獨一條在計算交點是增加的計算量似乎不大:多了幾次乘法運算;但在多數CPU體系中乘除法運算所消耗的時間會大於加減法,尤其在非常大的運算量下,其累積的差異就更大了; 
l  在Adobe的官方文件中明確註明FlashPlayer不支援點劃線(Dash) 


為什麼不支援Dash呢?事實上在向量圖形顯示中,除了曲線和掃描線交點的計算外,最困難的是計算曲線的長度,Dash的顯示必須依賴事先的曲線長度的計算;在實現gingkoVG時,不包含Dash功能的曲線顯示其顯示效能是使用Dash的4倍; 
l  僅此而已嗎?並不是,不過即使以上的約束,其顯示效能已經「被提升」了數倍。在Adobe的FlashPlayer中,針對渲染同時使用了其他的一些最佳化演算法,當然這些最佳化演算法作為通用最佳化技術在多數2D向量引擎中也會被使用;(參考:http://download.csdn.net/source /1998019) 
非常遺憾的是多數2D向量引擎因為需要考慮通用性,都會支援3階貝塞爾曲線和點劃線,甚至是圓弧(OpenVG),這樣從演算法層面我們不難理解為什麼那些使用標準2D渲染引擎(如gnash使用了agg)的開源FlashPlayer無法和Adobe的FlashPlayer的執行效能相比較了----- 因為FlashPlayer的2D渲染引擎是針對Flash播放的實時性的需要量身定做的;當然,Adobe的FlashPlayer除了這些外,在程式的最佳化上有很多高明之處,這些不是我們這裡需要討論的; 
事情似乎就此可以告一段落了,但隨著對FlashPlayer的深入研究,我們發現了一些更深入的問題----- 及Adobe的FlashPlayer被廣為批評的硬體加速性能差的原因;在不考慮針對特殊GPU的硬體加速,我們只考慮標準硬體加速方式(OpenGL ES/OpenVG)來解釋這個問題;Adobe的FlashPlayer在誕生時,那時還沒有通用的2D向量顯示標準(如OpenVG),其針對軟體渲染的2D向量圖形顯示可謂是亮點,在經過十幾年的發展和優化,Adobe的2D軟體向量渲染引擎可謂已經發展到盡善盡美了,這也可以解釋為什麼自FlashPlayer 4到FlashPlayer 8其渲染引擎一直沒有太大的變化,也可以解釋為什麼Adobe FlashPlayer軟體渲染的效能甚至會好於使用低階硬體加速的效能了;但,成也蕭何敗也蕭何,過於完美的標準和演算法阻礙了使用標準硬體加速的可能(針對特殊GPU的硬體加速,因為其靈活性不在我們的考慮中),我們繼續仔細研究Adobe的官方文件,我們注意到,關於填充法則FlashPlayer相對傳統的2D向量引擎有不同之處:傳統的2D向量引擎(如OpenVG/gingkoVG)有兩種填充法則:奇偶填充法則(Even-odd fill rule)和非零填充法則(Non-zero fill rule),而Adobe的FlashPlayer又增加了邊填充法則( Edge-edge fill rule),及多數2D向量引擎針對每個Shape/Object使用單一的著色方式(RColor),而在邊邊填充法則中,一條邊根據左右不同可以分別擁有兩種不同的著色方式( color1/color2),當然Adobe這樣做的原因是增加了軟體渲染的靈活性,如在兩個Shape相交時對於相交部分允許使用不同的著色方式,如圖: 


遺憾的是這樣在使用標準當圖形加速引擎時(OpenVG/OpenGL)會為我們帶來困惑:即針對一個Shape我們可能會有不同的著色方式,這似乎是有悖於多數2D向量引擎;儘管針對邊邊填充法則我們可以視作是兩個不同奇偶填充法則,但考慮到針對每條邊因此可能隨時變化的填充法則,具有單一Color的Shape的重新確認並非那麼容易,尤其對於由曲線構成的Shape。不過這個問題相對2D向量圖形渲染並不是很麻煩,但我們因此可以發現針對現在多數傳統2D向量引擎,Adobe FlashPlayer似乎並不「友善」 ----- 程式設計師必須小心編寫一個中間層來解決這些問題,這並非是Adobe的錯誤:在FlashPlayer誕生時這些2D向量顯示標準(OpenVG)還沒有出現; 只是非常可惜的是Adobe的FlashPlayer並非開源程式(Adobe FlashPlayer的AVM2已經開源),因此,我們必須耐心等待Adobe為我們去做這些,除非我們不准備使用官方的FlashPlayer; 
(我們自己使用OpenVG的FlashPlayer) 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
c#.net的持續相關性:查看當前用法c#.net的持續相關性:查看當前用法Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

從網絡到桌面:C#.NET的多功能性從網絡到桌面:C#.NET的多功能性Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#.NET與未來:適應新技術C#.NET與未來:適應新技術Apr 14, 2025 am 12:06 AM

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.net適合您嗎?評估其適用性c#.net適合您嗎?評估其適用性Apr 13, 2025 am 12:03 AM

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

.NET中的C#代碼:探索編程過程.NET中的C#代碼:探索編程過程Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#.NET:探索核心概念和編程基礎知識C#.NET:探索核心概念和編程基礎知識Apr 10, 2025 am 09:32 AM

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

測試C#.NET應用程序:單元,集成和端到端測試測試C#.NET應用程序:單元,集成和端到端測試Apr 09, 2025 am 12:04 AM

C#.NET應用的測試策略包括單元測試、集成測試和端到端測試。 1.單元測試確保代碼的最小單元獨立工作,使用MSTest、NUnit或xUnit框架。 2.集成測試驗證多個單元組合的功能,常用模擬數據和外部服務。 3.端到端測試模擬用戶完整操作流程,通常使用Selenium進行自動化測試。

高級C#.NET教程:ACE您的下一次高級開發人員面試高級C#.NET教程:ACE您的下一次高級開發人員面試Apr 08, 2025 am 12:06 AM

C#高級開發者面試需要掌握異步編程、LINQ、.NET框架內部工作原理等核心知識。 1.異步編程通過async和await簡化操作,提升應用響應性。 2.LINQ以SQL風格操作數據,需注意性能。 3..NET框架的CLR管理內存,垃圾回收需謹慎使用。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器