検索
ホームページバックエンド開発C#.Net チュートリアルAdobe の FlashPlayer のレンダリング アルゴリズムについて簡単に説明します

少し前に、Flash Player のレンダリング パフォーマンスが HTML 5 の数倍であることを紹介する CSDN の記事を目にしました。過去数年間にわたる Adob​​e の Flash Player に関する研究を思い出し、なぜそのようなパフォーマンスがあるのか​​を理論的に探ってみたいと思いました。 Adobe の Flash Player が従来のハードウェア アクセラレーション (非 GPU ソリューション) で批判されてきた理由について話しましょう
初期の頃、私は IC 設計会社で働いて、公式の Flash Player ハードウェア アクセラレーションを開発しました。ローエンド プラットフォーム (ハードウェア 3D アクセラレーション付き) いくつか 月末にはハードウェア レンダリング エンジンが完成しましたが、最終的な結果は非常に予想外でした。ハードウェア アクセラレーションに切り替えた後のパフォーマンスは、実際にはソフトウェア レンダリングよりも悪かったのです。その理由を説明するために、Adobe の Flash Player ソフトウェアから始めましょう。レンダリング アルゴリズムの原理から始めましょう
実際、FlashPlayer の 2D レンダリング エンジンは最も一般的なスキャン ライン アルゴリズム (スキャンライン アルゴリズム) を使用しており、簡単に言えば、仮想ディスプレイ デバイス (アンチエイリアシングを考慮して、仮想ディスプレイ。デバイスは、4 x 4 アンチエイリアシングなど、実際のディスプレイ デバイスよりも大きくなります。仮想ディスプレイ デバイスの垂直方向の長さは、実際のディスプレイ デバイスの 4 倍です。) ) 各走査線はベクトル グラフィックの各エッジ (エッジ) との交点を計算し、走査線が 1 つずつ計算された後、異なる塗りつぶしルールに従ってそれを塗りつぶします。上から下まで、仮想ディスプレイ デバイス内で完全なグラフィックが完成します。次に、スーパーサンプリング アルゴリズムに従って、仮想ディスプレイ デバイス上のグラフィックが実際のディスプレイ デバイスに出力され、エイリアスのない完全なグラフィックが得られます。実際の表示デバイス上で上記の動作を一定の割合で繰り返し、連続したアニメーションを取得できます。そして、FlashPlayer がストリーミング swf ファイルを解析し、指定された速度で画面を更新してアニメーションの再生を完了します。簡単な結論:
l ベクトル演算は膨大な計算です。これは、FlashPlayer がほとんどのプラットフォームでパフォーマンス上の問題を抱えている理由でもあります。非常に残念ですが、現在のリアルタイム 2D ベクトル グラフィックス再生ソフトウェアには FlashPlayer しかないようなので、これを行う方法はありません。これはスケープゴートのせいです
l 高解像度グラフィックスの表示パフォーマンスが低品質グラフィックスの表示パフォーマンスよりもはるかに悪いのはなぜですか?走査線による交点の計算は低画質の 4 倍です
(2D ベクトル グラフィックスの表示については、以前のリソースを参照してください: http://download.csdn.net/source/5773340)
実際の 2D ベクトル エンジンではキャップと結合を考慮すると、実際には非常に単純なポリラインやベジェ曲線でも多くの曲線で構成されます (グラフのポリラインの 2 つの端点 ---- キャップ):

このようにします。 Adobe FlashPlayer と競合できるリアルタイム 2D ベクトル表示プログラムがほとんどない理由は理解できます。これは少し矛盾していませんか。なぜ Adob​​e の FlashPlayer が優れているのでしょうか。上記は 2D ベクトル グラフィックス表示の原理の説明にすぎません。OpenVG (gingkoVG) や agg などの他の 2D ベクトル表示エンジンも、比較的一般的な 2D ベクトル表示エンジンである Adob​​e の FlashPlayer とまったく同じ原理を使用しています。独自の特別な定義については、FlashPlayer (swf_file_format_spec_v10) に関する Adob​​e の公式技術文書を注意深く読んでください。すぐに 2 つの非常に興味深い指示が見つかりました:
l FlashPlayer は 2 次ベジェ曲線 (2 次ベジェ) のみをサポートし、同様の PostScript および 3 次ベジェ曲線はサポートしません。 OpenVG などの従来の 2D ベクトル エンジンで使用されるベジェ曲線 (Cubic Bezier)


2 次ベジェ曲線と比較すると、交差を計算する際に 1 つの 3 次ベジェ曲線によって追加される計算量はそれほど多くないようです。大: さらにいくつかの乗算演算があります。ただし、ほとんどの CPU システムでは、乗算と除算にかかる時間は加算や減算よりも長くなります。特に演算量が非常に多い場合、累積差はさらに大きくなります。 ;
l Adob​​eの公式サイトには、FlashPlayerがダッシュ(Dash)をサポートしていないことがファイルに明記されています


なぜDashをサポートしないのですか?実際、ベクトル グラフィックス表示では、曲線と走査線の交点の計算に加えて、曲線の長さを計算することが最も難しいことです。Dash の表示は曲線の長さの計算に依存する必要があります。事前に; gingkoVG を実装する場合、Dash 関数のカーブは含まれていません。Dash を使用した場合の表示パフォーマンスが 4 倍であることがわかります。いいえ、しかし、上記の制約があっても、その表示パフォーマンスは数回「改善」されています。 Adobe の FlashPlayer では、他のいくつかの最適化アルゴリズムがレンダリングに使用されます。もちろん、これらの最適化アルゴリズムは、一般的な最適化手法としてほとんどの 2D ベクトル エンジンでも使用されます。アルゴリズム レベルで汎用性を考慮する必要があるため、ほとんどの 2D ベクトル エンジンが 3 次のベジェ曲線、一点鎖線、さらには円弧 (OpenVG) をサポートしているのは残念ですが、これらがオープンである理由を理解するのは難しくありません。標準の 2D レンダリング エンジン (gnash は agg を使用するなど) を使用するソース FlashPlayer は、Adobe の FlashPlayer の実行パフォーマンスと比較できません。これは、FlashPlayer の 2D レンダリング エンジンが Flash のリアルタイム ニーズに合わせてカスタマイズされているためです。もちろん、これらに加えて、Adobe の Flash Player にはプログラムの最適化に関する多くの優れた機能がありますが、ここでは説明しません。この問題はここで終わるように思えますが、FlashPlayer を徹底的に調査した結果、いくつかの深刻な問題が判明しました。また、広く批判されてきた Adob​​e の FlashPlayer のハードウェア アクセラレーション パフォーマンスの低下の理由も明らかになりました。特別な GPU のハードウェア アクセラレーションについては、この問題を説明するために標準のハードウェア アクセラレーション方法 (OpenGL ES/OpenVG) のみを考慮します。Adobe の FlashPlayer が誕生したとき、ユニバーサル 2D ベクトル表示標準 (OpenVG など) はありませんでした。 2D ベクトル グラフィックス ディスプレイは、10 年以上の開発と最適化を経て完成度に達しました。これは、そのレンダリング エンジンが以前から改善されていない理由の説明にもなります。 FlashPlayer 4 から FlashPlayer 8 へ。このような大きな変更は、Adobe FlashPlayer ソフトウェアのレンダリング パフォーマンスがローエンドのハードウェア アクセラレーションを使用するよりも優れている理由も説明できます。ただし、成功は失敗でもあり、完璧すぎる標準とアルゴリズムが標準ハードウェアの使用を妨げます。おそらく (特別な GPU のハードウェア アクセラレーション、その柔軟性は考慮されていないため)、引き続き Adob​​e の公式ドキュメントを注意深く研究し、FlashPlayer が充填法に関して従来の 2D ベクトル エンジンとは異なることに気づきました。 (OpenVG/gingkoVG など) には、偶数-奇数塗りつぶしルール (偶数-奇数塗りつぶしルール) と非ゼロ塗りつぶしルール (Non-zero 塗りつぶしルール) の 2 つの塗りつぶしルールがあり、Adobe の FlashPlayer ではエッジ塗りつぶしルール (Edge-edge ルール) が追加されます。塗りつぶしルール)、ほとんどの 2D ベクトル エンジンは各シェイプ/オブジェクトに対して 1 つの着色方法 (RColor) を使用します。エッジ-エッジ塗りつぶしルールでは、エッジは左と右に応じて 2 つの異なる着色方法 (color1/color2) を持つことができます。もちろん、Adobe がこれを行う理由は、ソフトウェア レンダリングの柔軟性を高めるためです。たとえば、図に示すように、2 つの Shape が交差する場合、交差する部分に異なる色付け方法が許可されます。標準のグラフィックス アクセラレーション エンジン (OpenVG/OpenGL) を使用すると、混乱が生じます。つまり、シェイプに対してさまざまなシェーディング方法が使用される可能性があり、これはほとんどの 2D ベクトル エンジンに反するように見えますが、エッジの塗りつぶしルールは次のように考えることができます。は、奇数と偶数の 2 つの異なる塗りつぶしルールですが、各エッジの塗りつぶしルールがいつでも変更される可能性があることを考慮すると、単一の色を持つ Shape を再確認することは、特に曲線で構成される Shape の場合、それほど簡単ではありません。ただし、この問題は 2D ベクトル グラフィックスのレンダリングに比べればそれほど厄介ではありませんが、Adobe FlashPlayer が今日のほとんどの従来の 2D ベクトル エンジンに対して「フレンドリー」ではないようであることがわかります。----- プログラマは中間層を慎重に作成する必要があります。これらの問題を解決してください。これは Adob​​e のせいではありません。FlashPlayer が誕生したとき、これらの 2D ベクトル表示標準 (OpenVG) はまだ登場していませんでした。Adobe の FlashPlayer がオープン ソース プログラムではないのはただ残念です (Adobe FlashPlayer の AVM2 はオープン ソースになっています)。 ) したがって、公式の FlashPlayer を使用しない限り、Adobe がこれを行うまで辛抱強く待つ必要があります
(私たちは OpenVG の FlashPlayer を使用しています)

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Webからデスクトップまで:C#.NETの汎用性Webからデスクトップまで:C#.NETの汎用性Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

c#.net and the Future:新しいテクノロジーへの適応c#.net and the Future:新しいテクノロジーへの適応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#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース高度なC#.NETチュートリアル:次のシニア開発者インタビューをエースApr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

c#.netインタビューの質問と回答:専門知識を高めるc#.netインタビューの質問と回答:専門知識を高めるApr 07, 2025 am 12:01 AM

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、