Graphics DirectX 11:启用深度缓冲区视图隐藏所有几何图形

Graphics DirectX 11:启用深度缓冲区视图隐藏所有几何图形,graphics,3d,directx,direct3d,Graphics,3d,Directx,Direct3d,我正在添加对dx11的支持,但遇到了一些问题。它在没有深度缓冲区视图的情况下渲染得很好,但是当我附加它时,我的三角形被隐藏,我只看到一个空白屏幕。在调试器中,三角形的渲染深度为0.5。它不应该被淘汰。但它在管道中是可见的。视口最小/最大深度为0/1,深度已附着并清除。我不知道为什么我只有一个空白的屏幕 device->CreateRenderTargetView(pBackBuffer、NULL和backbuffer); pBackBuffer->Release(); 无符号整数宽度、高度;

我正在添加对dx11的支持,但遇到了一些问题。它在没有深度缓冲区视图的情况下渲染得很好,但是当我附加它时,我的三角形被隐藏,我只看到一个空白屏幕。在调试器中,三角形的渲染深度为0.5。它不应该被淘汰。但它在管道中是可见的。视口最小/最大深度为0/1,深度已附着并清除。我不知道为什么我只有一个空白的屏幕

device->CreateRenderTargetView(pBackBuffer、NULL和backbuffer);
pBackBuffer->Release();
无符号整数宽度、高度;
窗口->获取窗口大小(宽度、高度);
D3D11_纹理2d_描述深度_模板描述;
深度模板描述宽度=宽度;
深度模板描述高度=高度;
深度模板描述MIP级别=1;
深度模板描述阵列尺寸=1;
深度模板描述格式=DXGI格式D24表格S8单元;
深度模板描述样本描述计数=1;
深度模板描述样本描述质量=0;
深度\u模具\u描述用法=D3D11\u用法\u默认值;
深度模板描述BindFlags=D3D11绑定深度模板;
深度模板描述CPUAccessFlags=0;
深度模具描述MiscFlags=0;
//创建深度/模具视图
如果(设备->创建纹理2D(&depth\u stencil\u desc,NULL,&depth\u stencil\u buffer)<0)
抛出std::runtime_错误(“DirectX:无法创建Texture2D!”);
如果(设备->创建深度模具视图(深度模具缓冲区、空值和深度模具视图)<0)
抛出std::runtime_错误(“DirectX:无法创建DepthStencilView!”);
//将渲染目标设置为后缓冲区
设备>上下文>OMSEtranderTargets(1,&Backuffer>深度>模具>视图);
D3D11_视口;
ZeroMemory(&视口,sizeof(D3D11_视口));
viewport.TopLeftX=0;
viewport.TopLeftY=0;
视窗宽度=800;
高度=600;
viewport.MinDepth=0.0f;
viewport.MaxDepth=1.0f;
设备上下文->RSSETViewport(1和视口);
//环路{
//绑定着色器
float col[4]={0.0f,0.2f,0.4f,1.0f};
设备上下文->ClearRenderTargetView(backbuffer,col);
设备上下文->清除深度模板视图(深度模板视图,D3D11清除深度,D3D11清除模板,1.0f,0);
//绑定顶点缓冲区、常量缓冲区、纹理
设备→上下文→iSetPrimitiveTopology(D3D10→PrimitiveTopology→三角形列表);
设备\u上下文\u->绘制(计数、基数);
交换链->存在(0,0);
//端环
编辑:

我已经包含了我的深度模具创建代码,这可能会有所帮助。但看起来它们可能有一些参数差异,您可以尝试。只有在需要读回深度模具时,才需要着色器资源绑定标志。此代码在C#和Sharpdx中,仅供参考

            D3D11.Texture2DDescription desc = new D3D11.Texture2DDescription()
            {
                Format = DXGI.Format.R32_Typeless,
                ArraySize = 1,
                MipLevels = 0,
                Width = _textureWidth,
                Height = _textureHeight,
                Usage = D3D11.ResourceUsage.Default,
                SampleDescription = new DXGI.SampleDescription(1, 0),
                BindFlags = D3D11.BindFlags.DepthStencil | D3D11.BindFlags.ShaderResource,
                CpuAccessFlags = D3D11.CpuAccessFlags.None,
                OptionFlags = D3D11.ResourceOptionFlags.None
            };
            D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice_, desc);

            // Depth Buffer

            D3D11.DepthStencilViewDescription stencilBufferViewDesc = new D3D11.DepthStencilViewDescription()
            {
                Dimension = D3D11.DepthStencilViewDimension.Texture2D,
                Format = DXGI.Format.D32_Float,
                Flags = D3D11.DepthStencilViewFlags.None,

                Texture2D = new D3D11.DepthStencilViewDescription.Texture2DResource() { MipSlice = 0 },
            };

            _depthStencilView = new D3D11.DepthStencilView(d3dDevice_, depthBuffer, stencilBufferViewDesc)
            {
                DebugName = "Shadow Map Depth Buffer Stencil View"
            };
            D3D11.Texture2DDescription desc = new D3D11.Texture2DDescription()
            {
                Format = DXGI.Format.R32_Typeless,
                ArraySize = 1,
                MipLevels = 0,
                Width = _textureWidth,
                Height = _textureHeight,
                Usage = D3D11.ResourceUsage.Default,
                SampleDescription = new DXGI.SampleDescription(1, 0),
                BindFlags = D3D11.BindFlags.DepthStencil | D3D11.BindFlags.ShaderResource,
                CpuAccessFlags = D3D11.CpuAccessFlags.None,
                OptionFlags = D3D11.ResourceOptionFlags.None
            };
            D3D11.Texture2D depthBuffer = new D3D11.Texture2D(d3dDevice_, desc);

            // Depth Buffer

            D3D11.DepthStencilViewDescription stencilBufferViewDesc = new D3D11.DepthStencilViewDescription()
            {
                Dimension = D3D11.DepthStencilViewDimension.Texture2D,
                Format = DXGI.Format.D32_Float,
                Flags = D3D11.DepthStencilViewFlags.None,

                Texture2D = new D3D11.DepthStencilViewDescription.Texture2DResource() { MipSlice = 0 },
            };

            _depthStencilView = new D3D11.DepthStencilView(d3dDevice_, depthBuffer, stencilBufferViewDesc)
            {
                DebugName = "Shadow Map Depth Buffer Stencil View"
            };