引言
這個(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è)置這些變量呢?