/// <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); } }
/// <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); }