在用於Windows Phone 8的混合Direct3D + Xaml應用程序(在Visual Studio中選擇項目類型時可在C++子樹中訪問)中,有一種笨拙的機制來重繪由DrawingSurfaceBackGroundGrid
控件託管的視口。在項目模板中,這由什麼是用DrawingSurfaceBackgroundGrid重繪框架的正確技術? (DirectX + xaml應用程序)
IDrawingSurfaceRuntimeHostNative->RequestAdditionalFrame()
調用從C++/CX端執行。這一方本身被XAML引擎稱爲做Draw
。 這裏的問題有以下幾點:
- 似乎
Direct3DContentProvider
的Draw
方法是從Windows Phone應用程序的所謂的「成分」線程調用。這是對的嗎? - 方法
RequestAdditionalFrame()
從WinRT組件調用 - 此調用是否跨越ABI(即創建特定於WinRT/COM的開銷)? - 可以調用
Draw
方法以外的線程調用方法RequestAdditionalFrame()
嗎?我測試了它,它並沒有使應用程序崩潰,但是它有一些評論。
感謝您寶貴的意見,我對您的案例有一些疑問。 1)「頁面正在改變」是什麼意思?是關於你的當前DrawingSurface的完全破壞,所以你需要調用Connect來附加一個新的? 2)爲什麼我們需要等待'RequestAdditionalFrame'完成? 3)您已經重寫了您的繪圖代碼以在Draw上下文中執行,但是這是否意味着您的UI現在由於額外的渲染工作而變得不太敏感?你的情況看起來像「buggy併發代碼」,也許這是問題,而不是'RequestAdditionalFrame'? –
(抱歉 - 發佈太早) 1.不完全。對不起,誤導你,我再次檢查,發現我的應用程序只有當Windows響應接近傳感器和變暗屏幕時崩潰。在這種情況下,調用Disconnect()。 2.我需要同步訪問'IDrawingSurfaceRuntimeHostNative'接口,因爲我在另一個線程中執行繪製。我不能只在'Disconnect()'中將它NULL,因爲同時可以調用RequestAdditionalFrame。 3.一切皆有可能,但我相信我找到了正確的理由。 – Zakhar