24

microsoft.com の「グラフィックスとゲーム (Windows)」ページを開くと、

最後のカテゴリは次のように説明されています

レガシー グラフィックス: 時代遅れであり、新しいアプリケーションで使用すべきではないテクノロジ。

このカテゴリには、(とりわけ) 次の API が含まれます。

  • GDI
  • GDI+
  • OpenGL

あなたの意見は何ですか?今すぐ新しいソフトウェアを展開したい場合、Windows XP をサポートする必要があります (インストールされているすべてのシステムの約 50% をサポートしている必要があります)。Direct2D には Windows 7/Vista が必要です。他に何を使用する必要がありますか?

4

6 に答える 6

15

Microsoft の「レガシー」の定義は、賢明な開発者がすべきこととはほとんど関係がなく、代わりに Windows API のグランド リライトに基づいているのではないかと思います。

Windows Vista あたりから、Microsoft は API の多くを再設計してきました。現在、MMDevAPI は One True Sound API、WIC は One True Image File API などです。私が見たり聞いたりしたことから、これらの新しい API は古い API よりもはるかに優れており、「レガシー」システムはすべて機能します。新しいものに基づいています。Windows Vista 以降では、DirectSound は完全に MMDevAPI に基づいており、イメージ ファイルを読み取る必要があるコンポーネントは WIC を介して読み取ります。

Windows 8 には ARM バージョンがあり、現在の Windows API のサブセットのみをサポートしているようです。Windows on ARM がリリースされるまではわかりませんが、Visual Studio 11 の ARM プラットフォーム用に含まれているライブラリに基づいています (参照: http://www.winehq.org/pipermail/wine-devel/2012- March/094559.html )、GDI+ と OpenGL は利用できないようです。GDI はリンクに使用できますが、必ずしも完全であるとは限りません。

Vista 以降のこの新しい API は、VS11 ARM ターゲットのライブラリにほぼ対応しています。そのリストにあるものはすべて、それが行うことを行うための最新かつ最高の方法であるか、技術的に重要すぎて (今のところ) 破棄できないため、そこにあると思います。したがって、「レガシー」とは、少なくとも 1 つのことを行うための最新かつ最高の方法ではないものです。

One True Graphics API とは何かわかりません。Direct2D、Direct3D、DirectComposition (ちなみに、これは Windows 8 まで利用できません)、DirectWrite、および DXGI が既にあります。DXGI が最も近いようですが、グラフィックス API について十分に理解していません。gdi32 を取り除くのは技術的に非常に難しいと思います。非レガシー アプリケーションは、HDC を含む WM_PAINT を使用せずに、ウィンドウの一部が表示されたためにペイントする必要があることをどのように判断するのでしょうか? また、ウィンドウ プロシージャを置き換えることなく、ライブラリがアプリケーションに代わってそれを行うにはどうすればよいでしょうか? HDC を使用する UpdateLayeredWindow を使用せずに半透明のウィンドウを作成するにはどうすればよいでしょうか? user32 は gdi32 にどの程度依存しており、実際に分離できますか?

技術的な観点からは、Windows は GDI+ と OpenGL を簡単に取り除くことができますが、後方互換性を約束しない新しいプラットフォームであっても、OpenGL を取り除くことがうまくいくとは思えません。開発者にとっては価値が高すぎるようです。GDI+ はそれほど重要ではありませんが、サードパーティが代替品を提供するのは非常に簡単です。

あなたがリストした API のいずれかを使用することをお勧めします。最悪の場合、アプリを Metro または Windows on ARM に移植する場合、UI を書き直す必要があります。ニーズが単純で、Windows API を直接コーディングする場合は、GDI が適しています。描画 API として OpenGL よりも GDI+ を推奨する状況はあまりありません。GDI+ は遅く、制限があり、Windows でのみ使用できます。GDI+ API は 2D であるため単純です。そのため、アンチエイリアスを使用して非常に単純なことを行う必要がある場合は、価値があるかもしれません。

于 2012-04-05T01:01:34.010 に答える
11

OpenGL は非推奨ではありません。Microsoft の実装は. Microsoft の実装は古いバージョン 1.1 のままです。標準の現在のバージョンは、過去のバージョン 4 です。OpenGL を使用する場合は、Windows デスクトップのNVidiaATI、およびIntelグラフィックス カードで完全にサポートされていますが、Metro Windows モダン UI アプリではサポートされておらず、業界標準です。また、Macおよび Linux でも動作します。ソフトウェア フォールバックの実装が必要な場合は、Mesaが対応しており、DOS でも動作します。(Mesa はメモリ バッファーにレンダリングできるため、Modern UI アプリで動作しない理由はありませんが、遅くなる可能性があるため、おそらくこれを実行したくないでしょう)。 Windows デスクトップ上の OpenGL 機能へのアクセスは、GDI (非推奨)に依存しているため、アプリケーションの将来性を保証したい場合は、代わりにFreeGLUTSDLなどを使用することをお勧めします。これにより、プラットフォームの独立性も得られます。

OpenGL ESは、 AndroidおよびApple iOSで動作する OpenGL のバリアントです。Internet Explorer 11 がサポートする予定のWebGLを介して JavaScript でもアクセスできます(そして、他のほとんどすべてのブラウザーが既にサポートしています) 。モダン UI アプリでも動作するはずです。繰り返しになりますが、Mesa はソフトウェアの実装をカバーしています。

TL;DR: OpenGL は廃止されていないだけでなく、クロスプラットフォームであり、標準であり、業界で非常に勢いがあります。GDI と GDI+ はそれほどでもありません。

于 2013-07-12T23:56:50.853 に答える
7

GDI、GDI+、および OpenGL は本当に時代遅れ/非推奨ですか?

これは OpenGL には当てはまりません。OpenGL 4 では、winxp でジオメトリ シェーダーを使用できます。これは DirectX では不可能です (DirectX 10 以降は WInXP ではサポートされていません)。また、クロスプラットフォームの 3D API の 1 つでもあります。

ビジネスの観点から、MS は DirectX の促進に関心を持っています。これは、開発者を Windows プラットフォームに閉じ込めるテクノロジであるためです (彼らは DirectX を開発者にとってより魅力的なものにすることにも関心がありますが、それは別の話です)。したがって、彼らが OpenGL の普及に熱心でないのは当然です。

他に何を使用する必要がありますか?

可能であれば、プラットフォーム固有のテクノロジの使用を停止することをお勧めします。クロスプラットフォーム フレームワークを取得して、アプリケーションに使用します。GUI アプリには Qt、GTK、wxWidgets などのツールキットがあり、ゲームには SDL (および代替) があります。このようにして、プラットフォーム開発者がばかげた決定 (WinXP で DX10 をサポートしないなど) を決定したときに、あなたが嫌い​​な場合、最小限の開発コストで他の場所に移動することができます。Qt もとてつもなく強力で、現時点では GUI 開発に他のものを使用する理由はありません。それでも、状況は将来変わる可能性があります。

要するに、特定のプラットフォーム向けに開発している間は、プラットフォーム開発者があなたの希望とは相容れない目標を持っている可能性があることに留意する必要があります。ソースが単一のプラットフォームに固定されていることを発見するのは、あまり楽しい経験ではありません。あなた自身の目標が最優先されるべきであり、OS 開発者があなたが好まない特定のテクノロジーを使用させようとする場合、そのテクノロジーをサポートすべきではありません。

于 2012-04-05T04:30:35.057 に答える
7

Windows XP をサポートしたい場合は、"レガシー" オペレーティング システムをサポートしていることになるため、"レガシー" グラフィックス フレームワークを使用することが論理的な選択です。

それが真実ではなかったとしても、リンクされた MSDN の記事で与えられたアドバイスには同意できないとだけ言っておきましょう。ここでの「レガシー」ステータスは、Windows チームが今週どのテクノロジをクールだと考えるかに関係しています。「obsolete」というステータス指定は、担当グループがもはやバグ レポートを受け入れていない、または実行していないことを意味します (重大なセキュリティ問題を除く)。大したことではありません。これらのテクノロジは十分に長く使用されているため、機能が十分に充実しており、安定しています。

GDI はどこにも行かないので、どこでもどこでもサポートされることが保証されている堅牢なものが必要な場合は、それを使用します。

GDI が提供するものよりももう少し 2D 機能が必要な場合 (たとえば、アルファ チャネルの透過性)、GDI+ の使用を検討できます。これは GDI よりもほぼ 1 桁遅いですが、必要以上のパワーを備えた最新のマシンではそれほど大きな問題ではありません。これもまた、非常に長い間サポートされる予定です。

とはいえ、今日新しいアプリを作成する場合、OpenGL を気にすることはないでしょう。Microsoft が GDI/GDI+ の代替として推進している Direct2D と DirectWrite に勝るメリットはほとんどありません。私が知る限り、Direct2D/DirectWrite は Vista 以降でのみサポートされているため、どうしても Windows XP をターゲットにする必要がある場合は、OpenGL を使用する利点があるかもしれませんが、それは (最初に述べたように) Windows XP が真っ向から「レガシー」または「時代遅れ」のキャンプ自体。あるいは、すでに OpenGL をよく知っていて、Direct2D/DirectWrite を学ぶ時間や意欲がない場合は、新しいアプリケーションで引き続き OpenGL を使用するのが理にかなっているかもしれません。

MSDN の記事の言葉遣いに驚かないでください。利用可能なすべての情報を考慮して、特定のユース ケースに最も適したテクノロジを選択してください。これらのテクノロジのいずれかが完全になくなるまでには、他の多くの理由でアプリを完全に書き直す必要があります。

編集:うーん、DirectWriteも(少なくとも一部の人々によって)「廃止」と宣言され、Direct2Dに置き換えられたようです。おかしなことに、私がそれを学習するのに十分な時間はありませんでした。これは、「時代遅れ」というのは単に特定のテクノロジが現在 Microsoft の開発者によって流行していると見なされているものではないことを示しているという私の以前の主張を裏付けるものだと思います。

私は個人的に、アプリケーションの切り替えを行う前に、すべてのバグが解決されるまで (そして、半永久的な標準を決定するまで) 待っています。私が見た DirectDraw や Direct2D で書かれたものはすべて、レンダリングに重大なバグがあり、パフォーマンスの悪夢でした。確かに、彼らは適切な条件下で時々現れるだけですが、それは私には多すぎます. そして、ぼやけたテキストが常に表示されることを誓います。画面の内容を読み取れないことは、私にとってもユーザーにとっても致命的です。GDI にはこの問題はなく、どこにも行きません。

于 2012-04-05T02:37:29.513 に答える
2

OpenGL は標準であるため、C や C++ と同様に非推奨と見なす必要があるため、Windows API 全体 (現在、Wine のおかげですべての x86 マシン API で一度実行されるコンパイルになっている) が考慮されるのは時間の問題です。 .NET と C# を支持して廃止されました。

高速化された 3D が必要な場合は、単純なグラフィックスと OpenGL には GDI を使用します。

もう1つの側面は、MicrosoftのOpenGLの組み込み実装は、バージョン1.1か何かであるため、間違いなく非推奨と見なされることですが、それは長い間続いています.

于 2012-04-13T10:06:44.737 に答える
-2

ええ、OpenGL については、リソースと表示の両方の点で、実際には DirectX よりも優れています。Microsoft は OpenGL を所有できないため、Microsoft によって促進されることはありません。言うまでもなく、ほとんどの人は調査を行わず、Microsoft はそれが古いと主張できます。実際のところ、opengl はオープンソースの標準であり、クローズドよりもはるかに速い速度で進化しています。なぜなら、opengl に取り組むためにお金を払っている開発者の部屋が 1 つ以上あるからです。また、Microsoft は多くの企業と Microsoft のソフトウェアのみを使用してリリースする契約を結んでいます。これにより、Microsoft のビジネスが増加し、より高度な OpenGL 標準の使用が減少します。Microsoft は、Microsoft のビジネスを維持するために多くのプログラムが DirectX で記述されるようにこれらの契約を作成します。Microsoft は約 80% 以上のホーム ユーザー市場を持っているため、どの企業もそれを拒否しません。

于 2012-07-13T01:13:54.427 に答える