• 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

  • 相关阅读:
    UML统一建模语言笔记
    从零开始学JavaWeb
    也谈微信小程序
    Memcached,你懂的
    一个简单的配置管理器(SettingManager)
    我的AngularJS 学习之旅
    .NET Core 跨平台
    ASP.NET Core 中间件自定义全局异常处理
    面试必考题——递归解题套路
    程序员着装指南
  • 原文地址:https://www.cnblogs.com/fangshenghui/p/1705759.html
Copyright © 2020-2023  润新知