DirectX9.0 3D游戏开发编程基础----第三章(上)Direct3D初始化

版权声明:K5出品,必属精品,欢迎收藏评论 https://blog.csdn.net/a694861283/article/details/87616264

1.4 Direct3D的初始化

Direct3D的初始化过程可分解为以下几个步骤:

(1)获取接口IDirect3D9的指针,该接口用于获取系统中物理硬件设备的信息并创建接口IDirect3DDevice9,该接口是一个C++对象,代表了我们用来显示3D图形的物理硬件设备

(2)检查设备性能(D3DCAPS9),判断主显卡(primary display adapter或primary graphics card)是否支持硬件顶点运算.为了创建接口IDirect3DDevice9,我们必须明确显卡是否支持该功能

(3)初始化D3DPRESENT_PARAMETERS结构的一个实例,该结构由许多数据成员组成,我们可以通过这些变量来指定即将创建的接口IDirect3DDevice9的特性

(4)利用已初始化的D3DPRESENT_PARAMETER结构创建IDirect3DDevice9对象(一个C++对象代表了我们用来显示3D图形的物理硬件设备)

1.4.1 获取接口IDirect3D9的指针

IDirect3D9* _d3d9;
_d3d9=Direct3DCreate9(D3D_SDK_VERSION);

1.4.2 校验硬件顶点运算

HRESULT IDirect3D9::GetDeviceCaps(
    UINT Adapter,  //指定物理显卡的序号
    D3DDEVTYPE DeviceType,  //指定设备类型(硬件设备:D3DDEVTYPE_HAL,软件设备:D3DDEVTYPE_REF)
    D3DCAPS9* pCaps  //返回已初始化的设备性能结构实例
);

D3DCAPS9 caps;
d3d9->GetDeviceCaps(
    D3DADAPTER_DEFAULT,
    deviceType,
    &caps);

int vp=0;
if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT){
    vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
}else{
    vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}

1.4.3 填充D3DPRESENT_PARAMETER结构

typedef struct _D3DPRESENT_PARAMETERS_{
    UINT BackBufferWidth;      //后台缓存中表面的宽度
    UINT BackBufferHeight;     //后台缓存中表面的高度
    D3DFORMAT BackBufferFormat;    //后台缓存的像素格式(如32位:D3DFMT_A8R8G8B8)
    UINT BackBufferCount;          //使用的后台缓存的个数
    D3DMULTISAMPLE_TYPE MultiSampleType;    //后台缓存使用多重采样类型
    DWORD MultiSampleQuality;               //多重采样的质量水平
    D3DSWAPEFFECT SwapEffect;               //指定交换链中的缓存的页面置换方式
    HWND hDeviceWindow;                     //与设备相关的窗口句柄
    BOOL Windowed;                          //true表示窗口模式,false表示全屏模式
    BOOL EnableAutoDepthStencil;            //为true时,Direct3D自动创建并维护深度缓存或模板缓存
    D3DFORMAT AutoDepthStencilFormat;       //深度缓存或模板缓存的像素格式(如D3DFMT_D24S8)

    DWORD Flags;                            //附加特性
        //D3DPRESENTFLAG_LOCKABLE_DEPTHBUFFER 指定可锁定的后台缓存
        //D3DPRESENTFLAG_DISCARD_DEPTHBUFFER  指定下一个后台缓存提交时,深度缓存或模板缓存丢弃

    UINT FullScreen_RefreshRateInHz;        //刷新频率
        //D3DPRESENT_RATE_DEFAULT 默认刷新频率

    UINT PresentationInterval;              //时间的间隔         
        //D3DPRESENT_INTERVAL_IMMEDIATE 立即提交
        //D3DPRESENT_INTERVAL_DEFAULT   默认刷新频率
}D3DPRESENT_PARAMETERS;


D3DPRESENT_PARAMETERS d3pp;
d3pp.BackBufferWidth=800;
d3pp.BackBufferHieght=600;
d3pp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3pp.BackBufferCount=1;
d3pp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3pp.MultiSampleQuality=0;
d3pp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3pp.hDeviceWindow=hwnd;
d3pp.Windowed=false;
d3pp.EnableAutoDepthStencil=true;
d3pp.AutoDepthStencilFormat=D3DFMT_D24S8;
d3pp.Flags=0;
d3pp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
d3pp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;

猜你喜欢

转载自blog.csdn.net/a694861283/article/details/87616264