我们有PC的代码,多年来一直使用DX9,即我们称之为Direct3dCreate9并从那里开始。它适用于安装了DX9 DX10和DX11的机器。
我们希望将此代码的大部分用于Windows Phone 8.1应用。我有一个使用DX11在模拟器上运行的示例项目,因此,假设我们不需要任何DX10或DX11功能,那么在手机上运行DX9代码的最简单方法是什么。
我已经包含了D3d9.h但是在D3d11.lib中找不到Direct3dCreate9调用。
那么,我们可以使用PC Direct X SDK中的D3D9.lib(2009年8月)并链接到那个吗? 或者我们应该创建一个DX11对象,如果可以,我们可以使用DX9调用吗? 或者是痛苦的! ?我对这里真正发生的事情感到有点困惑!
由于
肖恩
答案 0 :(得分:1)
如果您定位Windows Phone 8.1,则需要#include <d3d11_1.h>
或#include <d3d11_2.h>
。
并且您将代码移植到DirectX 11,呼叫为D3D11CreateDevice
。这将是痛苦的!
D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_9_3
};
您仍将使用此功能级别。
// Create the Direct3D 11 API device object and a corresponding context.
ComPtr<ID3D11Device> device;
ComPtr<ID3D11DeviceContext> context;
DX::ThrowIfFailed(
D3D11CreateDevice(
nullptr, // Specify nullptr to use the default adapter.
D3D_DRIVER_TYPE_HARDWARE,
nullptr,
creationFlags, // Set set debug and Direct2D compatibility flags.
featureLevels, // List of feature levels this app can support.
ARRAYSIZE(featureLevels),
D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION.
&device, // Returns the Direct3D device created.
&m_featureLevel, // Returns feature level of device created.
&context // Returns the device immediate context.
)
);
// Get the Direct3D 11.1 API device and context interfaces.
DX::ThrowIfFailed(
device.As(&m_d3dDevice)
);
DX::ThrowIfFailed(
context.As(&m_d3dContext)
);