Directx 11 Z 缓冲区不渲染和闪烁
Directx 11 Z-Buffer not rendering and flickering
我正在尝试使用 DirectX 11 设置 Z 缓冲区,但它没有按预期工作。如果没有 Z-Buffer,它会在较近的对象之上显示进一步的对象,正如您所期望的那样。使用缓冲区,它会显示一个空白屏幕,然后在移动时闪烁位,如此视频所示。
这是我的 Z 缓冲区初始化。
// Create a Z buffer texture
D3D11_TEXTURE2D_DESC tex2dDesc;
ZeroMemory(&tex2dDesc, sizeof(tex2dDesc));
tex2dDesc.Width = width;
tex2dDesc.Height = height;
tex2dDesc.ArraySize = 1;
tex2dDesc.MipLevels = 1;
tex2dDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
tex2dDesc.SampleDesc.Count = sd.SampleDesc.Count;
tex2dDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
tex2dDesc.Usage = D3D11_USAGE_DEFAULT;
ID3D11Texture2D *pZBufferTexture;
hr = g_pD3DDevice->CreateTexture2D(&tex2dDesc, NULL, &pZBufferTexture);
if(FAILED(hr)) return hr;
// Create the Z buffer
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
ZeroMemory(&dsvDesc, sizeof(dsvDesc));
dsvDesc.Format = tex2dDesc.Format;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
g_pD3DDevice->CreateDepthStencilView(pZBufferTexture, &dsvDesc, &g_pZBuffer);
pZBufferTexture->Release();
// Set the render target view
g_pImmediateContext->OMSetRenderTargets(1, &g_pBackBufferRTView, g_pZBuffer);
下面是在渲染中运行的内容。
g_pImmediateContext->ClearRenderTargetView(g_pBackBufferRTView, g_clear_colour);
g_pImmediateContext->ClearDepthStencilView
(g_pZBuffer, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
当涉及到 DirectX 11 时,我仍然是初学者,所以任何帮助将不胜感激。如果需要更多代码,我可以提供。
应在创建设备时添加 D3D11_CREATE_DEVICE_DEBUG
标志。如果帧中出现问题,您将在输出日志中找到有关原因的详细线索。
此外,如果不使用模具,请不要创建模具缓冲区。现代 GPU 无论如何都不会将信息存储在深度缓冲区中,D32 格式不会白白浪费 8 位精度。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- 处理闪烁窗口事件
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- GDI双缓冲区黑色闪烁
- Directx 11 Z 缓冲区不渲染和闪烁