XNA 4: Probleme mit WinForms

Nachdem mein anderer Beitrag über Probleme und Lösungen bei XNA 4.0 Upgrade ja scheinbar ein paar Leuten geholfen hat, gibt es jetzt das gleiche nochmal für XNA in Kombination mit Windows Forms, wie es ja oft bei Editoren zu finden ist. Ich baue meinen Editor auf diesem soliden Gerüst auf, und wollte jetzt auch hier langsam mal auf XNA 4 wechseln. Was gab es also für Probleme?

Die Klasse Color befindet sich jetzt nicht mehr unter XNA.Framework.Graphics, sonder nur noch unter XNA.Framework. Das für u.U. zu Problemen mit den usings, da es ja auch Windows.Forms.Color gibt. Hier ist der Trick, das man bei using auch einen alternative Namen angeben kann:

using XNA = Microsoft.XNA.Framework

Damit kann man jetzt z.B. mit XNA.Color auf die richtige Klasse zugreifen.

Das alte GraphicsDeviceSample funktioniert nicht mehr. Viele werden ihre WinForms Integration auf diesem Sample aus dem AppHub aufbauen, doch durch die Änderungen muss auch hier einiges geändert werden. Glücklicherweise hat Microsoft das schon gemacht, es reicht das Sample nochmal runterzuladen und die jeweiligen Dateien zu ersetzen.

Texure2D.FromFile heißt jetzt Texture2D.FromStream. Das war auch praktisch schon die gesamte Änderung… Ist nur eine Änderung des Namens, die Methode hat vorher auch schon Streams akzeptiert… Jetzt werden aber keine Dateinamen mehr angenommen, diese muss man in ein new FileStream() einbetten.

Texture2D.FromStream skaliert Texturen, die über 2048px groß sind. Dieses Problem hat mich ein paar Stunden gekostet: Ohne Änderung (s.u.) ist das GraphicsDevice auf das Reach-Profil eingestellt, was ja (wegen dem Windows-Phone) keine Texture zulässt, die größer als 2048px sind (in Höhe oder Breite). Leider werden größere Texturen, wenn man sie über OpenStream lädt nicht einfach mit einem Fehler abgewiesen sondern skaliert. Das führt dann natürlich zu sehr eigenartigen Effekten, wenn man weiterhin mit Pixelkoordinaten darauf zugreift. Mit Shadern gibt es keine Probleme, bei denen gehen die Koordinaten ja immer von 0-1. Eine direkte Lösung gibt es nicht, aber man kann das Profil ändern, wie ich jetzt beschreibe:

Das GraphicsProfil lässt sich nicht auf HiDef ändern. Bei normalen XNA Games kann man das GraphicsProfil ja in den Eigenschaften ändern, mit der WinForms-Integration fehlt diese Möglichkeit. Die Lösung findet sich in den App Hub Foren: In der Datei „GraphicsDeviceService“ findet man folgenden Code (Z. 65):

graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter,
GraphicsProfile.Reach,
parameters);

Dort kann man das Profil wechseln. 😉

Das neue Premultiplied-Alpha führt zu Darstellungsproblemen. Diese Probleme habe noch nicht ganz behoben, aber es sollte da keine große Probleme geben, da ich ja auch schon mal in meinem anderem Post beschrieben hatte, was sich geändert hat. Diese Änderung führt momentan bei mir nur zu ein paar weißen „Schatten“, was schon aber eigentlich ganz gut aus sieht 😉

Auch hier muss ich wieder sagen: Gute Arbeit, XNA Team! Gute Änderungen eingebaut, aber trotzdem die API nicht elementar geändert. Nur der ärgerliche Effekt mit den Texturen ist meiner Meinung nach blöd gelöst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.