2013-12-10 45 views
0

我的工作簡單的.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()調用之間多次更改一個且唯一的變量值。

感謝您的關注。

+0

您是否在您的繪圖代碼中調用了EffectPass.Apply?查看DrawIndexed的代碼會很有用 – catflier

回答

0

切換到原生DX11渲染機制,微軟的影響似乎遵循奇怪的邏輯,同時將GPU的命令。