本文共 2001 字,大约阅读时间需要 6 分钟。
D3D9主要有两种类型的Device,一种是HAL Device(Hardware Abstraction Layer,硬件抽象层)。另一种是REF Device(References Device)。
这是主要的设备类型,该类型支持硬件加速,并且支持hardware vertex processing及software vertex processing。如果显卡支持HAL类型的设备,那么在初始化D3D的时候就应该使用该类型。HAL Device只能实现大部分D3D特性,比如变换,光照,光栅化等。应用程序并不直接访问图形适配器(显卡)而是先调用D3D函数,D3D则通过HAL访问硬件。
与Software Device不同,Reference Device支持所有的D3D特性,这种类型的设备主要用于调试目的,所以只有在安装了DirectX SDK时才可用,由于这种类型的设备效率低下,基本上使用的都是CPU指令,而非GPU。所以只适用于功能测试及演示,在发布产品时不要使用该类型。
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使用函数来创建设备,下面的代码创建了一个HAL类型的设别,并启用software vertex processing。
LPDIRECT3D9 g_pD3D = NULL ; // Used to create the D3DDeviceLPDIRECT3DDEVICE9 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 screend3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;// Create deviceif( 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
本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2013/03/10/2952792.html,如需转载请自行联系原作者