引言

這個(gè)寒假學(xué)DirectX11的時(shí)候用的書(shū)是《Introduction to 3D Game Programming with DirectX 11》,里面關(guān)于Shader的部分全都是用的Effects框架。用起來(lái)當(dāng)然沒(méi)什么問(wèn)題,但我還是想把相關(guān)問(wèn)題搞清楚,也就是這個(gè)框架是如何把HLSL中的各種Shader Object與應(yīng)用程序中的接口聯(lián)系起來(lái)的。比如:

effect->GetVariableByName("WVP")->AsMatrix()->SetMatrix((float*)&WVP);

其中effect是一個(gè)ID3DX11Effect*。假設(shè)對(duì)應(yīng)的HLSL中的代碼是

cbuffer cbPerObject
{    float4x4 worldMat;    float4x4 WVP;
};

那么這行C++代碼意思就是設(shè)置Shader中WVP的值。類(lèi)似的,通過(guò)Effects框架可以方便地設(shè)置Shader Resource(Buffer、Texture等)、Sampler State等。如果不使用Effects框架,又該如何設(shè)置這些變量呢?

ID3D11DeviceC