2014-03-05 58 views
0

目的是嘗試的不同版本的兩個不同D3D設備,其中之一是D3D9之間共享的表面,另一個是d3d9Ex或更高的表面佔有率。D3D9和D3D9Ex在視窗7

根據MSDN文檔它規定你可以從link做等等。

Direct3D的資源現在可設備或過程之間共享。這適用於任何Direct3D資源,包括紋理,頂點緩衝區,索引緩衝區或曲面(如渲染目標,深度模板緩衝區或離屏平面)。

還可根據MSDN文檔它規定你不能從another link

這樣做的Direct3D 10.0,Direct3D的9C,和年長的Direct3D運行時不支持共同的面。系統內存副本將繼續用於與基於GDI或DXGI的API的互操作性。

要確認是自己試試吧,這樣的代碼:

HANDLE SharedHandle = NULL; 

IDirect3DTexture9 *d3d9Tex; 
pD3D9Dev->CreateTexture(Width, Height, 1, D3DUSAGE_RENDERTARGET, Format, D3DPOOL_DEFAULT, &d3d9Tex, &SharedHanlde); 
if(FAILED(hr)) 
{ 
    LOG("failed %s %s", GetD3DErrorString(hr), CNGetErrorString(GetLastError())); 
} 

IDirect3DTexture9 *d3d9ExTex; 
pD3D9DevEx->CreateTexture(Width, Height, 1, D3DUSAGE_RENDERTARGET, Format, D3DPOOL_DEFAULT, &d3d9ExTex, &SharedHanlde); 
if(FAILED(hr)) 
{ 
    LOG("failed %s %s", GetD3DErrorString(hr), CNGetErrorString(GetLastError())); 
} 

其中給出:

Direct3D9: (ERROR) :Device is not capable of sharing resource. CreateTexture fails. 

CreateRenderTarget給出了相同的結果。

,結果許多失望,我的問題是,資源共享假設爲D3D9在所有的工作,還是我失去了一些東西,我應該怎麼辦?

回答

2
  1. Direct3D是一個總稱,它包括的Direct3D 9,Direct3D的9EX,Direct3D 10的和Direct3D 11 ...文檔上說Direct3D的資源現在可以共享,這不是太糟糕了,絕對是你可以做到這一點的Direct3D 10.1和Direct3D 11

  2. 你不能做表面共享使用Direct3D 9文檔有如下澄清這一點非常清楚。

的Direct3D 10.0,Direct3D的9C,和年長的Direct3D運行時不支持 共同的面。系統內存拷貝將繼續用於 與基於GDI或DXGI的API的互操作性。

如果你仔細閱讀this page,你可以很容易地得出結論:

  • 的Direct3D 11的Direct2D,和Direct3D 10.1支持同步的共享表面
  • 的Direct3D 9EX支撐面不同步共享。
  • Direct3D 10.0,Direct3D 9c和較早的Direct3D運行時不支持曲面共享。
+0

謝謝。我想你是對的。我的印象是,自從最初的文檔談論d3d9ex以來,表面共享介於d3d9和d3d9ex之間。 – vgrimmer