web-dev-qa-db-ja.com

Linux用のDirectXAPIがないのはなぜですか?

最新のビデオカード用のWindowsシステムでのDirectX APIのドライバー側の実装を検討したところ、この実装がWindows以外のシステム、特にLinuxでは利用できない理由を知りました。

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

DirectXのオープンソースバージョンを作成することは可能ですか?それは可能でしょうか、しかし卑劣に難しいでしょうか?

19
Brian

AFAIK、DirectXには3つの部分が含まれています

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

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

14
Zang MingJie

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

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

独自のDirectX実装を作成することは可能ですか?確かに-しかし、それはドライバーの作成、専有知識、そしておそらく誰もがそれから本当に利益を得るには多すぎるコストを伴います。

6
Ani

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

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

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

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

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

1
user1467267

DirectXはAPIのスーツです:

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

DirectXコンポーネントは非推奨になりましたが、引き続きサポートされています

  • DirectDraw
  • DirectInput
  • DirectPlay
  • DirectSound
  • DirectMusic

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

はい、DirectX for Linuxと同じ種類のオープンソースAPIスーツを作成できますが、Linuxの製造元によるサウンドおよびグラフィックドライバー/サポートについての十分な知識がないと、非常に困難な作業になります。

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

1
Wintery

あなたの質問は2019年に間違っています。 [〜#〜] dxvk [〜#〜] はVulkanとWineを使用したLinux用のD3D11とD3D10の実装です

0
noone

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

他に思い浮かぶソフトウェアには、SDLとOpenGLの2つがあります。

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

0
Steve