Direct3DCreate9Ex 函数 (d3d9.h)
创建 IDirect3D9Ex 对象并返回该对象的接口。
语法
HRESULT Direct3DCreate9Ex(
[in] UINT SDKVersion,
[out] IDirect3D9Ex **unnamedParam2
);
参数
[in] SDKVersion
类型: UINT
应 D3D_SDK_VERSION此参数的值。 请参阅“备注”。
[out] unnamedParam2
类型: IDirect3D9Ex**
指向 IDirect3D9Ex 接口的指针的地址,该接口表示创建的 IDirect3D9Ex 对象。 如果函数失败,则在此处插入 NULL 。
返回值
类型: HRESULT
- 如果 不支持 Direct3DEx 功能, () 未安装 WDDM 驱动程序,或者 SDKVersion 与 DLL 的版本不匹配,则D3DERR_NOTAVAILABLE。
- D3DERR_OUTOFMEMORY 创建枚举器对象时是否检测到内存不足的情况。
- 如果 枚举器对象的创建成功,S_OK。
备注
IDirect3D9Ex 对象是应用程序创建的第一个对象,也是应用程序释放的最后一个对象。 枚举和检索设备功能的函数可通过 IDirect3D9Ex 对象访问。 这使应用程序无需创建设备即可选择设备。
IDirect3D9Ex 接口支持活动显示适配器的枚举,并允许创建 IDirect3D9Ex 对象。 如果用户通过将设备添加到桌面或热插接笔记本电脑) 来动态添加适配器 (,则枚举中不包含这些设备。 创建新的 IDirect3D9Ex 接口将公开新设备。
将 D3D_SDK_VERSION 标志传递给此函数,以确保在编译的应用程序中使用的头文件与已安装的运行时 DLL 的版本匹配。 仅当标头或其他代码更改需要重新生成应用程序时,运行时才会更改D3D_SDK_VERSION。 如果此函数失败,则表示头文件和运行时 DLL 的版本不匹配。
示例
创建 IDirect3D9Ex 对象。
下面的代码示例演示如何使用 Direct3DCreate9Ex 创建 IDirect3D9Ex 对象。 然后,此示例使用 IDirect3D9Ex 对象创建 IDirect3DDevice9Ex 对象,该对象作为 out 参数返回到函数。
HRESULT InitD3D9Ex( /* IN */ HWND hWnd, /* OUT */ IDirect3DDevice9Ex ** ppD3DDevice )
{
HRESULT hr = E_FAIL;
IDirect3D9Ex * pD3D = NULL;
IDirect3DDevice9Ex * pDevice = NULL;
if(ppD3DDevice == NULL)
{
return hr;
}
// Create the D3D object, which is needed to create the D3DDevice.
if(FAILED(hr = Direct3DCreate9Ex( D3D_SDK_VERSION, &pD3D )))
{
*ppD3DDevice = NULL;
return hr;
}
// Set up the structure used to create the D3DDevice.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
// Create the Direct3D device.
if( FAILED( hr = pD3D->CreateDeviceEx( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, NULL, &pDevice ) ) )
{
*ppD3DDevice = NULL;
return hr;
}
// Device state would normally be set here
*ppD3DDevice = pDevice;
return hr;
}
检查 Direct3D9Ex。
下面的代码示例演示如何检查是否存在 Direct3DCreate9Ex,并在不支持它的平台上失败。 你可以在游戏启动器中使用此代码向用户显示错误消息或加载使用 IDirect3D9 接口的呈现器。
为了检查 Direct3DCreate9Ex,此示例使用 Win32 LoadLibrary 函数显式加载 D3D9.dll 库。 然后,该示例使用 Win32 GetProcAddress 函数将 Direct3DCreate9Ex 的地址分配给指针。 如果 Direct3DCreate9Ex 不存在,则函数指针为 NULL,并且代码示例返回 ERROR_NOT_SUPPORTED HRESULT 值。 但是,如果 存在 Direct3DCreate9Ex ,则返回 S_OK 值。
HRESULT CheckD3D9Ex( void )
{
HRESULT hr = E_FAIL;
HMODULE libHandle = NULL;
// Manually load the d3d9.dll library.
libHandle = LoadLibrary(L"d3d9.dll");
if(libHandle != NULL)
{
// Define a function pointer to the Direct3DCreate9Ex function.
typedef HRESULT (WINAPI *LPDIRECT3DCREATE9EX)( UINT, void **);
// Obtain the address of the Direct3DCreate9Ex function.
LPDIRECT3DCREATE9EX Direct3DCreate9ExPtr = NULL;
Direct3DCreate9ExPtr = (LPDIRECT3DCREATE9EX)GetProcAddress( libHandle, "Direct3DCreate9Ex" );
if ( Direct3DCreate9ExPtr != NULL)
{
// Direct3DCreate9Ex is supported.
hr = S_OK;
}
else
{
// Direct3DCreate9Ex is not supported on this
// operating system.
hr = ERROR_NOT_SUPPORTED;
}
// Free the library.
FreeLibrary( libHandle );
}
return hr;
}
请注意,可以将 IDirect3DDevice9Ex 接口指针强制转换为 IDirect3DDevice9 接口指针,因为扩展版本是继承的。 这样就可以将扩展设备与现有 Direct3D 9 代码一起使用,除非新设备更改了接口的语义。 有关两个接口之间的差异的详细信息,请参阅 设备行为更改。
要求
目标平台 | Windows |
标头 | d3d9.h |
Library | D3d9.lib |
DLL | D3d9.dll |