如何使用最新的效果框架编译着色器



我通常使用已弃用的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();

相关内容

  • 没有找到相关文章