很多人使用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里面通过Apply,DrawIndexed等来调用。
void Mesh::DrawMesh(CModelViewerCamera* gCamera)
{
……
for(int i=0;i<techDesc.Passes;i++)
{
m_pfxMeshTech->GetPassByIndex(i)->Apply(0,m_pContext);
m_pContext->DrawIndexed();
}
……
}
看到有些人问如果只想使用Directx11的DirectCompute这个通用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了。