Direct2Dのお話。(コンピュータ編)Direct2Dのお話。古いブログDirect2Dについて考えてみた。Slideshow』の最新版をリリースしました。実を言うと、表示時間に関する致命的なバグの修正が最重要課題だったり。2D』による描画機能を搭載させました。2D』に関する考察をしてみることにします。2D』について簡単にお話しします。3.0の時代から『GDI』とよばれるAPIが担っていました。95よりも前、16bitの時代に確立された長い歴史を持つ技術です。XPでは『GDI+』と名前がかわり比較的大規模なアップデートも行われましたが、しょせんは『+(プラス)』ですから基本が同じであることは一目瞭然です。この『GDI』を一言で言ってしまえば、『アプリケーションとハードウェアとの間をうまいことやってくれる機能』です。これのおかげで、グラフィックチップが『Radeon』だろうが、『Geforce』だろうが同じウィンドウが表示されまし、『EPSON』のプリンターでも『Canon』のプリンターでも、まぁまぁ似たような印刷物ができあがるわけです。ところが、様々なハードウェアでもヨロシクやってくれるようにする機構のため、ハードウェアの能力を最大限に生かすのには向かず、またオーバーヘットも多かったため、ゲームのような素早い動きが必要なアプリケーションだとモッサリしてしまう問題がありました。このため、速度の必要なゲームは長らく高速な処理が可能なDOSが主流でした。プログラムがハードウェアを直接制御していたので、『GDI』とは逆にハードウェアの能力を最大限に生かしオーバーヘットも少ない反面、アプリケーションはハードウェアに制限されてしまい、また安定性もプログラムに大きく左右されていました。Blaster』(または互換品)以外では音が鳴りませんでした。そこで、Windowsでもゲームを普及させるべく、ゲームなどに向けた新しいAPIとして『DirectX』というものが用意されました。これは、どちらかと言えば『GDI』に近く、ハードウェアを意識せずにヨロシクやってくれるにはくれるものの、『GDI』よりもハードウェアに密着し、ハードウェアの能力を生かしつつオーバーヘッドも少なくなるようにしたものです。○以上のグラフィックチップを搭載していること』のように書かれていることからも見て取れます。Vistaまできました。Vista以前のGDIとDirectXのイメージちなみに、『DirectX』は、『Direct3D』や『DirectSound』、『DirectShow』などの総称で、『Direct(ほにゃらら)』という意味です。『プロジェクトX』の『X』と同じですね。ちなみに、この『DirectX』の中身なのですが、『Direct3D』以外は、入れ替わり立ち替わりで追加されたり、名前が変わったり、統合されたりとけっこう変化しています。Manager』という技術が導入されました。Manager』は基本的には『Direct3D』を使っています。Vistaでは描画は『DirectX』に一本化されて、『GDI』は一旦『Direct3D』に転送されて表示されるようになりました。Vistaでアプリケーションの表示がモッサリした理由はいくつかありますが(GDIのハードウェアアクセラレーションの無効化など)、それまで『GDI』が直に描画されていたのに対して『Direct3D』を経由するようになったことによるロスもその大きな理由の一つでした。VistaのGDIとDirectXのイメージ問題なのは、「では『GDI』を使わない方法はあるのか?」と言った時に、WPFという新しいプログラミング方法を使ってアプリケーションを作る以外になかった点です。Frameworkを使った新しいプログラミング方法なのですが、現在でも通常のアプリケーションで普及しているとは言い難い状況です。Vistaでは、『GDI』を使ってモッサリするか、『WPF』という新しいプログラミング方法を使ってアプリケーションを作り直すかの2択という状況だったわけです。Vistaの評判に対する回答として、モッサリ解消に向けて数々の対策を行いました。その一つが『GDI』に変わる新しい2D表示機能である『Direct2D』です。名前は『Direct2D』ですが、『Direct3D』と同格というわけではなく、内部的には『Direct3D』を機能拡張して2D表示に対応させた部分の名称というもののようです。『Direct2D』のうち文字描画機能として『DirectWrite』という機能も用意されました。『Direct2D』は『DirectX』ファミリーのため、通常のC++でプログラムを書くことができます。ここはWPFとは異なりアプリケーションを作る側にとっては障壁が低いものとなります。7のGDIとDirectXのイメージ『Direct2D』の導入で、通常の2Dアプリケーションでも『GDI』ではなく直接『Direct3D』としてデスクトップに描画することができるようになったのです。『DirectX』はその生い立ちからも、ハードウェアの能力を生かすように設計されており、『Direct2D』も『GDI』よりもグラフィックチップの能力を活用して高速でなめらかな描画をCPUに負荷をかけずに表示することが可能になっています。前置きが非常に長くなりましたが。『Direct2D』ですが、思ったよりも使いづらかったというのが印象です。プログラムをしてみて感じた問題点を3点挙げてみます。1.プログラミング手法が『GDI』とは違う『Direct2D』は『DirectX』ファミリーですので、『DirectX』とプログラミング手法は非常によく似ているように見えますが、逆に『GDI』とはかなり異なるプログラミング概念のように感じました。いった意味で、『DirectX』を扱ってきた人にとっては障壁は低いものであることは確かなのですが、上記の通り『DirectX』は今までゲームや一部のマルチメディアアプリケーションにしか使われていなかったので、多くの通常のアプリケーションを作ってきた人にとっては新たなジャンルということになります。『GDI』と『Direct2D』の相互のやりとりはあまり考慮されていないようです。プログラミング手法が大きく異なるので難しいのかもしれませんが、GDIを前提に作ったアプリケーションを描画部分だけ『Direct2D』にするような作り替えは難しいようでした。Slideshow』では『Direct2D』で画像を表示するのにあたり、画像ファイルの読み込み部分から別経路にした方が、読み込んだ画像を『Direct2D』向けに変換するよりもずっと楽でした。Vistaはアップデートで対応)。したがって、それ以前のOSに対応させるにはGDIとDirect2Dの両方の描画機構を用意して環境に応じて使い分ける必要があります。その時に、上記の相互のやりとりが考慮されていない事が大きな負担になります。Direct2Dは『クラス』として提供されているので、関数のように動的に対応させたりすることが難しいです。私は『Direct2D』での処理をモジュール(dll)にまとめることで、動的に切り替えができるようにしました。XPが対応していないため相当の時間がかかることが見込まれます。時代はクライアント主導の時代からサービスとの融合を目指したクラウドな時代に突入しつつあるように見えます。なってくると、プラットホームはOSではなくブラウザということになっていくのかもしれません。XPの寿命は今までのOS以上に長くなっていく可能性があります。3.性能差がよくわからない画像が高解像度化されて表示されるようになるとか、文字がMacよりも美しくなるとか、目に見えた変化があるならば対応させるメリットもあるのですが、切り替えて色々試してみましたが、劇的な変化は感じられませんでした。描画速度に関しても『Direct2D』でもそれなりにモタつきますし、『DirectWrite』で書いた文字も輪郭はギザギザして見えました。多くの書き換えを要し、プログラミング手法の変更までして行った結果としては、ちょっと魅力に欠けると言わざるをえません。いうことで、『Direct2D』が爆発的に普及することは難しいのではないかと私は思うのです。Explorerの次期バージョンが『Direct2D』を採用するなどの話も聞かれ、順風満帆のようなイメージもあるものの、全体を見ると『GDI』から『Direct2D』に主流が移行する時代は当分先か、ひょっとしたら来ないかもしれないと考えています。『GDI』は確かに、15年以上も前に作られた技術を基本としており、その間の各方面での機能拡張で複雑怪奇になってしまっている感は否めません。『GDI』の基本コンセプトは『アプリケーションとハードウェアとの間をうまいことやってくれる機能』です。その意味で考えれば、アプリケーションは今まで通り普通にGDIを使って描画すると、グラフィックチップの能力を活用して高速に美しく表示してくれる、というのが新しいWindowsに搭載される『GDI』の理想的な姿ではないのかな?と思うのです。Microsoftとして良いことではないでしょう。今はクラウドコンピューティングへの移行期で、クライアントで動作する普通のアプリケーション(リッチクライアントと呼ばれるらしい)から、クラウドを活用したブラウザ上で動くアプリケーションのスタイルが主流になっていくかもしれません。そんな先の見えない次期に、クライアントで動作するアプリケーションの新しいプログラム手法を学ぶのはちょっと気が進みません。AIRをやってみるとか、同じMicrosoftのプログラミング言語でもSilverlightなどの方が将来性がありそうな気がします。そんな情勢を含めて、次期Windowsの『GDI』と『Direct2D』の関係がどうなっていくのか興味深いところなのです。5450を買いました。11対応は魅力的です。ちなみに長らくGeforce系を使っていましたが、昔はATIのRadeon(初代)をかなり長い間愛用していました。ちなみに、そのRadeonは半年くらい前まで家族用マシンで現役でした。3Dゲームをしない私にとっては、発色が自然で美しいと定評のあるATIの絵作りが気に入っていましたが、ドライバーのデキがGeforceの方が良いということでGefoceを使っていました。ネットを見回しても私と同じようにドライバーを理由にGeforceを選んでいる人は結構見かけるので、ATIさんはそこはがんばってほしいところですね。5xxxシリーズでもっともエントリーレベル。3DゲームをしないのでRadeonでもGeforceでもエントリーレベルの製品しか眼中にありません。nVIDIAの製品はどういうわけかここ数年、エントリーレベルの製品でもファンが搭載して結構発熱もするのに対して、ATIはエントリーレベルの製品はファンレスで消費電力が低いのは大変魅力的です。ATIはモバイル系の製品を古くから開発しているメーカーなので、省電力なチップの開発能力に長けていると言えます。Watchあたりの大御所に詳しく掲載されているのでそこを参考にしていただくとして、基本的には3D性能が低いものの、5xxxシリーズは基本的には『できること』に違いはありません。XP以前の環境ならば3Dゲームをしない場合は遜色がないと言って良さそうです。2Dはハードウェアサポートされていない可能性が高いということに気づきました。10.1くらいであればドライバーの作り次第では対応できそうな気はしますが。2Dの真の能力を発揮できるかもしれないと思い、ちょっと調べてみました。バージョン情報を調べてみました。実は交換前のスクリーンショットを取り損なったので、上はMac-miniのGeforceのスクリーンショットです。11となることが見込まれます。1.1に対応したドライバーモデルに対応したドライバーであればハードウェアでサポートされている機能には依存しないようです。バージョンと関連しているようです。バージョンが10.1になっていること。2Dによる描画とで差がでるか実際に試してみました。違いが出るとしたら、『速度』と『負荷』と『絵作り(発色等)』ですね。速度はどちらも充分にあるので、ちょっとした画像の表示に差はありませんでした。2D』の方が発色が若干鮮やかに変化したような気がしました。5450の方がハードウェアによる処理が増えているようです。ここまで言っておいてなんですが、2D処理は実用で大きな差がでるような高負荷な処理でもないので、普通に使う分はどちらでも違いは感じられないかもしれません。