Example #1
0
 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);
 }
Example #2
0
        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);
        }
Example #3
0
 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;
     }
 }
Example #4
0
        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
        }