好吧,所以我寫了一個自定義的VMR9 Allocator/Presenter,似乎工作正常。但是,當我嘗試將視頻幀從分配器/演示者表面複製到我的應用程序表面時,視頻看起來閃爍。音頻播放是好的,所以我相當肯定這不是一個機器陷入困境或任何問題。這是我在渲染循環中的代碼。DirectX閃爍視頻
g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 0, 0, 0), 1.0f, 0);
// render the scene
if (SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//g_pd3dDevice->SetRenderTarget(0, g_pd3dSurface);
g_pd3dDevice->StretchRect(vmr9_ap->renderSurface, src, g_pd3dSurface, dest, D3DTEXF_NONE);
// end the scene
g_pd3dDevice->EndScene();
}
但是,如果我將其更改爲這個(註釋掉清除緩存)
// g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 0, 0, 0), 1.0f, 0);
// render the scene
if (SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//g_pd3dDevice->SetRenderTarget(0, g_pd3dSurface);
g_pd3dDevice->StretchRect(vmr9_ap->renderSurface, src, g_pd3dSurface, dest, D3DTEXF_NONE);
// end the scene
g_pd3dDevice->EndScene();
}
這個閃爍消失。我擔心這種方式很糟糕,可能會導致比解決問題更多的問題。有沒有人有這方面的經驗?有更好的解決方案嗎?
謝謝!
謝謝!這很有道理。如果我有聲望,我會投票贊成。 – Alex 2009-09-20 06:17:12
哦,並且繪圖是在D3Dmage中響應WPF中的CompositionTarget.Rendering事件完成的。 – Alex 2009-09-20 06:20:36
重新編輯:在BeginScene周圍的每張DX卡上都不會做任何事......它不是,甚至不需要,嚴格來說是需要的 – Goz 2009-09-20 08:46:10