2016-06-14 6 views
1

PhotoshopやSony Vegasなどの一般的な商用編集ソフトウェアの構造に関する簡単な質問:Photoshopなどのプログラムはどのようにレンダリングされますか?

これらのアプリケーションのUIがどのように実装されているかは分かっていますが、 ?

OpenGLやDirectXなどの2Dと3Dレンダリング用のライブラリについてよく知っています。また、ソフトウェアレンダリング(Integrated Graphics)を使用して多くのことを行うことができます。しかし、これらのプログラムはどのオプションを使用しますか?

Photoshopには、GPUアクセラレーションレンダリングのオプションがあります。つまり、レンダリングコードをソフトウェアレンダリング用に2回、GPUでレンダリング用に2回書く必要があります。これは、OpenGLは他のオペレーティングシステムと互換性がありますが、Windowsマシン上でDirectXを使用する方が一般的に優れているという事実を考慮に入れていません。

これらのアプリケーションの開発者は、これらのすべての可能性についてグラフィックスコードを書き直すのに実際に時間がかかりますか、ライブラリ/簡単な変換が使用されていますか?

ありがとうございます!

+0

PhotoshopはOS統合UIを使用します。通常、ハードウェアの可用性に応じて最適化されます。 GPUアクセラレーションオプションは、gpu並列コンピューティングによって強力にスピードアップされる画像処理用です。 –

+1

ソフトウェアレンダリングと統合グラフィックチップは同じものではありません。程遠い。 –

答えて

1

PhotoshopとVegasがどうしているのか分かりません。しかし私が働いているところでは、いくつかのOSに依存しないイメージングアプリケーションを開発しました。グラフィックスの描画を支援するためにシステムに依存しないと主張するフレームワークがあります.Qt、Firemonkeyは私が使った2つのものです。しかし、これらはあなたが実行中のOSを区別するためにコードやコンパイラの指示をどこにでも入れなければならないので、大変な作業です。すべてのグラフィックアプリケーションに共通する描画プリミティブはほんのわずかです。

2Dアプリケーションでは、線を描くことができれば、独自のライブラリで曲線を描くこともできます。ポリゴンを塗りつぶすことができれば、曲線を塗りつぶすこともできます。さらに、線を描いてポリゴンを塗り潰すことができれば、3Dで描画することもできます。このような小さなセットがあるので、これらのすべての機能を実行できる独自のグラフィックコンテキストオブジェクト(OOP)を作成することができます。そのグラフィックスコンテキストは、DirectX、GDI、OpenGL、Metal、Vulkan、または独自のソフトウェアレンダラーの使用を切り替えることができます。

各OSについて、ウィンドウオブジェクトのハンドルを取得する方法と描画するバッファーを把握する必要があります。また、該当する場合は、そのバッファをグラフィックスカードにリンクする方法を理解する必要があります。

独自のグラフィックスコンテキストを作成するこの方法がうまく動作しない唯一の場所は、AAなどの特定のグラフィックカード機能やシェーダのプログラミング方法です。余分な仕事のために、私はこれらの機能を自分自身でプログラムしようとしたことはありません。これは、Maya、3d Studio Max、Blenderなどの3Dプログラムでは、ソフトウェアレンダリングに設定されていないと、ビューポートが常に見栄えがよくなるためです。ほとんどのグラフィックプログラマは、グラフィックスAPIに頼っています。要約中のSO

あなたがあなた自身の上のグラフィックスプログラミングの80%を行うことができるよりも、線を描画ポリゴンを記入し、OSに依存しない方法で、ピクセルデータにアクセスすることができます。これらの関数は、独自のライブラリにカプセル化して、異なるシステム上でこれらのプリミティブを別々に描画することができます。

関連する問題