现在的位置: 首页 > 综合 > 正文

Directx9.0 a shader approach 学习笔记1—初始化D3D

2018年05月27日 ⁄ 综合 ⁄ 共 4055字 ⁄ 字号 评论关闭

 1: 获取IDirect3D9接口,主要用来查找物理硬件设备信息,和创建IDirect3DDevice9接口.代码如下:

       IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION);

 

2: 验证硬件支持的显示模式, a shader approach 一书中,在窗口下使用当前显示模式作为显示格式和后台缓存格式,在全屏模式下使用D3DFMT_X8R8G8B8作为显示格式后台缓存格式.代码如下:

D3DDISPLAYMODE mode;

pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&mode);

//检查窗口模式

pD3D->CheckDeviceTyte(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mode.Format,mode.Format,true);

//检查全屏模式

pd3d->CheckDeviceType(D3DADAPTER_DEFAULT, mDevType, D3DFMT_X8R8G8B8, D3DFMT_X8R8G8B8, false)

 

3: 检查硬件支持的顶点运算.如硬件顶点处理(hardware vertex processing)(pure device),代码如下:

D3DCPAS9 cpas;

pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps);

if(cpas.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)

       vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;

else

       vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

if(cpas.DevCaps & D3DDEVCAPS_PUREDEVICE && cpas.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)

       vp |= D3DCREATE_PUREDEVICE;

4:初始化D3DPRESENT_PARAMETERS结构实例,该实例结构主要用来详细描述将要创建的IDirect3DDevice9接口.结构如下:

typedef struct _D3DPRESENT_PARAMETERS_ {
    UINT      BackBufferWidth;
    UINT      BackBufferHeight;
    D3DFORMAT BackBufferFormat;
    UINT      BackBufferCount;
    D3DMULTISAMPLE_TYPE MultiSampleType;
    DWORD     MultiSampleQuality;
    D3DSWAPEFFECT SwapEffect;
    HWND      hDeviceWindow;
    BOOL      Windowed;
    BOOL      EnableAutoDepthStencil;
 
    D3DFORMAT AutoDepthStencilFormat;
    DWORD     Flags;
    UINT      FullScreen_RefreshRateInHz;
    UINT      PresentationInterval;
} D3DPRESENT_PARAMETERS;

 

BackBufferWidthBackBufferHeight: 描述后台缓存的宽高(以象素为单位)

BackBufferFormat:后台缓存的格式.一般设置为D3DFMT_UNKNOW

BackBufferCount:后台缓存的数量

MultiSampleType,MultiSampleQuality:多重采样,用于反走样和搞锯齿.

SwapEffect:后台缓存的换页方式,一般使用D3DSWAPEFFECT_DISCARD.

hDeviceWindow:和设备相关的窗口句柄,

Windowed: 应用程序是否窗口化

EnableAutoDepthStencil: 是否使用自动深度和模板缓存管理,一般设置为true;

AutoDepthStencilFormat:深度和模板缓存格式

Flags:一些附加的特性描述:一般设置为0;

FullScreen_RefreshRate:刷新频率:一般设置为D3DPRESENT_RATE_DEFAULT

PresentationInterval:后台缓存提交方式,一般设置为D3DPRESENT_INTERVAL_IMMEDIATE

表示立刻提交.

 

5:创建IDirect3DDevice9设备接口对象,代码如下:

pd3d->CreateDevice(

              D3DADAPTER_DEFAULT,    //主显卡

              D3DDEVTYPE_HAL,         // 设备类型

              mhMainWnd,                      //窗口句柄

              Vp,                                          //顶点处理方式

           &d3dPP,                    // D3DPRESENT_PARAMETERS参数

           &pDevice));                          // 返回创建的IDirect3DDevice9设备接口对象

【上篇】
【下篇】

抱歉!评论已关闭.