初始化Direct3D

来源:互联网 发布:多线程添加数据 编辑:程序博客网 时间:2024/06/05 17:26
 

IDirect3D9* _d3d9;

_d3d9 = Direct3DCreate9(D3D_SDK_VERSION);//Direct3DCreate9的唯一一个参数总是D3D_SDK_VERSION

 

D3DCAPS9 caps;

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

// 是否可以使用硬件顶点处理?

int vp = 0;

if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )

{

       // 是,支持硬件顶点处理

       vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;

}

else

{

       // 不,只能用软件顶点处理

       vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

}

 

D3DDISPLAYMODE d3ddm;
if( FAILED( m_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT,&d3ddm ) ) )//查询显示卡的显示模式
{
     MessageBox(NULL,L"GetAdapterDisplayMode时失败",L"信息",MB_OK);
     return E_FAIL;
}


D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) ); 

d3dpp.Windowed = TRUE;

d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

d3dpp.EnableAutoDepthStencil = TRUE;

d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

 

if( !FAILED( m_pD3D->CheckDeviceMultiSampleType( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, FALSE, D3DMULTISAMPLE_4_SAMPLES, NULL ) ) )

      d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES; 

 

IDirect3DDevice9* device = 0;

hr = d3d9->CreateDevice(  D3DADAPTER_DEFAULT,    D3DDEVTYPE_HAL,    hwnd,   vp,   &d3dpp,   &device);

 

if( FAILED(hr) )

{

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

       return 0;

}

 

//以下为该章所用到的函数,枚举,结构体,宏

Direct3DCreate9(D3D_SDK_VERSION);

 

HRESULT IDirect3D9::GetDeviceCaps(

       UINT Adapter,//指定要获得哪个显示适配器的特性

       D3DDEVTYPE DeviceType,//指定设备类型(硬件设备(D3DDEVTYPE_HAL),软件设备(D3DDEVTYPE_REF))

       D3DCAPS9 *pCaps//返回一个已初始化的D3DCAPS9结构

 );

 

HRESULT CheckDeviceMultiSampleType//检查当前设备是否支持图形多重采样
(
       UINT Adapter,    //表示当前查询的硬件的序号,通常以D3DADAPTER_DEFAULT表示对系统当前默认使用的图形显示硬件查询
       D3DDEVTYPR DeviceType,   //表示当前查询的设备类型
       D3DFORMAT SurfaceFarmat,  //表示需要查询的渲染表面像素显示格式
       BOOL Windowed,    //是否使用窗口显示
       D3DMULTISAMPLE_TYPE MultSampleType, //表示需要查询的多重采样方法
       DWORD* pQunlityLevels   //存储返回的图形质量数值
)

 

HRESULT IDirect3D9::CreateDevice(

       UINT Adapter,//指定对象要表示的物理显示设备

       D3DDEVTYPE DeviceType,//设备类型

       HWND hFocusWindow;

       DWORD BehaviorFlags,//设定为D3DCREATE_SOFTWARE_VERTEXPROCESSING或者D3DCREATE_HARDWARE_VERTEXPROCESSING

       D3DPRESENT_PARAMETERS *pPresentationParameters,//l  指定一个已经初始化好的D3DPRESENT_PARAMETERS实例

       IDirect3DDevice9** ppReturnedDeviceInterface//返回创建的设备

);

 

HRESULT IDirect3DDevice9::Clear(

       DWORD Count,//pRects组中的矩形的个数

       const D3DRECT* pRects,//将要清除的屏幕矩形的数组,这使我们可以清除屏幕的某一部分

       DWORD Flags,//指定在哪些表面上执行清除表面的操作

       D3DCOLOR Color,//使用什么颜色填充清除的表面.D3DCLEAR_TARGET——目的表面,通常为后备表面, D3DCLEAR_ZBUFFER——深度缓冲,D3DCLEAR_STENCIL—                                            —模版缓冲

       float Z,//设置深度缓冲的值

       DWORD Stencil//设置模版缓冲的值

);

typedef struct _D3DPRESENT_PARAMETERS_ {

       UINT BackBufferWidth;//后备缓冲表面的宽度(以像素为单位)

       UINT BackBufferHeight;//后备缓冲表面的高度(以像素为单位)

       D3DFORMAT BackBufferFormat;//后备缓冲表面的像素格式(如:32位像素格式为D3DFMT——A8R8G8B8)

       UINT BackBufferCount;//后备缓冲表面的数量,通常设为“1”,即只有一个后备表面

       D3DMULTISAMPLE_TYPE MultiSampleType//多重采样类型

       DWORD MultiSampleQuality;//多重采样的质量等级

       D3DSWAPEFFECT SwapEffect;//指定表面在交换链中是如何被交换的,取D3DSWAPEFFECT枚举类型中的一个成员。其中D3DSWAPEFFECT_DISCARD是最有效的

       HWND hDeviceWindow;//与设备相关的窗口句柄,你想在哪个窗口绘制就写那个窗口的句柄

       BOOL Windowed;//设为true则为窗口模式,false则为全屏模式

       BOOL EnableAutoDepthStencil;//设为true,D3D将自动创建深度/模版缓冲

       D3DFORMAT AutoDepthStencilFormat;//深度/模版缓冲的格式

       DWORD Flags;//深度/模版缓冲的格式

       UINT FullScreen_RefreshRateInHz;//刷新率,设定D3DPRESENT_RATE_DEFAULT使用默认刷新率

       UINT PresentationInterval;

} D3DPRESENT_PARAMETERS;

 

typedef enum _D3DMULTISAMPLE_TYPE//多重采样类型枚举
{
    D3DMULTISAMPLE_NONE            =  0,
    D3DMULTISAMPLE_NONMASKABLE     =  1,
    D3DMULTISAMPLE_2_SAMPLES       =  2,
    D3DMULTISAMPLE_3_SAMPLES       =  3,
    D3DMULTISAMPLE_4_SAMPLES       =  4,
    D3DMULTISAMPLE_5_SAMPLES       =  5,
    D3DMULTISAMPLE_6_SAMPLES       =  6,
    D3DMULTISAMPLE_7_SAMPLES       =  7,
    D3DMULTISAMPLE_8_SAMPLES       =  8,
    D3DMULTISAMPLE_9_SAMPLES       =  9,
    D3DMULTISAMPLE_10_SAMPLES      = 10,
    D3DMULTISAMPLE_11_SAMPLES      = 11,
    D3DMULTISAMPLE_12_SAMPLES      = 12,
    D3DMULTISAMPLE_13_SAMPLES      = 13,
    D3DMULTISAMPLE_14_SAMPLES      = 14,
    D3DMULTISAMPLE_15_SAMPLES      = 15,
    D3DMULTISAMPLE_16_SAMPLES      = 16,

    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff
} D3DMULTISAMPLE_TYPE;

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 涉黄刑事拘留怎么办取保候审 换了车牌保险怎么办 车辆转让后保险怎么办 立案后警察不管怎么办 打架后对方讹人怎么办 工商被恶意举报怎么办 店铺被工商举报怎么办 被买单侠恐吓怎么办? 团伙作案刑事拘留怎么办取保 欢乐麻将老输怎么办 回不了家怎么办身份证 没注意闯红灯了怎么办 摩托车被套牌了怎么办? 发现员工偷钱怎么办 盗窃刑事拘留7天怎么办 盗窃抓不到人怎么办 发现宿舍被盗后怎么办(  ) 发现宿舍被盗后怎么办() 回收到赃物电瓶怎么办 不知情买了赃物怎么办 盗窃单位要报警怎么办 上网吸烟被逮住怎么办 有人在微信骂我怎么办 网吧抽烟被拍照怎么办 诈骗被拘留该怎么办 行政拘留人跑了怎么办 车牌号被偷了怎么办 当员工提出辞职怎么办 老员工提出辞职怎么办 家人进看守所了怎么办 被贷款中介诈骗怎么办 喝完酒吐难受怎么办 犯罪嫌疑人死在看守所怎么办 犯罪嫌疑人死不承认怎么办 高血压进了看守所怎么办 看守所里被欺负怎么办 老师上课迟到了怎么办 艾滋病看守所不收怎么办 没能力偿还债务怎么办 监狱病人的癌症怎么办 监狱的传染病人怎么办