C# SlimDX,SwapChain.ResizeBuffers(…)错误?

C# SlimDX,SwapChain.ResizeBuffers(…)错误?,c#,directx,slimdx,directx-10,C#,Directx,Slimdx,Directx 10,我对方法“SwapChain.ResizeBuffers(…)”有一个问题,每当我调用它时都会出现错误。。。基本上,我想做的是:我希望能够动态更改渲染分辨率,所以当我更改了_RenderingWidth和_RenderingHeight的值时,我调用这个方法(如下所示) protected override void UpdateResolution() { if (_RenderTargetView != null) _RenderTargetView.Disp

我对方法“SwapChain.ResizeBuffers(…)”有一个问题,每当我调用它时都会出现错误。。。基本上,我想做的是:我希望能够动态更改渲染分辨率,所以当我更改了_RenderingWidth和_RenderingHeight的值时,我调用这个方法(如下所示)

    protected override void UpdateResolution()
    {
        if (_RenderTargetView != null) _RenderTargetView.Dispose();
        if (_BackBuffer != null) _BackBuffer.Dispose();

        _Device.OutputMerger.SetTargets((RenderTargetView) null);

        _SwapChain.ResizeBuffers(_SwapChain.Description.BufferCount, _RenderingWidth, _RenderingHeight, _SwapChain.Description.ModeDescription.Format, _SwapChain.Description.Flags);

        _BackBuffer = Texture2D.FromSwapChain<Texture2D>(_SwapChain, 0);
        _RenderTargetView = new RenderTargetView(_Device, _BackBuffer);

        _Device.OutputMerger.SetTargets(_RenderTargetView);
    }
我的声明:

    protected SlimDX.Direct3D10_1.Device1 _Device = null;
    protected SwapChain _SwapChain = null;

    protected Texture2D _BackBuffer = null;
    protected RenderTargetView _RenderTargetView = null;
[编辑] 我想出来了:

    var description = _SwapChain.Description;

    if (_RenderTargetView != null) _RenderTargetView.Dispose();
    if (_BackBuffer != null) _BackBuffer.Dispose();

    _SwapChain.Dispose();

    description.ModeDescription = new ModeDescription(_RenderingWidth, _RenderingHeight, new Rational(160, 1), Format.B8G8R8A8_UNorm);
    _SwapChain = new SwapChain(_Factory_DXGI, _Device, description);

    _BackBuffer = Texture2D.FromSwapChain<Texture2D>(_SwapChain, 0);
    _RenderTargetView = new RenderTargetView(_Device, _BackBuffer);

    _Device.OutputMerger.SetTargets(_RenderTargetView);
var description=\u SwapChain.description;
如果(_RenderTargetView!=null)_RenderTargetView.Dispose();
如果(_BackBuffer!=null)_BackBuffer.Dispose();
_SwapChain.Dispose();
description.ModeDescription=newmodedescription(_RenderingWidth,_RenderingHeight,new Rational(160,1),Format.B8G8R8A8_UNorm);
_SwapChain=新的SwapChain(_工厂_DXGI,_设备,说明);
_BackBuffer=来自SwapChain的纹理2d(_SwapChain,0);
_RenderTargetView=新的RenderTargetView(_设备,_Backuffer);
_Device.outputMerge.SetTargets(_RenderTargetView);

重新开始一切。。。不知道为什么我以前没想到这个

你不需要重新控制交换链。看见
    var description = _SwapChain.Description;

    if (_RenderTargetView != null) _RenderTargetView.Dispose();
    if (_BackBuffer != null) _BackBuffer.Dispose();

    _SwapChain.Dispose();

    description.ModeDescription = new ModeDescription(_RenderingWidth, _RenderingHeight, new Rational(160, 1), Format.B8G8R8A8_UNorm);
    _SwapChain = new SwapChain(_Factory_DXGI, _Device, description);

    _BackBuffer = Texture2D.FromSwapChain<Texture2D>(_SwapChain, 0);
    _RenderTargetView = new RenderTargetView(_Device, _BackBuffer);

    _Device.OutputMerger.SetTargets(_RenderTargetView);