XNA – RenderTarget

Render Targets」,簡而言之就是畫布。
其中,一直都在使用的Backbuffer就是其中一個RenderTarget。
對於組合較於複雜的畫面,這是一個重要且必要的技術…
最簡單的範例就是「視窗」,每個視窗內都有或多或少的物件要繪製,對整個視窗做特效也就只需要動到該視窗專用的RenderTarget即可。
再者就是很常見的多Viewport也就一定要用啦~!
進階的就像是即時產生紋理圖之類的。

使用RenderTarget的基本流程:

 // 保留原本的Target
 RenderTarget2D oriTarget = GraphicsDevice.GetRenderTarget(0) as RenderTarget2D;
 GraphicsDevice.SetRenderTarget(0, MyTarget);
 GraphicsDevice.Clear(Color.White);
 // …繪製…
 // 設回原來的Target
 GraphicsDevice.SetRenderTarget(0, oriSpace);




關於使用
RenderTarget時,如果有牽涉到AlphaBlend,會產生莫名其妙的紫色的問題,目前還沒找到真正的解法。
目前可以應急的方式為:
「截取GraphicsDeviceManager的OnPreparingDeviceSettings事件,將RenderTargetUsage設為PreserveContents

{
 // …
 GraphicDeviceManager.PreparingDeviceSettings += OnPreDevSet;
 // …
}
private void OnPreDevSet(object sender, PreparingDeviceSettingsEventArgs e)
 {
  e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;
 }

關於RenderTargetUsage可參考「Rendertarget changes in XNA Game Studio 2.0」。
XNA中的RenderTarget」裡面提到,PreserveContents在PC上的效能會比DiscardContents來得好。
這樣的話,如果只需要在PC上執行,就直接使用
PreserveContents吧!
但如果在X360上呢?這真是個好問題,希望有解法出現。

目前推測應該就是Contents的問題,或許XNA是在繪製每個東西的時候都會比照辦理吧!(炸)

相關連結:
[2.0] SetRenderTarget causes a purple background.
RenderTargetUsage.PreserveContents on Xbox
Purple Sprite Halo
Screen Manager

–End

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s