如何使用最新的 Effect Framework 编译 shader?
How to compile shader with newest Effect Framework?
我通常使用已弃用的 Microsoft DirectX SDK(2010 年 6 月)。我在 github 下载了 vs2015,其中包括最新的 directx sdk 和最新版本的 FX11。现在不知道怎么编译shader
在我可以像这样编译着色器之前
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();
但是现在怎么编译shader呢?使用 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();
我通常使用已弃用的 Microsoft DirectX SDK(2010 年 6 月)。我在 github 下载了 vs2015,其中包括最新的 directx sdk 和最新版本的 FX11。现在不知道怎么编译shader
在我可以像这样编译着色器之前
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();
但是现在怎么编译shader呢?使用 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();