Seite 1 von 1

XNA - Rendertargets funktioniert nicht

Verfasst: 18.09.2010, 18:14
von BCT1
Hey, ich hab ein Problem mit Rendertargets. Ich muss einen Text mithilfe der Rendertargets in ein Texture2D bringen, doch immer wenn die Sprites in meinem Rendertarget gezeichnet sein sollten ist dort nur schwarzer Bereich. Ich hab keine Ahnung woran das liegen könnte, das Rendertarget lässt sich einfach nicht zeichnen.

Hoffe Ihr könnt mir helfen.
-BCT1

Re: XNA - Rendertargets funktioniert nicht

Verfasst: 18.09.2010, 19:32
von RustySpoon
Code bitte. ;)

Re: XNA - Rendertargets funktioniert nicht

Verfasst: 18.09.2010, 20:05
von BCT1
Damit zeichne ich in das Rendertarget und speichere die Datei:

Code: Alles auswählen

spriteBatch.Begin(SpriteBlendMode.None, SpriteSortMode.Texture, SaveStateMode.SaveState);

RenderTarget2D target = new RenderTarget2D(device, 800, 600, 1, device.DisplayMode.Format);
device.SetRenderTarget(0, target);

// Hier wird gedrawed

device.SetRenderTarget(0, null);

SpriteBatch.End();

Texture2D textur;
textur = target.GetTexture();
textur.Save("testbild.bmp", ImageFileFormat.Bmp);

Re: XNA - Rendertargets funktioniert nicht

Verfasst: 18.09.2010, 20:25
von RustySpoon
Die Reihenfolge deiner Aufrufe sieht falsch aus. Das Rendertarget solltest du irgendwo während der Initialisierung anlegen, zumindest nicht immer wieder neu. Und dann ist die klassische Reihenfolge: Rendertarget setzen, SpriteBatch begin, zeichnen, SpriteBatch end, RenderTarget freigeben und ab dann kannst du auf die Textur zugreifen.

Re: XNA - Rendertargets funktioniert nicht

Verfasst: 18.09.2010, 20:33
von BCT1
Stimmt, ich hätte "device.SetRenderTarget(0, null)" nachdem ich spriteBatch beendet hatte aufrufen sollen. Jetzt gehts.
Danke

Re: XNA - Rendertargets funktioniert nicht

Verfasst: 27.09.2010, 16:18
von hanna
Habe gleiche Erfahrung gemacht..

Re: XNA - Rendertargets funktioniert nicht

Verfasst: 01.10.2010, 03:34
von Firzen14
Nur einfach nochmal zur Erklärung warum.
Die SpriteBatch-Klasse zeichnet nicht alles sofort wenn ihr einen Draw-Befehl gebt sondern reiht den in eine Queque, also eine Warteschlange, ein.
Sobald ihr SpriteBatch.End(); callt werden sämtliche gesammelten Draw-Aufrufe ausgeführt. Das passiert auch nicht notwendigerweise in der Reihenfolge in der sie aufgerufen wurden, denn dafür gibt es den SpriteSortMode.

Also im Prinzip hast du dir dein Rendertarget geholt, als du noch garnichts gezeichnet hattest, darum schwarz.
Nur so als kleiner Tipp hintendran, wenn ihr das Rendertarget auflöst wollt ihr möglicherweise den Backbuffer neu zeichnen weil ab und an Artefakte zurückbleiben können.

MfG
Firzen