単一デバイス モデル

同時にアクティブになれるデバイスは、1 つだけです。システム環境設定に複数のビデオ カードが存在している場合、最初に検出したデバイス(カード)に対してフレームワークのインスタンス化が行われます。このことでカード ドライバが以降のカードを利用しなくなるわけではありませんが、内部的には複数のカードの暗黙の最適化が行われません。

このモデルでの単一デバイスは、フレームワーク全体で 1 つの OpenGL コンテキストを使用することと考えることができます。これは、デバイス コンテキスト/描画可能ごとに 1 つの OpenGL コンテキスト(たとえば、3D ビューポートごとに 1 つ)を使用して複数のコンテキストにアクセスできる従来のインタフェースとは異なります。プラグインへの影響としては、OpenGL コンテキストやフレーム バッファ オブジェクトを切り替えるコードをまったく使用できず、同一コード内でピクセル バッファ オブジェクトを使用することもできなくなります。そのような変更が必要な場合は、元の状態に復元する必要があります。

コンテキストやデバイスの共有は、それぞれ OpenGL および DirectX で引き続き行うことができます。

これまでに説明したように、デバイスやコンテキストに安全にアクセスできる特定のタイミングがあります。 特に OpenGL の場合、レンダー ターゲットがアクティブなときにのみ、安全に OpenGL コンテキストにアクセスできます。 基本的な経験則では、描画コンテキスト(MDrawContext)が有効である場合に、OpenGL コンテキストにアクセスできるようになります。DirectX の場合は、デバイス レベルでアクセスが実行されるため、常に安全です。