2017-03-03 10 views
0

vs2015の「DirectX 11およびXAML App(ユニバーサルウィンドウ)」テンプレートを使用しています。私はすべてのフレームでユーザーのキーストロークを取得したい。そこで、GetAsyncKeyState()をレンダリングループの内部に配置しようとしました。レンダリングループは、別のスレッドで実行されている:別のスレッドからのUWP GetAsyncKeyState()

auto workItemHandler = ref new WorkItemHandler([this](IAsyncAction^action) 
{ 
    // Calculate the updated frame and render once per vertical blanking interval. 
    while (action->Status == AsyncStatus::Started) 
    { 
     critical_section::scoped_lock lock(m_criticalSection); 
     Update(); 
     m_sceneRenderer->OnKeyDown(); 
     if (Render()) 
     { 
      m_deviceResources->Present(); 
     } 
    } 
}); 

// Run task on a dedicated high priority background thread. 
m_renderLoopWorker = ThreadPool::RunAsync(workItemHandler, WorkItemPriority::High, WorkItemOptions::TimeSliced); 

m_sceneRenderer->は、OnKeyDown()私はGetAsyncKeyStateを置く場所です()。しかし、whileループの中にm_sceneRenderer-> OnKeyDown()を置くたびに、すべてのDirectXコンテンツはレンダリングされません。また、m_renderLoopWorkerはnullptrになり、アプリケーションを閉じると例外がスローされます。

// Sample3DSceneRenderer.h, truncated 
namespace UWP_DX11_XAML_ 
{ 
    class Sample3DSceneRenderer 
    { 
     Sample3DSceneRenderer(Windows::UI::Core::CoreWindow^ window); 
     void OnKeyDown(); 
     Platform::Agile<Windows::UI::Core::CoreWindow^> m_window; 
    } 
} 

// Sample3DSceneRenderer.cpp, truncated 
UWP_DX11_XAML_::Sample3DSceneRenderer::Sample3DSceneRenderer(
     Windows::UI::Core::CoreWindow^ window): 
m_window(window) 
{ 
} 

void UWP_DX11_XAML_::Sample3DSceneRenderer::OnKeyDown() 
{ 
    m_window.Get()->GetAsyncKeyState(Windows::System::VirtualKey::Control); 
} 

m_windowの他のメンバ関数を呼び出すと、同じ問題が発生する可能性があります。

答えて

0

CreateCoreIndependentInputSource(CoreInputDeviceTypes :: Mouse | CoreInputDeviceTypes :: Touch | CoreInputDeviceTypes :: Pen)を使用して専用の入力スレッドをセットアップすることができます。

このオプションを示してここにサンプルがあります:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/LowLatencyInput

私はまた、低入力遅延を最適化する議論これらに類する物品を発見しました。

https://docs.microsoft.com/en-us/windows/uwp/gaming/optimize-performance-for-windows-store-direct3d-11-apps-with-coredispatcher

https://blogs.windows.com/buildingapps/2013/12/18/optimizing-directx-apps-for-low-latency-input-and-longer-battery-life/#JPGhHjXExbySmTf7.97

+0

CreateCoreIndependentInputSource()それは、キーボードイベント、ちょうどペン/タッチ/マウスを扱うようには見えません。それはキーボードをすることはできますか? –

関連する問題