21

最新のビデオ カード用の Windows システムでの DirectX API のドライバー側の実装を検討したとき、なぜこの実装が Windows 以外のシステム、特に Linux で利用できないのか疑問に思っていました。

この機能が明らかに欠如しているため、私には盲目的な正当な理由があるとしか思えませんが、私の原始的な理解では、DirectX 呼び出しはハードウェア デバイス上の関数エントリ ポイントに過ぎないと考えています。記録のために、私は互換性レイヤー (最も注目すべきは、私が毎日驚かされているプロジェクトである WINE) について言及しているのではなく、直接ハードウェア呼び出しを行うライブラリーについて言及しています。

directx のオープン ソース バージョンを作成することは可能ですか? それは可能ですが、ひどく難しいでしょうか?

4

6 に答える 6

18

私の知る限り、DirectXには3つの部分が含まれています

  • ベンダー ドライバー (DX で定義された低レベル API を提供)
  • DirectX ライブラリ (DX によって定義された低レベル API を使用してハードウェアにアクセスし、DirectX API を提供します)
  • ソフトウェア (ゲームなど、DirectX API を使用)

Linux では DX で定義された低レベル API を提供するドライバーが存在しないため、DirectX ライブラリを提供することも可能ですが、適切なベンダー ドライバーがないと機能せず、ベンダーが存在するかどうかもわかりません。ハードウェア プラットフォーム用に作成します。

于 2012-06-20T14:14:46.933 に答える
8

なぜ OpenGL を使用しないのですか? DirectX が行うすべての機能をサポートします。DirectX を使用する特別な理由はありますか? 理由としては、Microsoft は DirectXを作成しましたが、Linux での実行を許可する必要性を認識していなかったと思います。

Wine を使用して Linux で DirectX ゲームを実行できます。MonoGameを使用して、Linux で XNA をプログラミングできます。ただし、これらはすべて OpenGL を使用して、ハードウェア アクセラレーションによるレンダリングを提供します。私の知る限り、OpenGL は、予見可能な将来の Linux での唯一のオプションでした (そしておそらくそうなるでしょう)。

独自の DirectX 実装を作成することは可能ですか? 確かに - しかし、それにはドライバーの作成、独自の知識、そしておそらくコストがかかりすぎて、誰もが本当に恩恵を受けることができません.

編集: 最近では、DXVKは Linux で DirectX アプリケーションを実行するための非常に現実的でパフォーマンスの高い方法です。

于 2012-06-20T14:10:06.210 に答える
3

DirectX は一連の API です。

  • Direct3D (3D グラフィックスの描画)
  • DirectX Graphics Infrastructure (アダプターとモニターの列挙とスワップ チェーンの管理)
  • Direct2D (2D グラフィックスの描画)
  • DirectWrite (フォント)
  • DirectCompute (GPU コンピューティング)
  • DirectSound3D (3D サウンドの再生)
  • DirectX メディア(2D/3D Web アニメーション用の DirectAnimation、マルチメディアの再生とストリーミング メディア用の DirectShow、Web インタラクティブ機能用の DirectX Transform、高レベルの 3D グラフィックス用の Direct3D Retained Mode)
  • DirectX Diagnostics (オーディオ、ビデオ、入力ドライバーなど、DirectX に関連するコンポーネントを診断してレポートを生成するためのツール)
  • DirectX メディア オブジェクト(エンコーダー、デコーダー、エフェクトなどのストリーミング オブジェクトのサポート)
  • DirectSetup (DirectX コンポーネントのインストール、および現在の DirectX バージョンの検出)

DirectX コンポーネントは非推奨ですが、引き続きサポートされています

  • DirectDraw
  • 直接入力
  • DirectPlay
  • ダイレクトサウンド
  • DirectMusic

ご覧のとおり、DirectX スイートの API の多くの部分は、Linux 用に作成されたドライバーの機能で書き直す必要があります。また、DirectX スーツの一部は Windows OS を呼び出す可能性が高く、そのコードは、DirectX または Windows OS のコピーで作成された部分を侵害することなく、Linux マシン用に書き直す必要があります。

はい、Linux 用の DirectX と同じ種類のことを行うオープン ソース API スーツを作成できますが、Linux 用のサウンドおよびグラフィック ドライバー/製造元によるサポートに関する十分な知識がなければ、それを行うのは非常に難しい作業です。

ただし、「DirectX で作成されたゲームやプログラムを Linux で実行できるようにするために、何かを取得/作成できますか?」という質問が多かった場合は、その意味では、著作権侵害の可能性が高いため、要するにノーです。

于 2014-12-29T09:02:35.853 に答える
2

DirectXのポートを作成する作業は、WINEで発生するのと同じ問題を引き起こします。Windowsと同じになることはありません。その原則から派生して、OpenGLおよび関連するマルチプラットフォームライブラリを調べる必要があります。

現時点では、すでに持っているDirectXコードで何かを達成したい場合は、WINEが最も近い媒体になります。繰り返しになりますが、Visual Studioまたはプレーンタイピングが、流暢な環境にどのように近づくかはわかりません。WINEライブラリはネイティブからそれほど遠くはありませんが、エミュレーションは常に存在します。これは、私の正直な意見では、ある時点で許容できるものです。

ファイナルファンタジーXIVが私のiMac(2011)のフル設定でどれほど見事に実行されたかを見ると、WINEの実装に依存することはそれほど悪くないと思います。ゲームは私のiMacのBootcamp(Windows)とまったく同じようにレンダリングされました。

この面で本当に作業をしたい場合は、フォーラムまたはメーリングリストでWINE Devsに、DirectX互換性の実装のみを使用してプロジェクトで使用する方法を尋ねることができます。Windowsでエミュレートされたシステムコールを介してDirectXを要求する代わりに、ライブラリを呼び出すことができる場合。

編集:私もuser956030の答えに完全に同意します。

于 2012-06-20T15:20:51.070 に答える
0

DirectX は Microsoft のターゲット向けに設計された独自の製品であるため、これが発生することは非常にまれです。

SDL と OpenGL の 2 つのソフトウェアが思い浮かびます。

OpenGL は DirectX に代わるハードウェアを提供し、SDL は OpenGL と連携して、DirectX に期待されるソフトウェア サポートを提供します。

于 2017-04-23T17:23:53.750 に答える