Пример #1
0
        public override void SetDefaultRenderTarget(int width, int height, bool doClearColor)
        {
            SharpDX.Direct3D12.ResourceBarrier barrier = new SharpDX.Direct3D12.ResourceBarrier();
            barrier.Type  = SharpDX.Direct3D12.ResourceBarrierType.Transition;
            barrier.Flags = SharpDX.Direct3D12.ResourceBarrierFlags.None;
            if (_sampleDesc.Count > 1)
            {
                barrier.Transition = new SharpDX.Direct3D12.ResourceTransitionBarrier(_backBuffersAA[_frameIndex],
                                                                                      SharpDX.Direct3D12.ResourceStates.ResolveSource,
                                                                                      SharpDX.Direct3D12.ResourceStates.RenderTarget)
                {
                    Subresource = 0
                };
            }
            else
            {
                barrier.Transition = new SharpDX.Direct3D12.ResourceTransitionBarrier(_backBuffers[_frameIndex],
                                                                                      SharpDX.Direct3D12.ResourceStates.Present,
                                                                                      SharpDX.Direct3D12.ResourceStates.RenderTarget)
                {
                    Subresource = 0
                };
            }
            _commands.ResourceBarrier(barrier);

            SharpDX.Direct3D12.CpuDescriptorHandle rtv = _heapRTV.CPUDescriptorHandleForHeapStart;
            rtv.Ptr += _frameIndex * _sizeRTV;

            if (doClearColor)
            {
                SharpDX.Mathematics.Interop.RawColor4 clearColor = new SharpDX.Mathematics.Interop.RawColor4(0.0f, 0.0f, 0.0f, 0.0f);
                _commands.ClearRenderTargetView(rtv, clearColor, 0, null);
            }

            SharpDX.Direct3D12.CpuDescriptorHandle dsv = _heapDSV.CPUDescriptorHandleForHeapStart;
            _commands.ClearDepthStencilView(dsv, SharpDX.Direct3D12.ClearFlags.FlagsStencil, 0.0f, 0, 0, null);
            _commands.SetRenderTargets(1, rtv, dsv);
            _commands.SetViewports(1, _viewport);
        }