2014-02-11 28 views
2

我的Windows 8應用程序未通過認證測試:如何使用SharpDX調用Trim?

應用程序應該在它的IDXGIDevice3接口上隨時調用它的Trim API,以便在它即將被掛起時使用。

鏈接帶我到一個C++頁面,但我使用的是SharpDX。我只能在這裏的一本書中找到一個這樣的例子https://www.packtpub.com/article/integrating-direct3d-xaml-windows81#more

不幸的是,它提到了一個DeviceManager類(來自我認爲的書),我的SharpDX.DXGI.Device3丟失了。有一個Device1和Device2但沒有3.也許不同版本的庫或我錯過了對其他東西的引用?

因此,我正在尋找一個如何調用Trim的例子,以便認證應用程序很高興,並且它會清除任何圖形對象等掛起應用程序。

void App::OnSuspending(
_In_ Platform::Object^ sender, 
_In_ Windows::ApplicationModel::SuspendingEventArgs^ args 
) 
    { 
     Windows::ApplicationModel::SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral(); 

     // Save application data 

     m_exampleDxgiAdapter->Trim(); 
     deferral->Complete(); 
    } 

回答

2

下面的示例演示如何調用Trim()爲了通過認證過程:

async void OnSuspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e) 
{ 
    var Deferral = e.SuspendingOperation.GetDeferral(); 

    using (var Device = new SharpDX.Direct3D11.Device(SharpDX.Direct3D.DriverType.Hardware, SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport, new[] { SharpDX.Direct3D.FeatureLevel.Level_11_1, SharpDX.Direct3D.FeatureLevel.Level_11_0 })) 
    using (var Direct3DDevice = Device.QueryInterface<SharpDX.Direct3D11.Device1>()) 
    using (var DxgiDevice3 = Direct3DDevice.QueryInterface<SharpDX.DXGI.Device3>()) 
     DxgiDevice3.Trim(); 

    Deferral.Complete(); 
} 

你必須下載和使用SharpDX Latest Dev Package(這是目前2.5.1)SharpDX.DXGI.Device3

2

SharpDX.DXGI.Device3可從DirectX11_2-winrt程序集的最新SharpDX dev軟件包(2.5.1)中獲得。

此DeviceManager不是DirectX API的一部分,但看起來像是本書中示例的一部分。您需要檢索的「COM-查詢」原DXGI設備上的接口設備3設備(像deviceManager.Device1.QueryInterface<Device3>();

+0

真棒,現在檢查出來。請注意,下載頁面上可能應該包含該開發包的鏈接。我一直在試着用那個頁面上的那個(2.5.0)來解決它。 我在搜索2.5.1 –

+0

後在About頁面上找到它,所以這沒有幫助。微軟的工具告訴我,我需要調用Trim,並且據我所知,我甚至沒有使用DirectX3D(我使用SharpDX修改Direct2D1的一些位圖 - 即將文本繪製到它們上),所以我覺得我必須添加此代碼來調用Trim,我甚至沒有使用它。所以我想知道如何從目前獲取設備。 –

+0

你應該在這裏發佈Direct2D設備的整個初始化過程,因爲在你的描述中你真的不清楚你在使用/做什麼(這個DeviceManager,你有源代碼嗎?是否和SharpDX樣本相同 - 是不好,不應該用於生產代碼)。通常,Direct2D設備是從Direct3D設備初始化的。 – xoofx