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


本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2013/03/10/2952792.html,如需转载请自行联系原作者

相关文章
|
9月前
|
Linux
device_node转换成platform_device
device_node转换成platform_device
82 0
一文了解USB Type-C
现在的USB Type-C已经被广泛使用,移动设备基本都是使用Type-C。它主要是用于快充和作为音频接口。最近欧盟还要求电子设备统一使用Type-C接口,来防止浪费。接下来我们来简单了解这个接口。
|
并行计算 PyTorch 算法框架/工具
torch中 x数据已经使用x.to(device), 再使用x.to(device)会报错吗?
在 PyTorch 中,如果已经将一个张量 (tensor) 移到了指定的设备上,再次调用 to 方法将不会产生任何影响,也不会报错。这是因为 to 方法内部会检查当前张量所在的设备和目标设备是否一致,如果一致,则直接返回原始张量。 以下是一个简单的示例代码,演示了当我们尝试将已经被移动到 GPU 上的张量再次移动到相同的 GPU 设备时,不会引发错误:
277 0
|
索引 容器
Type 类型
Type 类型
110 0
|
内存技术
嵌入式 VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)
系统启动后,虽然nand驱动表现正常,但是最后挂载rootfs时候出错: Kernel command line: root=/dev/mtdblock2 rw init=/linuxrc console=ttyAMA1,115200 mem=64M rootfstype=yaffs2。
2147 0
|
TensorFlow 算法框架/工具 异构计算
成功解决 gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce 94
成功解决 gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce 94
|
Oracle 关系型数据库 机器学习/深度学习

热门文章

最新文章