阅读目录
安装好并进入项目,在调试之前需要将项目配置成Debug模式
然后观察着色器的编译选项,如果使用的是HLSL编译器,则要重点关注Debug模式下所有着色器是否都禁用了优化,并启用了调试信息。
首先对其中的一个着色器右键-属性

然后在Debug配置下,选择HLSL编译器-所有选项,禁用优化并启用调试信息

如果使用的是D3DCompiler,在代码层(运行时)编译着色器,则需要在Debug模式下给
D3DComplieFromFile函数添加D3DCOMPILE_DEBUG和D3DCOMPILE_SKIP_OPTIMIZATION的Flag以开启着色器调试并关闭优化:HRESULT CreateShaderFromFile(const WCHAR * objFileNameInOut, const WCHAR * hlslFileName, LPCSTR entryPoint, LPCSTR shaderModel, ID3DBlob ** ppBlobOut) { HRESULT hr = S_OK; // 寻找是否有已经编译好的顶点着色器 if (objFileNameInOut && filesystem::exists(objFileNameInOut)) { HR(D3DReadFileToBlob(objFileNameInOut, ppBlobOut)); } else { DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS; #ifdef _DEBUG // 设置 D3DCOMPILE_DEBUG 标志用于获取着色器调试信息。该标志可以提升调试体验, // 但仍然允许着色器进行优化操作 dwShaderFlags |= D3DCOMPILE_DEBUG; // 在Debug环境下禁用优化以避免出现一些不合理的情况 dwShaderFlags |= D3DCOMPILE_SKIP_OPTIMIZATION; #endif ComPtr<ID3DBlob> errorBlob = nullptr; hr = D3DCompileFromFile(hlslFileName, nullptr, D3D_COMPILE_STANDARD_FILE_INCLUDE, entryPoint, shaderModel, dwShaderFlags, 0, ppBlobOut, errorBlob.GetAddressOf()); if (FAILED(hr)) { if (errorBlob != nullptr) { OutputDebugStringA(reinterpret_cast<const char*>(errorBlob->GetBufferPointer())); } return hr; } // 若指定了输出文件名,则将着色器二进制信息输出 if (objFileNameInOut) { HR(D3DWriteBlobToFile(*ppBlobOut, objFileNameInOut, FALSE)); } } return hr; }
青岛软件培训
可能你正在寻找一家靠谱的IT培训机构,
渴望突破职业瓶颈,
找一份得体的工作。
恰巧万码学堂正在寻找像你这样不甘平凡的追光者!
我们拒绝纸上谈兵,直接参与真实开发流程!
现在行动,未来可期
立即拨打0532-85025005,预约免费职业规划咨询
前20名咨询者赠送《2025高薪技术岗位白皮书》!
你不是在报名课程,而是在投资五年后的自己!



