D3D應用指南 – 初始化篇

來源:互聯網
上載者:User

廢話不說,直接看代碼 :

 

LPDIRECT3D9EX g_pD3D = NULL;
LPDIRECT3DDEVICE9EX  g_pD3DDvice = NULL;

 

 

//使用介面直接獲得 d3d對象,該對象是個總的調度介面。

if( FAILED(Direct3DCreate9Ex(D3D_SDK_VERSION, &g_pD3D)))
    return ;

 

   //從中得到顯示模式
    D3DDISPLAYMODE d3ddm;
    if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
    {
    return;
    }

 

//檢測預設的適配器格式(當前的,可能具有多顯卡的情況),D3DDEVTYPE_HAL意味的要通過預設裝置的驅動進行訪問。

//hal層(硬體抽象)層,多由

//裝置供應商提供。D3DFMT_D16 :16位z-buffer位元深度。

//z-buffer為位面緩衝技術的一種,主要用於可見面得判定,它會紀錄每個位面象素的z序深度。

    HRESULT hr = NULL;
    if(FAILED(g_pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
    d3ddm.Format, D3DUSAGE_DEPTHSTENCIL,
    D3DRTYPE_SURFACE, D3DFMT_D16) ) )
    {
    if( hr == D3DERR_NOTAVAILABLE )
    // POTENTIAL PROBLEM: We need at least a 16-bit z-buffer!
    return;
    }

  //研究性代碼

    CComPtr<IUnknown> pUnknown;
    CComPtr<IDispatch> pDisp;
    //這裡擷取pUnknown成功 證明是基於Iunknown介面繼承實現
    g_pD3D->QueryInterface(__uuidof(IUnknown),(void **)&pUnknown);
    //pDisp失敗,並無disp介面,也就是該對象僅為一個總的封包類,沒有連接點,及需分發給用戶端的訊息。
    g_pD3D->QueryInterface(__uuidof(IDispatch),(void **)&pDisp);
    //d3ddevice並非基於com的組件實現,這裡 g_pD3DDvice = NULL。
    pUnknown->QueryInterface(__uuidof(IDirect3DDevice9Ex) ,(void **)&g_pD3DDvice);

   //

   //裝置的建立是個很複雜的工作,所以參數設定是必要的,直接關係建立成功與否

   //

 
    D3DPRESENT_PARAMETERS d3dParams;
    memset(&d3dParams, 0, sizeof(d3dParams));

    d3dParams.BackBufferFormat = d3ddm.Format;//緩衝屬性
    d3dParams.SwapEffect = D3DSWAPEFFECT_DISCARD;//表面交換
    d3dParams.Windowed = TRUE;//具有window視窗
    d3dParams.EnableAutoDepthStencil = TRUE;
    d3dParams.AutoDepthStencilFormat = D3DFMT_D16;//z-buffer位深
    d3dParams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

 

//這裡就應該建立成功了
    int  dwErr = g_pD3D->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd,
                        D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dParams, NULL, &g_pD3DDvice);

    if(D3DERR_DEVICELOST  == dwErr)
    {
        AfxMessageBox(_T("dwErr :D3DERR_DEVICELOST"));
        return;
    }
    if(NULL == g_pD3DDvice)
    {
        CString str;
        str.Format(_T("dwErr :Create D3D Failure ,Error:%d"),dwErr);
        AfxMessageBox(str);
        return;
    }

 

基本環境建立需求 :

1. include "d3d9.h"

2. link : d3d9.lib

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.