在Windows Phone 8.1上使用D3D9代码

时间:2014-04-15 14:45:21

标签: windows directx windows-phone-8.1

我们有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调用吗? 或者是痛苦的! ?我对这里真正发生的事情感到有点困惑!

由于

肖恩

1 个答案:

答案 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)
    );