D3D是什么设备
怎么启动或创建D3D设备,为什么D3D设备失败?
一个D3D设备接口可以简单的认为是本机一块显卡的抽象,它包含了显卡所有的硬件参数及状态值,比如 说,显卡显存的数量和起始的线性地址,是否支持深度缓冲(Depth Buffer),雾化(Fog),纹理(Texture) 及MipMap等。
在DirectX8.0中,你可以用如下代码建立一个D3D对象:
#include // 必须包含的头文件
#include
LPDIRECT3D8 g_lpD3D = NULL; // D3D对象指针,以后经常用到
if( NULL == (g_lpD3D=Direct3Dcreate8(D3D_SDK_VERSION) ) ) // D3D_SDK_VERSION确保该对象建立正确的头文件上,目前只能用该值。
return E_FAIL;
建立D3D设备
在DirectX 8.0中,建立一个D3D设备需要到用IDirect3D8 接口中的CreateDevice函数,该函数原型如下
HRESULT CreateDevice(
UINT Adapter,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pPresentationParameters,
IDirect3DDevice8** ppReturnedDeviceInterface
);
函数参数说明可以查询DirectX 8.0 SDK 的文档,不过是英文的,下面给出一段代码说明:
// 该段代码建立一个基于Window窗口程序的D3D硬件抽象层设备,采用软件的顶点数据处理,并使用16Bits 的深度缓冲区。
D3DDISPLAYMODE d3ddm;
HRESULT hr = 0;
hr = g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );
if( FAILED(hr) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE; // 指明是窗口模式,而非全局独占模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 无需交换链
d3dpp.BackBufferFormat = d3ddm.Format; // 后备缓冲区颜色格式
d3dpp.EnableAutoDepthStencil = TRUE; // 使深度缓冲区有效
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 深度缓冲区颜色格式
// Create the D3D Device
hr = g_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, // 使用当前显卡作注设备
D3DDEVTYPE_HEL, // 设备类型
hWnd, // 该程序所在的窗口句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING, // 用软件的方法处理顶点数据
&d3dpp, // 指向上面的结构
&g_pd3dDevice ) ) ) // 指向3D设备的指针
if( FAILED(hr) )
{
return E_FAIL;
}
在DirectX8.0中,你可以用如下代码建立一个D3D对象:
#include // 必须包含的头文件
#include
LPDIRECT3D8 g_lpD3D = NULL; // D3D对象指针,以后经常用到
if( NULL == (g_lpD3D=Direct3Dcreate8(D3D_SDK_VERSION) ) ) // D3D_SDK_VERSION确保该对象建立正确的头文件上,目前只能用该值。
return E_FAIL;
建立D3D设备
在DirectX 8.0中,建立一个D3D设备需要到用IDirect3D8 接口中的CreateDevice函数,该函数原型如下
HRESULT CreateDevice(
UINT Adapter,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pPresentationParameters,
IDirect3DDevice8** ppReturnedDeviceInterface
);
函数参数说明可以查询DirectX 8.0 SDK 的文档,不过是英文的,下面给出一段代码说明:
// 该段代码建立一个基于Window窗口程序的D3D硬件抽象层设备,采用软件的顶点数据处理,并使用16Bits 的深度缓冲区。
D3DDISPLAYMODE d3ddm;
HRESULT hr = 0;
hr = g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );
if( FAILED(hr) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE; // 指明是窗口模式,而非全局独占模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 无需交换链
d3dpp.BackBufferFormat = d3ddm.Format; // 后备缓冲区颜色格式
d3dpp.EnableAutoDepthStencil = TRUE; // 使深度缓冲区有效
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 深度缓冲区颜色格式
// Create the D3D Device
hr = g_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, // 使用当前显卡作注设备
D3DDEVTYPE_HEL, // 设备类型
hWnd, // 该程序所在的窗口句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING, // 用软件的方法处理顶点数据
&d3dpp, // 指向上面的结构
&g_pd3dDevice ) ) ) // 指向3D设备的指针
if( FAILED(hr) )
{
return E_FAIL;
}
- 梅捷G31主板的集成显卡玩尽舞团卡吗
- 机器总蓝屏是怎么回事
- TCL电脑锐翔K8551要怎么样才会不卡。
- CPU跟不上游戏有什么后果
- 电脑原装正版机子的零件是不是很少
- 买电脑是台式的好还是笔记本好
- directx90c是什么
- 电脑上的本地连接没有了连不上网怎么办
- 电脑怎么进安全模式
- 电脑设置成32色和16色对视力有影响么
- 板载HD4290能与哪些A卡实行混和交火
- 台式机机箱有什么作用
- 电脑的显卡噪声特别大怎么办
- 独立显卡起到哪些作用
- 电脑上的A卡和N卡有什么区别
- 电脑总是反应很慢是怎么解决
- 万能显卡驱动支持各种显卡类型吗
- 病毒有能力攻击显卡吗
- 显卡带速屏幕抖动影响网速吗
- 电脑为什么变蓝屏
- win7玩飚车怎么一拐弯就卡
- 电脑的灰尘会影响电脑吗,
- 电脑突然卡机什么故障
- 电脑风扇声音特别大是怎么回事
- 电脑玩仙剑四时没有字幕是怎么回事
- 为什么电脑总是一闪一闪的
- p430cpu风扇转速多少正常
- 为什么电脑不能待机
- 网速太慢,程序多开几个会导致当机吗
- 为什么昂达9600GSO TC512MB GD3A2
- 主板驱动安装光碟有什么用
- 电脑玩游戏卡愿什么
- 为什么电脑机箱会发出声音
- 电脑死机后为什么总是开不了
- 怎么通过字母看显卡好坏
- 怎么取消电脑网页滚屏现象
- 为什么看9品网络电视会蓝屏
- CCC,exe是什么进程
- 怎么删除屏幕右下角快速启动栏里的东西
- 在玩游戏显卡不足的情况的下怎么办