2012-08-02 165 views
3

我想創建一個使用D2D和D3D11在視頻上繪製文本的媒體基礎變換。我試圖在D3D11資源之上構建D2D RenderTarget,但不幸的是,大多數D2D和D3D互操作方法都需要D3D10,而D3D10在該項目中不可用。使用Direct2D繪製Direct3D11表面

我必須使用的參數如下:ID3D11Device * pDevice,ID3D11Texture2D * pInput,UINT uiInIndex,ID3D11Texture2D * pOutput和UINT uiOutIndex。

我試圖按照this tutorial的建議,但事實證明,它需要一個ID3D10Texture2D對象,這對我來說也不是一種選擇。

回答

1

您是否創建交換鏈?如果您使用XAML UI,則可以使用IDXGIFactory2 :: CreateSwapChainForCoreWindow或CreateSwapChainForComposition創建一個。你使您的D3D的東西在此之後,你可以創造D2D目標,並呈現在上面就像這樣D3D教程樣本中,尋找「sampleOverlay.cpp」

http://code.msdn.microsoft.com/windowsapps/Direct3D-Tutorial-Sample-08667fb0/sourcecode?fileId=44730&pathId=1319002242

+0

我理想地想到D2D附圖映射到所選擇的幀視頻,d3d上下文和設備最初可以訪問的視頻。我認爲交換鏈是爲Windows設計的 - 它們可以在這種情況下用於將圖畫應用到視頻流的幀中嗎? – Zach 2012-08-02 06:51:10

3

基本上你從輸入紋理複製幀到輸出紋理,然後執行下列操作來檢索IDXGI表面:

IDXGISurface *surface; 
pOutput->QueryInterface(&surface); 

然後,按照在this tutorial步驟將表面變成Direct2D的渲染目標。一旦你有渲染目標,你可以用類似的方式在教程中繪製漸變。

6

我以前遇到同樣的問題,它依賴於你正在運行的系統。

  1. 在Windows 7中,僅Direct3D 10的支持使用Direct2D
  2. 互操作在Windows 8,Direct2D的可以用的Direct3D互操作11