原文链接:MFC D3D Application: Direct3D Tutorial Part I
     作者这个MFC程序中第一个有趣的地方是让用于Direct3D绘制的窗口类从CWnd类和CXD3D类继承下来:

class CD3DWnd : public CXD3D, public CWnd

CD3DWnd类是用于窗口中控件(比如一个PictureBox)的基类,这个控件将提供普通Cwnd类的功能,但同时也拥有CXD3D3D绘制的能力。

先来看CXD3D类:

基于MFC的Direct3D程序设计//-----------------------------------------------------------------------------
基于MFC的Direct3D程序设计
// CXD3D class: the class a view class will derive from to provide a window
基于MFC的Direct3D程序设计
// handle to render into, and that will override the 3D scene rendering.
基于MFC的Direct3D程序设计
//-----------------------------------------------------------------------------
基于MFC的Direct3D程序设计
class CXD3D

CXD3D::CreateD3D函数中,首先初始化了一个D3D对象,然后构建了一个列表,这个列表包含了机器上的所有显卡,显卡模式和设备。我们需要知道机器上有多少显卡(一般只有一个),而且每个显卡也可以支持多个设备。对于每个设备会有一种支持的格式,设置和能力,这对于应用程序来说不一定是合适的,因此我们需要一个列表来跟踪这些信息,以便挑选出合适的。

再来看枚举类CXD3DEnum,它用来为应用程序中使用的分辨率,颜色,A通道,显示格式,后备缓冲格式,深度/模板缓冲格式,多重采样类型,提交显示时间间隔等参数建立约束。

文中枚举类的代码很多,但我们只需要记住一点就可以了,要使Direct3D建立起来,我们首先得不断地枚举,枚举,再枚举,不断检查它的各种属性,各种能力是否满足,基本上检查的顺序可以用下图来表示:

基于MFC的Direct3D程序设计Enumeration
基于MFC的Direct3D程序设计|
基于MFC的Direct3D程序设计
+-- AdapterInfos[0]
基于MFC的Direct3D程序设计| |
基于MFC的Direct3D程序设计
+-- DisplayModes[0]
基于MFC的Direct3D程序设计
+-- DisplayModes[1]
基于MFC的Direct3D程序设计
基于MFC的Direct3D程序设计
基于MFC的Direct3D程序设计| |
基于MFC的Direct3D程序设计
+-- DeviceInfos[0]
基于MFC的Direct3D程序设计| | |
基于MFC的Direct3D程序设计| | 
+-- DeviceCombos[0]
基于MFC的Direct3D程序设计| | | |
基于MFC的Direct3D程序设计| | | 
+-- VPTypes
基于MFC的Direct3D程序设计| | | 
+-- DSFormats
基于MFC的Direct3D程序设计| | | 
+-- MSTypes
基于MFC的Direct3D程序设计| | | 
+-- MSQualityLevels
基于MFC的Direct3D程序设计| | | 
+-- DSMSConflicts
基于MFC的Direct3D程序设计| | | 
+-- PresentIntervals
基于MFC的Direct3D程序设计| | 
+-- DeviceCombos[1]
基于MFC的Direct3D程序设计| | 
基于MFC的Direct3D程序设计
基于MFC的Direct3D程序设计
+-- DeviceInfos[1]
基于MFC的Direct3D程序设计
基于MFC的Direct3D程序设计
基于MFC的Direct3D程序设计
+-- AdapterInfos[1]
基于MFC的Direct3D程序设计

相关文章:

  • 2021-06-12
  • 2021-05-04
  • 2022-12-23
  • 2021-07-07
  • 2021-04-18
  • 2021-11-14
  • 2021-09-10
  • 2021-12-21
猜你喜欢
  • 2021-09-17
  • 2022-01-12
  • 2021-10-03
  • 2021-05-20
  • 2021-11-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案