/// <summary>
 /// Clear the render target
 /// </summary>
 /// <param name="rtv">The render target to clear</param>
 /// <param name="color">The RGBA color to clear it to</param>
 /// <param name="rect">The rectangles representing the sections to clear</param>
 public void ClearRenderTarget(CpuHandle rtv, RgbaColor color, ReadOnlySpan <Rectangle> rect)
 {
     fixed(Rectangle *p = rect)
     {
         _list.Get()->ClearRenderTargetView(rtv.Value, &color.R, (uint)rect.Length, (RECT *)p);
     }
 }
Exemple #2
0
        /// <summary>
        /// Creates a new <see cref="Sampler"/>
        /// </summary>
        public unsafe Sampler(
            TextureAddressMode texU,
            TextureAddressMode texW,
            TextureAddressMode texV,
            SamplerFilterType filter,
            float mipLODBias,
            uint maxAnisotropy,
            SampleComparisonFunc comparisonFunc,
            RgbaColor borderColor,
            float minLOD,
            float maxLOD
            )
        {
            Debug.Assert(maxAnisotropy <= 16);

            _desc = new D3D12_SAMPLER_DESC
            {
                AddressU       = (D3D12_TEXTURE_ADDRESS_MODE)texU,
                AddressW       = (D3D12_TEXTURE_ADDRESS_MODE)texW,
                AddressV       = (D3D12_TEXTURE_ADDRESS_MODE)texV,
                Filter         = (D3D12_FILTER)filter,
                MipLODBias     = mipLODBias,
                MaxAnisotropy  = maxAnisotropy,
                ComparisonFunc = (D3D12_COMPARISON_FUNC)comparisonFunc,
                MinLOD         = minLOD,
                MaxLOD         = maxLOD,
            };
            Unsafe.As <float, RgbaColor>(ref _desc.BorderColor[0]) = borderColor;
        }
        private static void TranslateStaticSamplers(ReadOnlyMemory <StaticSampler> staticSamplers, D3D12_STATIC_SAMPLER_DESC[] samplers)
        {
            var span = staticSamplers.Span;

            for (var i = 0; i < span.Length; i++)
            {
                var staticSampler = span[i];
                var desc          = staticSampler.Sampler.GetDesc();

                D3D12_STATIC_BORDER_COLOR staticBorderColor;
                var borderColor = RgbaColor.FromPointer(desc.BorderColor);

                if (borderColor == StaticSampler.OpaqueBlack)
                {
                    staticBorderColor = D3D12_STATIC_BORDER_COLOR.D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK;
                }
                else if (borderColor == StaticSampler.OpaqueWhite)
                {
                    staticBorderColor = D3D12_STATIC_BORDER_COLOR.D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE;
                }
                else if (borderColor == StaticSampler.TransparentBlack)
                {
                    staticBorderColor = D3D12_STATIC_BORDER_COLOR.D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK;
                }
                else
                {
                    ThrowHelper.ThrowArgumentException("Static sampler must have opaque black, opaque white, or transparent black border color");
                    staticBorderColor = default;
                }

                var sampler = new D3D12_STATIC_SAMPLER_DESC
                {
                    AddressU         = desc.AddressU,
                    AddressW         = desc.AddressW,
                    AddressV         = desc.AddressV,
                    ComparisonFunc   = desc.ComparisonFunc,
                    BorderColor      = staticBorderColor,
                    Filter           = desc.Filter,
                    MaxAnisotropy    = desc.MaxAnisotropy,
                    MaxLOD           = desc.MaxLOD,
                    MinLOD           = desc.MinLOD,
                    MipLODBias       = desc.MipLODBias,
                    RegisterSpace    = staticSampler.RegisterSpace,
                    ShaderRegister   = staticSampler.ShaderRegister,
                    ShaderVisibility = (D3D12_SHADER_VISIBILITY)staticSampler.Visibility
                };

                samplers[i] = sampler;
            }
        }
 /// <summary>
 /// Clear the render target
 /// </summary>
 /// <param name="rtv">The render target to clear</param>
 /// <param name="color">The RGBA color to clear it to</param>
 /// <param name="rect">The rectangle representing the section to clear</param>
 public void ClearRenderTarget(CpuHandle rtv, RgbaColor color, Rectangle rect)
 {
     _list.Get()->ClearRenderTargetView(rtv.Value, &color.R, 1, (RECT *)&rect);
 }