DirectX 11应用程序中三角形无法渲染的问题求助
DirectX 11 三角形无法显示的问题修复
核心问题:顶点着色器编译未做错误检查
代码中编译顶点着色器的语句没有接收HRESULT返回值,也未通过CHECK_HR_ERROR宏校验结果,导致着色器编译失败时无法触发错误提示,后续渲染流程自然无法正常执行。
修复步骤
1. 修复顶点着色器编译的错误检查逻辑
将原顶点着色器编译代码:
D3DCompile(vertexShaderSource.c_str(), vertexShaderSource.length(), nullptr, nullptr, nullptr, "main", "vs_4_0", 0, 0, &vertexShaderBlob, nullptr); CHECK_HR_ERROR(L"failed to compile the vertex shader!");
修改为:
hr = D3DCompile(vertexShaderSource.c_str(), vertexShaderSource.length(), nullptr, nullptr, nullptr, "main", "vs_4_0", 0, 0, &vertexShaderBlob, nullptr); CHECK_HR_ERROR(L"failed to compile the vertex shader!");
这样才能正确捕获着色器编译失败的错误。
2. 可选补充:添加深度缓冲区(解决部分GPU兼容性问题)
若修复后仍无法显示,可添加深度模板视图——部分GPU要求必须绑定深度缓冲区才能正常渲染:
// 在创建渲染目标视图后插入以下代码 D3D11_TEXTURE2D_DESC depthStencilDesc = {}; depthStencilDesc.Width = windowWidth; depthStencilDesc.Height = windowHeight; depthStencilDesc.MipLevels = 1; depthStencilDesc.ArraySize = 1; depthStencilDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; depthStencilDesc.SampleDesc.Count = 1; depthStencilDesc.SampleDesc.Quality = 0; depthStencilDesc.Usage = D3D11_USAGE_DEFAULT; depthStencilDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; ID3D11Texture2D* depthStencilBuffer = nullptr; hr = device->CreateTexture2D(&depthStencilDesc, nullptr, &depthStencilBuffer); CHECK_HR_ERROR(L"failed to create depth stencil buffer!"); ID3D11DepthStencilView* depthStencilView = nullptr; hr = device->CreateDepthStencilView(depthStencilBuffer, nullptr, &depthStencilView); CHECK_HR_ERROR(L"failed to create depth stencil view!"); depthStencilBuffer->Release(); // 更新渲染目标绑定,关联深度模板视图 deviceContext->OMSetRenderTargets(1, &renderTargetView, depthStencilView);
同时在渲染循环中添加深度缓冲区清除逻辑:
// 在ClearRenderTargetView后添加 deviceContext->ClearDepthStencilView(depthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0);
最后在清理部分记得释放depthStencilView资源。
3. 验证顶点数据与输入布局
你的顶点数据结构VertexType和输入布局inputLayoutDesc完全匹配,POSITION语义对应XMFLOAT4,格式DXGI_FORMAT_R32G32B32A32_FLOAT正确,这部分无需修改。
内容的提问来源于stack exchange,提问作者ParhamTny
相关产品推荐
相关产品推荐

