private ShaderResourceView GetShaderResourceView(Device device) { lock (_sharedViews) { IntPtr viewPointer; if (_sharedViews.TryGetValue(device.NativePointer, out viewPointer)) { return(new ShaderResourceView(viewPointer)); } using (SharpDX.DXGI.Resource resource = Texture.QueryInterface <SharpDX.DXGI.Resource>()) using (Resource sharedResource = device.OpenSharedResource <Resource>(resource.SharedHandle)) { ShaderResourceView shaderView = new ShaderResourceView(device, sharedResource); _sharedViews.Add(device.NativePointer, shaderView.NativePointer); return(shaderView); } } }
public BackBuffer(Dx10Device device10, Dx11ChainedDevice device11) { try { _device10 = device10; _device11 = device11; _backBuffer = Resource.FromSwapChain <Texture2D>(device11.SwapChain, 0); _renderView = new RenderTargetView(device11.Device, _backBuffer); Texture2DDescription descriptor = _backBuffer.Description; { descriptor.MipLevels = 1; descriptor.ArraySize = 1; descriptor.Format = Format.B8G8R8A8_UNorm; descriptor.SampleDescription = new SampleDescription(1, 0); descriptor.Usage = SharpDX.Direct3D11.ResourceUsage.Default; descriptor.BindFlags = SharpDX.Direct3D11.BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource; descriptor.CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None; descriptor.OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.SharedKeyedmutex; }; _textureD3D11 = new Texture2D(device11.Device, descriptor); _factory2D = new Factory(FactoryType.MultiThreaded); using (SharpDX.DXGI.Resource sharedResource = _textureD3D11.QueryInterface <SharpDX.DXGI.Resource>()) using (SharpDX.Direct3D10.Texture2D backBuffer10 = device10.Device.OpenSharedResource <SharpDX.Direct3D10.Texture2D>(sharedResource.SharedHandle)) { _surface = backBuffer10.QueryInterface <Surface>(); _renderTarget2D = new RenderTarget(_factory2D, _surface, GetRenderTargetProperties()); } } catch { Dispose(); throw; } }