D3D基础笔记(1)-初始化D3D

    技术2022-05-11  106

     初始化Direct3D的基本步骤:

    1.获取一个IDirect3D9接口指针。

    2.检查设备的技术特性(D3DCAPS9),搞清楚主显示卡是否支持硬件顶点处理。

    3.初始化一个D3DPRESENT_PARAMETERS结构实例,这个结构包含了许多数据成员,它们允许我们指定将要创建的IDirect3DDevice9接口的特性。

    4.创建一个基于已经初始化好的D3DPRESENT_PARAMETERS结构的IDirect3DDevice9对象。

    代码如下:

    // Step 1:获取d3d接口

     IDirect3D9* d3d9 = 0;    d3d9 = Direct3DCreate9(D3D_SDK_VERSION);

        if( !d3d9 ) {  ::MessageBox(0, "Direct3DCreate9() - FAILED", 0, 0);  return false; }

     // Step 2:检测硬件处理能力

     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;

     // Step 3:填充d3dpresent_parameters结构  D3DPRESENT_PARAMETERS d3dpp; d3dpp.BackBufferWidth            = width; d3dpp.BackBufferHeight           = height; d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8; 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;

     // 4 创建设备

     hr = d3d9->CreateDevice(  D3DADAPTER_DEFAULT, // primary adapter  deviceType,         // device type  hwnd,               // window associated with device  vp,                 // vertex processing     &d3dpp,             // present parameters     device);            // return created device


    最新回复(0)