现在的位置: 首页 > 综合 > 正文

Directx11_使用Effect框架包装ComputeShader

2019年04月15日 ⁄ 综合 ⁄ 共 813字 ⁄ 字号 评论关闭

    很多人使用Effect框架基本针对渲染功能,典型如:

technique11 meshTech

{

pass p0

{

SetVertexShader(CompileShader( vs_4_0,VS_DRAW() ) );

SetGeometryShader(NULL);

SetPixelShader(CompileShader( ps_4_0,PS_DRAW() ) );

SetRasterizerState(rsSolid);

SetDepthStencilState(EnableDepthWrite,0);

}

}

    在Directx里面通过ApplyDrawIndexed等来调用。

void Mesh::DrawMesh(CModelViewerCamera* gCamera)

{

……

for(int i=0;i<techDesc.Passes;i++)

{

        m_pfxMeshTech->GetPassByIndex(i)->Apply(0,m_pContext);

         m_pContext->DrawIndexed();

     }

……

}

    看到有些人问如果只想使用Directx11DirectCompute这个通用GPU计算接口,而与渲染无关,可以用Effect框架吗?我自己测试了下后发现答案是可以的。只是有稍微不同。

    先看HLSL的代码。

technique11 MtxTransposeTech

{

pass p0

{

  SetComputeShader(CompileShader( cs_5_0,MatrixTranspose() ) );

}

}

    然后在Directx中调用它。

m_pfxMtxTransTech->GetPassByIndex(0)->Apply(0,m_pContext);

 m_pContext->Dispatch(SIZEX,SIZEY,1);

    就ok了。

抱歉!评论已关闭.