2011-11-16 66 views
2

我需要將一些不斷變化的數據傳遞給我的像素着色器。我有一個texture2d,通過紋理參數傳遞給我的像素着色器。在我調用着色器之前,我需要更新紋理中的數據。如何在XNA 4.0中取消設置紋理數據

 emittingPositions.SetData(emittingPositionsBuffer); //Set the data on the texture 
     animationEffect.Parameters["emittersMap"].SetValue(emittingPositions); //Tell the shader about the texture data 
     //go on to do the actual drawing calls to use the pixel shader 

的問題是,當我這樣做,我得到一個例外:

「你可能不叫的SetData上的資源,同時正在積極的GraphicsDevice的設置取消它從設備調用SetData的前「。

如何「從設備中取消設置」?或者我應該在這裏採取不同的方法?

+0

哪行觸發例外呢? –

+1

調用.SetValue –

回答

4

第一紋理設置GraphicsDevice.Textures陣列與索引0

,所以你必須這樣做:

GraphicsDevice.Textures[0] = null; 
+0

的第二行你如何知道你正在設置正確的紋理?如果我通過SetData傳遞多個紋理到圖形設備會怎麼樣 - 我怎麼知道我需要使用哪個索引來取消設置特定紋理? – BrainSlugs83

+0

這真的很奇怪 - 經過進一步的實驗 - 紋理0是所有需要設置爲空的 - 無論您實際需要更新哪種紋理。這是爲什麼? – BrainSlugs83

+1

當然,這取決於您使用的着色器,默認的xna提供的着色器是BasicEffect着色器,並且它只使用寄存器s0中的一個紋理,即第一個紋理。您可以創建自己的着色器並使用其他寄存器(s1,s2,...)來避免碰撞 – Blau