目的是嘗試的不同版本的兩個不同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在所有的工作,還是我失去了一些東西,我應該怎麼辦?
謝謝。我想你是對的。我的印象是,自從最初的文檔談論d3d9ex以來,表面共享介於d3d9和d3d9ex之間。 – vgrimmer