D3D9 Device類型


D3D9主要有兩種類型的Device,一種是HAL Device(Hardware Abstraction Layer,硬件抽象層)。另一種是REF Device(References Device)。

HAL Device

這是主要的設備類型,該類型支持硬件加速,並且支持hardware vertex processing及software vertex processing。如果顯卡支持HAL類型的設備,那么在初始化D3D的時候就應該使用該類型。HAL Device只能實現大部分D3D特性,比如變換,光照,光柵化等。應用程序並不直接訪問圖形適配器(顯卡)而是先調用D3D函數,D3D則通過HAL訪問硬件。

REF Device

與Software Device不同,Reference Device支持所有的D3D特性,這種類型的設備主要用於調試目的,所以只有在安裝了DirectX SDK時才可用,由於這種類型的設備效率低下,基本上使用的都是CPU指令,而非GPU。所以只適用於功能測試及演示,在發布產品時不要使用該類型。

REF Device的主要用途

  • 提前體驗DX新特性-這種類型的設備在某些時候特別有用,比如新版的DirectX已經發布,但我們的顯卡並沒有更新,此時使用HAL無法體驗新的DX特性。這時REF就派上用場了,由於它用軟件模擬了新的DX特性,只要安裝了新版的DX SDK,就可以提前體驗一下。
  • 功能調試-如果HAL設備實現的某個特性或者效果和預期的結果不一樣,那么就可以使用REF試試,因為REF設備雖慢,但是能保證結果的正確性。

Hardware/software vertex processing

Hardware/software vertex processing只對HAL設備有效,當我么將頂點傳入渲染管線時,頂點需要被(Transformed)變換和點亮(Lit),這個過程被稱為T&L(Transformationi and Lighting)。Hardwar vertex processing意味着這個過程是由硬件實現的,而software vertex processing則意味着這個過程由軟件實現,通常的做法是先嘗試使用Hardware T&L,然后嘗試混合模式,最后嘗試Software T&L模式。

在D3D9使用函數CreateDevice來創建設備,下面的代碼創建了一個HAL類型的設別,並啟用software vertex processing。

LPDIRECT3D9         g_pD3D               = NULL ; // Used to create the D3DDevice
LPDIRECT3DDEVICE9   g_pd3dDevice        = NULL ; // Our rendering device

// Create the D3D object, which is needed to create the D3DDevice.
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
    MessageBoxA(NULL, "Create D3D9 object failed!", "Error", 0) ;
    return E_FAIL;
}

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

d3dpp.Windowed = TRUE; // use window mode, not full screen
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

// Create device
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    &d3dpp, &g_pd3dDevice ) ) )
{
    MessageBoxA(NULL, "Create D3D9 device failed!", "Error", 0) ;
    return E_FAIL;
}

==

Happy coding!!! Never never never give up


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM