2010-05-06 52 views
1

我這個問題掙扎了一個星期。我希望我能陳述 問題很清楚:VMR9 Renderless模式設備復位問題

所以,我安裝我的自定義分配器/主持人和InitializeDevice() I 創建VMR9的紋理

然後,VMR9每次有新的 幀時調用我的PresentImage()函數。

我顯示渲染這個紋理到四邊形和Present()它。如果 Present()返回D3DERR_DEVICELOST,那麼我將PostMessage()發送到我的 WndProc()以發出設備重置信號。

然後我的WndProc()調用我的自定義對象上的ResetDevice()。 ResetDevice()釋放所有DEFAULT_POOL資源並調用 設備上的Reset()。現在,讓我們暫停片刻


此時的Direct3D給我一個錯誤,告訴我,我仍然堅持 引用一些DEFAULT_POOL面......這一點我敢肯定我做 不是因爲我釋放我分配的唯一紋理。這個問題是 一個謎,據我知道......有許多懸而未決論壇 關於這個問題可以追溯到2003甚至職位..


,讓我們改變車道。在這個論壇發佈

http://www.eggheadcafe.com/software/aspnet/29909616/i-did-some-more-e ...

有人說,你應該停止圖形,斷開 的VMR9的所有引腳,重置設備,然後再重新連接並運行圖。

當我這樣做,我得到另一Direct3D的投訴: 的Direct3D9:(ERROR):失敗嘗試創建一個紋理 的Direct3D9:(ERROR):質地寬度比什麼設備 支持的更大。 CreateTexture失敗。

我追蹤的問題到某個時候,我看到,在一些功能 深VMR9計算的寬度的2下一個功率 之前創造了一些紋理(除了那些我成功地創建 我的A/P )。雖然跟蹤我意識到了這一點:

我的視頻寬度爲640的640 2下的功率是1024年,我看到 此值不知何故變成10240雖然我甚至不設置 分配寬度1024.我只是通過640,因爲我的顯卡不需要 需要pow2紋理尺寸。

這是我堅持..

是否有任何人誰知道一些關於重置/刷新與VMR9的 設備?請幫忙。

在此先感謝。

法提赫

回答

0

既然你有一個自定義分配器/演示我假設你正在使用IVMRSurfaceAllocatorNotify9 :: AllocateSurfaceHelper();並且這種方法可以有效地分配多個表面,你確定所有的表面在設備重置之前都被釋放了嗎?