SlimDX 11深度缓冲区问题

| 我在SlimDX March SDK中遇到问题(我相信对于DXSDK11 June 2010)。问题在于,每当我将深度视图附加到输出合并状态时,屏幕上都不会得到任何输出。我已经将我的代码与DX11示例进行了比较,这似乎是正确的。我已经尝试了用于深度测试的各种标志和格式(包括始终通过等),但是似乎没有任何效果。如果有人发现错误,我将不胜感激。这是代码。步骤如下: 初始化后台缓冲区:
        D3DDevice device;
    SwapChain swapChain;

    /// Create the swap chain
    SwapChainDescription desc = new SwapChainDescription()
    {
        BufferCount = 1,
        ModeDescription = new ModeDescription 
        { 
            Width = ContextSettings.Width, 
            Height = ContextSettings.Height, 
            RefreshRate = new SlimDX.Rational(ContextSettings.RefreshRate, 1), 
            Format = ContextSettings.BufferFormat,
        },
        IsWindowed = !ContextSettings.FullScreen,
        OutputHandle = WindowHandle,
        SampleDescription = new SampleDescription(1, 0),
        SwapEffect = SwapEffect.Discard,
        Usage = Usage.RenderTargetOutput,
    };

    FeatureLevel[] featureLevels = new FeatureLevel[] { FeatureLevel.Level_11_0, FeatureLevel.Level_10_1 };
    DriverType driverType = DriverType.Hardware;

    D3DDevice.CreateWithSwapChain(driverType, DeviceCreationFlags.Debug, featureLevels, desc, out device, out swapChain);

    Device = device;
    SwapChain = swapChain;

    /// Setup window association
    Factory factory = swapChain.GetParent<Factory>();
    factory.SetWindowAssociation(WindowHandle, WindowAssociationFlags.IgnoreAll);

    /// Setup back buffers and render target views
    RenderBuffer = DXTexture2D.FromSwapChain<DXTexture2D>(swapChain, 0);
    RenderView = new RenderTargetView(Device, RenderBuffer);
然后初始化深度缓冲区:
        Format depthFormat = Format.D32_Float;
    Texture2DDescription depthBufferDesc = new Texture2DDescription 
    {
        ArraySize = 1,
        BindFlags = BindFlags.DepthStencil,
        CpuAccessFlags = CpuAccessFlags.None,
        Format = depthFormat,
        Height = width,
        Width = height,
        MipLevels = 1,
        OptionFlags = ResourceOptionFlags.None,
        SampleDescription = new SampleDescription( 1, 0 ),
        Usage = ResourceUsage.Default
    };

    DepthBuffer = new DXTexture2D(Device, depthBufferDesc);

    DepthStencilViewDescription dsViewDesc = new DepthStencilViewDescription
    {
        ArraySize = 0,
        Format = depthFormat,
        Dimension = DepthStencilViewDimension.Texture2D,
        MipSlice = 0,
        Flags = 0,
        FirstArraySlice = 0
    };

    DepthView = new DepthStencilView(Device, DepthBuffer, dsViewDesc);

    DepthStencilStateDescription dsStateDesc = new DepthStencilStateDescription()
    {
        IsDepthEnabled = true,
        IsStencilEnabled = false,
        DepthWriteMask = DepthWriteMask.All,
        DepthComparison = Comparison.Less,
    };

    DepthState = DepthStencilState.FromDescription(Device, dsStateDesc);
设置渲染目标:
    DeviceContext.OutputMerger.DepthStencilState = DepthState;
    DeviceContext.OutputMerger.SetTargets(DepthView, RenderView);
    DeviceContext.Rasterizer.SetViewports(new Viewport(0, 0, ContextSettings.Width, ContextSettings.Height, 0.0f, 1.0f));

    Clear();
一旦我从OutputMerger.SetTargets中删除DepthView,我就开始在屏幕上看到图像(当然没有进行深度测试),反之亦然。     
已邀请:
        事实证明,在depthBufferDesc中,我将width传递给Height变量,将height传递给Width。这是在创建两个具有不同尺寸的渲染目标,并将其分解。     

要回复问题请先登录注册