如何使用最新的Effect Framework编译着色器?

时间:2016-05-28 05:25:01

标签: graphics directx directx-11 direct3d direct3d11

我通常使用不推荐使用的 Microsoft DirectX SDK(2010年6月)。我下载vs2015,其中包括最新的directx sdk和最新版本的FX11在github上。我现在不知道如何编译着色器。

  • 之前我可以像这样编译着色器

    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?请提供示例代码,谢谢。

1 个答案:

答案 0 :(得分:2)

我知道,这很容易,只有一个函数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();