sharpdx 平面模式下往隐藏缓冲区画线,不在前台显示
时间: 2024-02-16 15:30:33 浏览: 25
在 SharpDX 中,要在平面模式下向隐藏缓冲区绘制线条,可以使用以下代码:
```csharp
// 创建设备和交换链
var description = new SwapChainDescription()
{
BufferCount = 2,
ModeDescription = new ModeDescription(Width, Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
IsWindowed = true,
OutputHandle = Handle,
SampleDescription = new SampleDescription(1, 0),
SwapEffect = SwapEffect.Discard,
Usage = Usage.RenderTargetOutput
};
Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, description, out var device, out var swapChain);
// 获取隐藏缓冲区
var backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0);
var hiddenBuffer = new Texture2D(device, new Texture2DDescription()
{
Format = Format.R8G8B8A8_UNorm,
ArraySize = 1,
MipLevels = 1,
Width = Width,
Height = Height,
SampleDescription = new SampleDescription(1, 0),
Usage = ResourceUsage.Default,
BindFlags = BindFlags.RenderTarget,
CpuAccessFlags = CpuAccessFlags.None,
OptionFlags = ResourceOptionFlags.None
});
// 创建渲染目标视图
RenderTargetView hiddenView = new RenderTargetView(device, hiddenBuffer);
// 设置渲染目标视图
device.ImmediateContext.OutputMerger.SetRenderTargets(hiddenView);
// 渲染线条到隐藏缓冲区
device.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.LineList;
device.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertexBuffer, Utilities.SizeOf<Vector2>(), 0));
device.ImmediateContext.Draw(vertexCount, 0);
// 将渲染结果显示在前台
swapChain.Present(0, PresentFlags.None);
```
注意,以上代码中的 `vertexBuffer` 和 `vertexCount` 需要替换成你自己的顶点缓冲区和顶点数量。此外,你还需要在正式渲染前将渲染目标视图设置回前台缓冲区。