我的工作簡單的.NET渲染器現在,並繼續推動同石一個月已經:DirectX11影響變量更新 - 何時發生?
我使用效果的框架,通過SlimDX開發商DX11編譯,我一直有與更新EffectVariables煩惱內部呈現循環(我需要在每次DrawIndexed調用後更新矢量值)。代碼如下所示(過濾):
public Vector4 wireframeColor = new Vector4();
public Vector4 gridColor = new Vector4();
wireColorVar = effect.GetVariableByName("wireframeColor").AsVector();
wireColorVar.Set(gridColor);
DrawIndexed(GridDomain);
foreach model in scene
{
wireColorVar.Set(wireframeColor);
DrawIndexed(modelDomain);
}
的.fx文件看起來像:
cbuffer ColorBuffer
{
float4 wireframeColor;
float4 diffuseColor;
};
float4 PVertex_Wire_PShader(PVertex_PInput input) : SV_TARGET
{
return wireframeColor;
}
的問題是,所有的所有的渲染通道應用時,在着色器,他們只處理最後已知的變量值 - 即wireframeColor,並且從來沒有使用gridColor的值。我有這個問題一段時間,所以可以肯定地告訴它,它適用於每種類型的EffectVariables,從緩衝區到ShaderResources(例如UAViews),這真是令人沮喪。效應變量總是傾向於取最後一個被調用的值。 DeviceContext.Flush()沒有提供任何內容,但它確實看起來像某種GPU命令的入侵。
Only source of info for now, and it didn't work
看起來像施加效果通過沖不變量的變化。當我需要使用計算着色器工作時,我不得不手動將資源視圖應用於着色器階段明確放置的變量(通過寄存器索引)。
這是否影響實施問題?這不是不可避免的,我仍然可以使用低級常量緩衝區分配,但是根本沒有意義使用效果。
P.S.哦,並不建議使用diffuseColor字段,或其他方法只是乘以變量計數。我需要在swapChain.Present()調用之間多次更改一個且唯一的變量值。
感謝您的關注。
您是否在您的繪圖代碼中調用了EffectPass.Apply?查看DrawIndexed的代碼會很有用 – catflier