public RenderTarget(ShaderResourceView srv, RenderTargetView rtv) { using (var tex = rtv.ResourceAs <Texture2D>()) { Dimension = Texture.Dimension.Texture2D; Width = tex.Description.Width; Height = tex.Description.Height; Format = tex.Description.Format; } Update(srv, rtv); }
public virtual void Apply(DeviceContext context, ShaderResourceView source, RenderTargetView destination, float scale = 1f, float offset = 0f) { context.OutputMerger.SetTargets(destination); context.PixelShader.SetShaderResource(0, source); Texture2D tex2D = destination.ResourceAs <Texture2D>(); context.Rasterizer.SetViewport(0f, 0f, (float)tex2D.Description.Width, (float)tex2D.Description.Height, 0f, 1f); tex2D.Dispose(); ScreenQuad.Draw(context, scale, offset); }
public void Update(ShaderResourceView srv, RenderTargetView rtv) { Clear(); using (var tex = rtv.ResourceAs <Texture2D>()) { Width = tex.Description.Width; Height = tex.Description.Height; Format = tex.Description.Format; SRV = srv; View = rtv; } }
protected override void CreateSizeDependentResources(D3DApplicationBase app) { RemoveAndDispose(ref renderTargetSRV); RemoveAndDispose(ref resolvedTargetSRV); RemoveAndDispose(ref altRenderTargetRTV); RemoveAndDispose(ref altRenderTargetSRV); RemoveAndDispose(ref altRenderTargetUAV); RemoveAndDispose(ref altRenderTargetUIntUAV); RemoveAndDispose(ref renderTarget); RemoveAndDispose(ref resolvedTarget); base.CreateSizeDependentResources(app); #region Image Processing var device = this.DeviceManager.Direct3DDevice; renderTarget = ToDispose(RenderTargetView.ResourceAs <Texture2D>()); { renderTarget.DebugName = "Render Target"; renderTargetSRV = ToDispose(new ShaderResourceView(device, renderTarget)); // Initialize a target to resolve multi-sampled render target var resolvedDesc = renderTarget.Description; resolvedDesc.BindFlags = BindFlags.ShaderResource; resolvedDesc.SampleDescription = new SampleDescription(1, 0); resolvedTarget = ToDispose(new Texture2D(device, resolvedDesc)); { resolvedTargetSRV = ToDispose(new ShaderResourceView(device, resolvedTarget)); } // Create two alternative render targets // These are specially configured so they can be bound as SRV, RTV, and UAV // and also as a R32_UInt UAV (read/write to texture resource support) var rtDesc = renderTarget.Description; rtDesc.BindFlags = BindFlags.ShaderResource | BindFlags.RenderTarget | BindFlags.UnorderedAccess; rtDesc.SampleDescription = new SampleDescription(1, 0); rtDesc.Format = Format.R8G8B8A8_Typeless; // so it can be bound to the R32_UInt UAV rtDesc.MipLevels = 0; using (var altTarget = new Texture2D(device, rtDesc)) { altRenderTargetRTV = ToDispose(new RenderTargetView(device, altTarget , new RenderTargetViewDescription { Format = Format.R8G8B8A8_UNorm, Dimension = RenderTargetViewDimension.Texture2D } )); altRenderTargetSRV = ToDispose(new ShaderResourceView(device, altTarget , new ShaderResourceViewDescription { Dimension = SharpDX.Direct3D.ShaderResourceViewDimension.Texture2D, Format = Format.R8G8B8A8_UNorm, Texture2D = new ShaderResourceViewDescription.Texture2DResource { MipLevels = 1, MostDetailedMip = 0 } } )); altRenderTargetUAV = ToDispose(new UnorderedAccessView(device, altTarget , new UnorderedAccessViewDescription { Dimension = UnorderedAccessViewDimension.Texture2D, Format = Format.R8G8B8A8_UNorm, } )); altRenderTargetUIntUAV = ToDispose(new UnorderedAccessView(device, altTarget , new UnorderedAccessViewDescription { Dimension = UnorderedAccessViewDimension.Texture2D, Format = Format.R32_UInt, } )); } using (var alt2Target = new Texture2D(device, rtDesc)) { alt2RenderTargetRTV = ToDispose(new RenderTargetView(device, alt2Target , new RenderTargetViewDescription { Format = Format.R8G8B8A8_UNorm, Dimension = RenderTargetViewDimension.Texture2D } )); alt2RenderTargetSRV = ToDispose(new ShaderResourceView(device, alt2Target , new ShaderResourceViewDescription { Dimension = SharpDX.Direct3D.ShaderResourceViewDimension.Texture2D, Format = Format.R8G8B8A8_UNorm, Texture2D = new ShaderResourceViewDescription.Texture2DResource { MipLevels = 1, MostDetailedMip = 0 } } )); alt2RenderTargetUAV = ToDispose(new UnorderedAccessView(device, alt2Target , new UnorderedAccessViewDescription { Dimension = UnorderedAccessViewDimension.Texture2D, Format = Format.R8G8B8A8_UNorm, } )); alt2RenderTargetUIntUAV = ToDispose(new UnorderedAccessView(device, alt2Target , new UnorderedAccessViewDescription { Dimension = UnorderedAccessViewDimension.Texture2D, Format = Format.R32_UInt, } )); } } #endregion }