Direct3D
Direct3Dは、3Dグラフィックスを描画するためのAPIである。マイクロソフトが提供するマルチメディアAPIセットDirectXの一部であり、様々なWindows(主にWindows 95以上)で動作し、さらに、家庭用ゲーム機であるXboxシリーズ(初代Xbox、Xbox 360、Xbox One、Xbox Series X/S)のグラフィックスAPIのベースでもある。略称としてD3Dがよく使われる。
Wineでは、Unix系OSでOpenGLをバックエンドに用いてDirect3D APIを実装している。オープンソースのグラフィックスライブラリMesaでは、OpenGLを経由しないDirect3Dのネイティブ実装(Gallium NineによるDirect3D 9のネイティブ実装、Gallium3DによるDirect3D 10/11のネイティブ実装)も利用可能となっている。Wine 4.0以降では、変換ライブラリvkd3dを利用してVulkan上にDirect3D 12 APIを実現している。また、Linux/Wine環境向けに、VulkanによるDirect3D 9/10/11実装を提供するDXVKも開発されている。
Direct3D 12上に構築された、Direct3D 9のユーザーモードドライバーインターフェイス(DDI)の実装を提供するD3D9On12のソースコードがマイクロソフトによって公開されている。d3d9on12.dll は、Windows 10以降のシステムコンポーネントとして含まれている。GPUベンダーは、ネイティブのDirect3D 9ドライバーを実装する代わりにD3D9On12を利用することもできる。
Direct3D 9のプログラマブルシェーダーを利用する場合は、HLSL言語等を使いシェーダープログラムを別途作成して、あらかじめデバイスにセットしてから描画メソッドを呼び出す必要がある。ただし、Direct3D 9の場合は、プログラマブル頂点シェーダーと固定機能ピクセルシェーダーを組み合わせることも可能である。
また、Direct3D 10およびDirect3D 11においてはFVF、ユーザーポインタ頂点配列 (UP) および固定機能シェーダーが存在しないので、必ず頂点レイアウト、頂点バッファおよびシェーダープログラムを作成する必要がある(シーンを描画するためには少なくとも頂点シェーダーとピクセルシェーダーの2つを作成する必要があるが、深度ステンシルのみのレンダリングであればラスタライザーを無効にして頂点シェーダーだけでレンダリングすることもできる)。テッセレーションシェーダー(ハルシェーダー、ドメインシェーダー)およびジオメトリシェーダーに関しては必須ではなくオプションであり、またコンピュートシェーダーに関しては描画パイプラインと独立している。
Direct3D 12ではオーバーヘッド低減のため、シェーダープログラムオブジェクトの個別設定は廃止され、パイプラインステートオブジェクト (PSO) としてグラフィックスパイプラインあるいはコンピュートパイプラインごとにすべてのシェーダーステージを各種ステートとともにまとめて事前作成してから設定する方式に変更された。もちろん固定機能シェーダーは存在しない。