DirectX9.03D Direct3D初始化

Direct3D 的初始化分解为如下步骤:

1 获取接口 IDrirect3D8的指针。

2 检查设备性能(D3DCAPS9), 判断主显(primaty display adapter or primaty graphics card)卡是否支持硬件顶点运算.

3 初始化     D3DPRESENT PARAMETERS 结构的一个实例。

4 利用已初始化的D3DPRESENT PARAMETER 结构创建IDirect3DDevice9对象(一个C++对象)。

获取接口IDirect3D9的指针

要初始化IDirect3D,首先必须获取指向接口IDirect3D9的指针。 如下:

IDirect3D9  *_d3d9;

_d3d9 = Direct3DCreate9 (D3d_SDK_VERSION);

参数一定是D3d_SDK_VERSION。才保证应用程序用用头文件。

IDirect3D9对象的两个用途:

a 设备枚举(device enumeration)

  指获取系统中可用的每块图形卡的性能、显示模式 格式及其他信息。

b 创建IDirect3DDevice9类型的对象

校验硬件顶点运算

要进行检查,必有先根据主显卡的性能参数初始化一个IDirect3DDevice9类型的对象 用如下方法:

HRESULT IDirect3D9::GrtDeviceCaps (

  UINT Adapter,           //指定物理显卡的序号

  D3DDEVTYPE DevicType, //指定设备类型(例如硬件设备(EVTYPE_HAL)

                         //软件设备(D3DDEV_TYPE_REF)).

D3DCAPS9 * pCaps      //返回已的设备性能结构实例。

);

填充D3DPRESENT_PARAMENTER结构

typedef struct _D3DPRESUNT_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                       FresentatioInterval;

} D3DPRESENT_PATAMETERS;

说明:

BackBufferWidth   后台缓存中表面的宽度, 单位为像素。

BackBufferHeight   后台缓存中表面的宽度, 单位为像素。

BackBufferFormat   后台缓存的像素格式 (如32位 D3DFMT_A8R8G8GB8)

BackBufferCount    所需使用的后台缓存的个数, 通常指定为1。只要一个

MultiSampleType    后台缓存所用的多重采样类型。

MultiSampleQuality  多重采样的质量水平。

SwapEffect         WAPEFFERCTST枚举类型的一个成员。该枚举类型指定了交换链中的缓存在页面转换方式。指定D3DSWAPEFFECT_

                 ISCARD时效率最高。

hDeviceWindow   与设备相关的窗口句柄 了所要进行绘制的应用程序窗口

Windowed      为true时 表示窗口模式 为false时表示全屏模式。

EnableAutoDepthStencil 设为true 则Direct3D自动创建并维护尝试缓存或模板缓存。

AutoDepthStencilFormat 尝试缓存或模板缓存的像素格式(例如,用24位表示深度并将8位保留供模板缓存使用, D3DFMT_D24S8).

Flags  一些附加的特性。

D3DPRESENT_PARAMETERS d3dpp;

       d3dpp.BackBufferWidth           = width;

       d3dpp.BackBufferHeight          = height;

       d3dpp.BackBufferFormat          = D3DFMT_A8R8G8B8; //pixel format

       d3dpp.BackBufferCount           = 1;

       d3dpp.MultiSampleType           = D3DMULTISAMPLE_NONE;

       d3dpp.MultiSampleQuality         = 0;

       d3dpp.SwapEffect                = D3DSWAPEFFECT_DISCARD;

       d3dpp.hDeviceWindow            = hwnd;

       d3dpp.Windowed                 = windowed;

       d3dpp.EnableAutoDepthStencil     = true;  //窗口

       d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;

       d3dpp.Flags                     = 0;

       d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;

       d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_IMMEDIATE;

D3DPRESENT_PARAMETERS 结构填充完毕之后, 我们可用如下方法创建

IDirect3DDevice9 类型对象

HRESULT IDirect3D9::CreateDvevice(

    UINT           Adapter,

    D3DDEVTYPE   DeviceType,

    HWND          hFocusWindow,

    DWORD         BehaviorFlags

    D3DPRESINT_PARAMETERS *pPresentationParemeters,

    IDirect3DDevice9** ppReturnedDeviceInterface

);

说明:

Adapter 指定我们希望自己创建的IDirect3DDevice9 对象体表哪块物理显卡。

DeviceType 指定需要使用的设备类型(如 硬件设备D3DDEVTYPE_HAL或软件设备D3DDEVTYPE_REF).

hFocusWindow 设备相关的窗口句柄。通常情况下是指设备所要进行绘投影的目标窗口。为了达到预期的目的。句柄与D3DPRESENT_PARAMETERS 结构的数据成员 d3dpp.hDeviceWindow。

BchavirFlags该参数可为D3DCREATE_HARDWARE_VERTEXPROCESSINGA

           或D3DCREATE_SOFTWARE_VERTEPROCESSING.

pPresentationParameters 一个已经完成初始化的D3DPRESENT_PARAMETERS类型的实例,该实例定义了设备的一些特性。

ppReturnedDeviceInterface 返回所创建的设备。

if( FAILED(hr) )

{

       // try again using a 16-bit depth buffer

       d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

       hr = d3d9->CreateDevice(

              D3DADAPTER_DEFAULT,  //primary adpater

              deviceType,               //device type

              hwnd,                    //window associated with device

              vp,      // 可以是D3DCREATE_HARDWARE_VERTEXPROCESSING

               //D3DCREATE_SOFTWARE_VERTEXPROCESSING

              &d3dpp,                 //present parameters

              device);                  //returned created device

       if( FAILED(hr) )

       {

              d3d9->Release();           // done with d3d9 object

              ::MessageBox(0, "CreateDevice() - FAILED", 0, 0);

              return false;

       }

}

DirectX 9.0 3D游戏开发编程基础》笔记

2010-4-3 江西理工大学 FangSH

原文链接: https://www.cnblogs.com/fangshenghui/archive/2010/04/06/1705759.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    DirectX9.03D Direct3D初始化

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/9683

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午10:29
下一篇 2023年2月6日 下午10:29

相关推荐