引言
這個寒假學DirectX11的時候用的書是《Introduction to 3D Game Programming with DirectX 11》,里面關(guān)于Shader的部分全都是用的Effects框架。用起來當然沒什么問題,但我還是想把相關(guān)問題搞清楚,也就是這個框架是如何把HLSL中的各種Shader Object與應用程序中的接口聯(lián)系起來的。比如:
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框架,又該如何設置這些變量呢?