2010-07-07 108 views
1

我試用了DX10的共享資源功能,因爲我需要爲我的項目之一。但我無法找到很多樣本或代碼,特別是使用SlimDX。根據DX10文檔,我只需要將資源指定爲共享,然後我可以使用另一個應用程序的OpenSharedResource()打開它。隨着SlimDX一個簡單的測試應用程序,我做了以下SlimDX與DX10共享資源

 Texture2D tex = new Texture2D(device, new Texture2DDescription() 
     { 
      ArraySize = 1, 
      BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, 
      CpuAccessFlags = CpuAccessFlags.None, 
      Format = Format.B8G8R8A8_UNorm, 
      Height = 128, 
      Width = 128, 
      MipLevels = 1, 
      OptionFlags = ResourceOptionFlags.Shared, 
      SampleDescription = new SampleDescription(1, 0), 
      Usage = ResourceUsage.Default, 
     }); 

     Texture2D tex2 = device.OpenSharedResource<Texture2D>(tex.ComPointer); 

但我不斷收到此錯誤

E_INVALIDARG: An invalid parameter was passed to the returning function (-2147024809) 

我不能似乎找出什麼地方出了錯,作爲tex.ComPointer可能不是OpenSharedResource的正確指針,或者不支持Texture2D(沒有明確指出它不在文檔中)

另一種方法是指定要傳遞到CreateTexture函數的pHandle在SlimDX或I中不可用我沒有意識到這一點。

有沒有人試過這個成功?一些幫助將不勝感激。

謝謝

回答

4

我發現我的代碼有問題。我需要使用DXGI來檢索共享句柄(而不是指針)。以下代碼完美運行

SlimDX.DXGI.Resource r = new Resource(tex); 

Texture2D tex2 = device.OpenSharedResource<Texture2D>(r.SharedHandle);