我正在尝试为我的 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,但是在您知道要使用的格式之前,您无法正确创建窗口采用。
你能给我什么建议吗?
谢谢。