0
我有一些代碼,是這樣的:重用渲染目標「溢出油漆」?
GraphicsDevice.SetRenderTarget(0, myRenderTarget);
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);
myEffect.Begin();
myEffectCurrentTechnique.Passes[0].Begin();
spriteBatch.Draw(aRegularTexture, Vector2.Zero, Color.White);
spriteBatch.End();
myEffect.CurrentTechnique.Passes[0].End();
myEffect.End();
GraphicsDevice.SetRenderTarget(0, backBuffer);
Texture2D bloomTexture = myRenderTarget.GetTexture();
...
GraphicsDevice.SetRenderTarget(0, myRenderTarget);
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.Draw(aRegularTexture, Vector2.Zero, Color.White);
spriteBatch.End();
GraphicsDevice.SetRenderTarget(0, backBuffer);
aRegularTexture = myRenderTarget.GetTexture();
//SHOULD be doing nothing, since I'm just rendering said texture into a render target and pulling it back out
(注:這是下調到最小再現代碼,不完全是我實際使用)
如果我在渲染之前aRegularTexture屏幕第二塊代碼,它看起來很好,沒有任何變化。但是如果我在第二塊代碼之後將其渲染出來,它將被設置爲aModifiedTexture的內容,儘管我從未做過任何會導致這種情況的事情。爲什麼? (使用XNA 3.1)
差異;直到我重新使用渲染目標來執行應該是沒有操作的操作時,纔會觸及aRegularTexture。如果有的話,aModifiedTexture應該與aRegularTexture相同,而不是相反... – RCIX
「aModifiedTexture」從未真正出現在您的發佈代碼中,因此很難確切地知道您所指的是什麼。你的意思是bloomTexture? –
另外,如果我的假設是正確的,那麼第二個代碼塊不是空操作。你正在做什麼(我假設)你已經從某個資源加載的紋理,並將其更改爲渲染目標的別名。 –