RenderTexture2D只是一個臨時的內存構造,並且會相當快速和經常刷新。這是因爲它被重複使用以努力節省內存,並在較小程度上加快速度。因此,您應該只將它視爲臨時存放紋理的地方。你會想把它移到一個合適的Texture2D中,這個Texture2D會被存儲更長的時間。只是做一個簡單的:
Texture2D YourPic = (RenderTexture2D)SomeRenderedPic;
不會這樣做。這只是將指針傳遞給渲染圖像的內存空間。當顯卡丟棄時,它仍然會消失。你想要做的是更多的東西一樣:
Color[] MyColorArray = new Color[SomeRenderedPic.Width * SomeRenderedPic.Height];
SomeRendeerPic.GetData<Color>(MyColorArray);
Texture2D YourPic = new Texture2D(
GraphicsDevice,
SomeRenderedPic.Width,
SomeRenderedPic.Height);
YourPic.SetData<Color>(MyColorArray);
現在,如果我都颳起了該代碼的權利,那麼它應該指針存儲數據,而不是進入新的紋理。這使得新紋理有自己獨特的內存空間,不會像渲染目標空間那樣被刷新。
這種方法存在缺陷。它不能以XNA的全新刷新率完成。 (每秒60幀......我認爲......也許30 ...我忘記了。)無論如何,如果你需要持續不斷的刷新,這可能不夠快。然而,如果你正在創建一個靜態紋理,如果它從來沒有真正改變過,那麼這可能會對你有用。
希望這是有道理的,因爲我在飛行和深夜寫這個。如果這不起作用,我表示歉意。如有需要,請隨時寫信給[email protected]。如果我能夠回答你的問題,我會很樂意。
否則祝你好運,並有創造力。我相信有一個解決方案。
X傑里米M.
建議將這個問題添加到http://gamedev.stackexchange.com/來代替,那就是很多gamedev玩家隱藏的地方。 – 2012-08-14 06:55:02