引言
这个寒假学DirectX11的时候用的书是《Introduction to 3D Game Programming with DirectX 11》,里面关于Shader的部分全都是用的Effects框架。用起来当然没什么问题,但我还是想把相关问题搞清楚,也就是这个框架是如何把HLSL中的各种Shader Object与应用程序中的接口联系起来的。比如:
effect->GetVariableByName("WVP")->AsMatrix()->SetMatrix((float*)&WVP);其中effect是一个ID3DX11Effect*。假设对应的HLSL中的代码是
cbuffer cbPerObject
{ float4x4 worldMat; float4x4 WVP;
};那么这行C++代码意思就是设置Shader中WVP的值。类似的,通过Effects框架可以方便地设置Shader Resource(Buffer、Texture等)、Sampler State等。如果不使用Effects框架,又该如何设置这些变量呢?
