2011-06-02 70 views
0

我試圖理解呈現在DX11如何多線程工作,所以我就開始沒有任何線程,才使得一個延緩的情況下,並嘗試呈現三角形,它遞延上下文不呈現任何


的代碼是在這裏https://gist.github.com/998406 我體改SlimDX MiniTri樣品這樣 - > 化妝推遲與

var deferredContext = new DeviceContext(device); 

背景下未來我綁定着色器,並使其

deferredContext.ClearState(); 
deferredContext.InputAssembler.InputLayout = layout; 
deferredContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; 
deferredContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices2, 32, 0)); 

for (int i = 0; i < technique.Description.PassCount; ++i){ 
           pass.Apply(deferredContext); 
           deferredContext.Draw(3, 0);} 

然後設法得到命令列表並執行

CommandList dc_cl = deferredContext.FinishCommandList(false); 
device.ImmediateContext.ExecuteCommandList(dc_cl, true); 

什麼,我希望看到的是2個三角形 但只渲染immdeiate範圍內,但如果我清晰的屏幕在遞延背景 像deferredContext.ClearRenderTargetView(renderView,Color.Tomato); 現在我的屏幕在色彩番茄,但仍然沒有三角形


還當我加入這個遞延方面PIX停止工作,女巫意味着我做錯了什麼可怕的事情

回答

1

由於延遲的上下文與原始上下文不同,因此除了修復命令列表參數外,還需要爲延遲設備重新設置渲染目標。

這解釋了爲什麼您的設備被清除但沒有渲染幾何圖形。

0

不知道,如果你解決了這個問題但是,如果您擺脫了ClearState()調用,然後將FinishCommandList和ExecuteCommandList的布爾參數都設置爲true,則會在屏幕上看到兩個三角形。

我不完全確定這是爲什麼;我不太熟悉D3D11的多線程部分。您可能需要在本地論壇上詢問有關如何工作的更多信息。