您当前所在的位置:数码导购网 > 电脑常识 > 显卡 > D3D是什么设备

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;
  }
网站首页|关于我们|联系我们