2012-04-02 3 views
1

So, seit der letzten Frage, fand ich, dass meine Lösung ist, die Textur zu duplizieren, um Referenzprobleme zu vermeiden. Allerdings frage ich:C#/XNA - RenderTarget2D.GetData(), RenderTarget2D.SetData(): ist es effizient für das Klonen von Texturen pro Frame?

Color[] color = new Color[screen.Width * screen.Height]; 
    InputRenderTarget2D.GetData(Color); 
    OutputRenderTarget2D.SetData(color); 

Zum einen, ist das effizient, wenn 60 Mal pro Sekunde lief? Obwohl es eine Textur setzt, bin ich performance-paranoid und möchte die Leistung anständig oder am besten halten. Wird es "deutlich erkennbare Rahmentropfen" und ähnliches verursachen?

Zweitens, wird es die Leistung steigern, dass, anstatt ein neues Farb-Array zu erstellen, ich ein recycle?

Antwort

3

Ich glaube, dies wird die Leistung beeinträchtigen, weil die GetData()/SetData() - Aufrufe die Rendertarget-Daten in den Hauptspeicher übertragen werden. IMO, wäre die bessere Alternative, InputRenderTarget2D zu OutputRenderTarget2D mit einem Quad der gleichen Größe zu machen. Dies verhindert CPU-GPU-Datenübertragung.

+0

Setzen Sie das Renderziel auf OutputRenderTarget und rendern Sie dann InputRenderTarget über GPU-Rendering w/quad oder spritebatch? – Jared

+0

... verwendet Spritebatch eine Möglichkeit auch – Jared

+0

Richtig. Und sicher, Sie können das Quad beliebig rendern. – Ani

Verwandte Themen