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 回答