使用OpenGL枚举适配器和模式的像素格式

时间:2010-12-24 12:46:03

标签: opengl enumerate

我正在尝试为我的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的等价物是什么?我知道我可以使用DescribePixelFormat,但是你需要在使用DC之前创建窗口,但是在你知道要采用什么格式之前你无法正确创建窗口。使用

你可以给我什么提示?

感谢。

1 个答案:

答案 0 :(得分:1)

  

但在知道要使用的格式

之前,无法正确创建窗口

为什么?

标准方法是:

  1. 创建窗口。
  2. 枚举窗口DC所代表的设备支持的所有格式。
  3. 使用您喜欢的格式调用SetPixelFormat()来设置格式。
  4. 创建OpenGL上下文。