2

3D エンジンの OpenGL パスをコーディングしようとしています。D3D パスは、すべてのデバイス アダプター、各アダプターのすべてのモード (モードとは、ビット深度、サイズ、使用可能なウィンドウ、およびリフレッシュ レートを意味します) を列挙し、次に特定のモードとアダプターで使用可能なすべてのピクセル フォーマットを特定の有用なキャップ (シェーダー) と共に列挙します。バージョン、フィルターの種類など)。したがって、クラスには次の保護された関数が広くあります。

// Enumerate all back/front buffer combinations.

virtual void EnumerateBackFrontBufferCombinations(CComPtr<IDirect3D9>& d3d9);

// Enumerate all depth/stencil formats.

virtual void EnumerateDepthStencilFormats(CComPtr<IDirect3D9>& d3d9);

// Enumerate all multi-sample formats.

virtual void EnumerateMultiSampleTypes(CComPtr<IDirect3D9>& d3d9);

// Enumerate all device formats, i.e. dynamic, static, render target, etc.

virtual void EnumerateMapFormats(CComPtr<IDirect3D9>& d3d9);

// Enumerate all capabilities.

virtual void EnumerateCapabilities(CComPtr<IDirect3D9>& d3d9);

アダプターは EnumDisplayDevices で列挙され、モード (解像度とリフレッシュ レート) は EnumDisplaySettings で列挙されるため、これは GL または D3D に対して実行できます。OpenGLでよくわからない他の機能。IDirect3D9 の CheckDeviceType、CheckDeviceFormat、CheckDeviceMultiSampleType、CheckDepthStencilMatch に相当するものは何ですか? DC が与えられれば、DescribePixelFormat を使用できることはわかっていますが、DC を使用する前にウィンドウを作成しておく必要がありますが、使用するフォーマットを理解するまでウィンドウを正しく作成することはできません。使用する。

あなたが私に与えることができるヒントはありますか?

ありがとう。

4

1 に答える 1

2

ただし、どのフォーマットを使用するかを理解するまで、ウィンドウを正しく作成することはできません。

なんで?

標準的なアプローチは次のとおりです。

  1. ウィンドウを作成します。
  2. ウィンドウの DC で表されるデバイスでサポートされているすべての形式を列挙します。
  3. フォーマットを設定するには、お気に入りのフォーマットで SetPixelFormat() を呼び出します。
  4. OpenGL コンテキストを作成します。
于 2010-12-24T12:50:14.997 に答える