我通常使用已弃用的Microsoft DirectX SDK(2010 年 6 月)。我在 github 上下载了 vs2015,其中包括最新的 directx sdk 和最新版本的 FX11。我现在不知道如何编译着色器。
-
在我像这样编译着色器之前
ID3D10Blob *compiledShader = 0; ID3D10Blob *compilationMsgs = 0; result = D3DX11CompileFromFile("SolidColor.fx", 0, 0, 0, "fx_5_0", shaderFlags, 0, 0, &compiledShader, &compilationMsgs, 0); if (compilationMsgs != 0) { MessageBox(0, (char*)compilationMsgs->GetBufferPointer(), 0, 0); compilationMsgs->Release(); compilationMsgs = 0; } if (FAILED(result)) { MessageBox(0, "error", 0, 0); return false; } result = D3DX11CreateEffectFromMemory(compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), 0, m_pd3dDevice, &m_pFx); compiledShader->Release(); if (FAILED(result)) { MessageBox(0, "error", 0, 0); return false; } m_pTechnique = m_pFx->GetTechniqueByName("ColorTech"); m_pFxWorldViewProj = m_pFx->GetVariableByName("gWorldViewProj")->AsMatrix();
-
但是现在如何编译着色器?使用D3DX11CompileEffectFromFile还是D3DX11CreateEffectFromFile?请给出示例代码,谢谢。
我知道
,这很容易,只有一个函数D3DX11CompileEffectFromFile
就可以了。
//compile shader
ID3DBlob* errorBlob;
DWORD shaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
#if defined _DEBUG || defined DEBUG
shaderFlags = D3DCOMPILE_DEBUG;
#endif
hr = D3DX11CompileEffectFromFile(L"color.fx", nullptr, D3D_COMPILE_STANDARD_FILE_INCLUDE, shaderFlags,
0, m_pd3dDevice, &m_pFx, &errorBlob);
if (FAILED(hr))
{
MessageBox(nullptr, (LPCWSTR)errorBlob->GetBufferPointer(), L"error", MB_OK);
return hr;
}
m_pTechnique = m_pFx->GetTechniqueByName("ColorTech");
m_pFxWorldViewProj = m_pFx->GetVariableByName("gWorldViewProj")->AsMatrix();