Eine Alternative zu XNA: Das ANX.Framework

Wer meine Tweets oder meine Posts im XNA.mag verfolgt, der hat sicherlich schon mitbekommen, dass ich mich die letzten Wochen intensiv mit meinem neuen Projekt ANX beschäftigt habe. In diesem Beitrag möchte ich ein paar Sätze zum ANX.Framework verlieren und euch so ein wenig teasern 🙂

Das ANX.Framework ist ein Drop-In-Replacement für Microsofts XNA-Framework. Die Idee dazu ist mir unmittelbar nach der letzten Build-Konferenz gekommen. Dort wurde viel über Windows 8 und das neue DirectX 11.1 geschrieben, erzählt und berichtet, aber leider waren die XNA-Themen extrem dünn gesät. Extrem dünn ist dabei noch freundlich ausgedrückt, denn eigentlich wurde das Thema XNA komplett unter den Tisch gekehrt und Microsoft hat sich seitdem zur Zukunft von XNA in Schweigen gehüllt. Dies hat sich bis zum heuten Tag leider nicht geändert und somit ist ziemlich unklar, wie die Zukunft von XNA aussieht. Sicherlich ist es jetzt nicht schlagartig gestorben und sicherlich wird es das auch nicht sein, wenn Windows 8 auf den Markt kommt, auch wenn man wohl mit XNA keine Spiele im Metro-Style für Windows 8 machen kann (und das sind die einzigen Spiele, die über den Marktplatz verkauft werden können), denn dafür wird C++/DirectX 11.1 benötigt.

ANX.Framework

Nachdem ich erfahren hatte, dass Alexandre Mutel in SharpDX 2.0 DirectX 11.1 und Windows 8 Support anbieten möchte kam mir die Idee, dass man doch auf Basis von SharpDX ein Framework entwickeln könnte, dass es ermöglicht mit C# Spiele für Windows 8 im Metro Style zu entwickeln. Da ich mich sehr gut mit XNA auskenne und dieses Framework vom Design her extrem gelungen finde war natürlich schnell die Idee da, dass man sich ja an XNA orientieren könnte. Damit aber nicht genug. Aus meiner Ogre3D-Zeit erinnerte ich mich noch an das abstrakte RenderSystem, welches dort eingesetzt wurde. Dies hat mir damals schon gefallen und so kam die Idee, dass man dieses neue Framework auch so gestalten könnte und so nicht nur ein DirectX 11.1 RenderSystem, sondern auch eines für DirectX 10 und eines für OpenGL 3 entwickeln könnte. Wenn man C# und OpenGL 3 hört, dann kommt man ziemlich schnell auf OpenTK und dieses bietet vollen Mono-Support und auch eine OpenGL ES 2.0 Unterstützung. Diesen Gedanken habe ich einfach ein wenig weitergesponnen: OpenGL und Mono, also sollte es keine riesigen Schwierigkeiten bereiten ANX auf MacOS und Linux zu verwenden und dank OpenGL ES 2.0 steht auch noch die Welt von iOS und Android offen.

Mit diesen Ideen war schnell ein Konzept für ANX entwickelt:

Das ANX.Framework soll Source-kompatibel zu XNA sein. Eine Übersetzung zwischen ANX und XNA soll durch austausch von Referenzen und Namespaces manuell in kürzester Zeit und automatisiert durch ein Tool möglich sein. Dabei soll auf Plattformunabhängigkeit geachtet werden, aber sichergestellt sein, dass sich die grafische Repräsentation auf jedem System an XNA orientiert um ein konsistentes Ergebnis zu erhalten.

Mit ein paar Mitstreitern (bis zu acht) habe ich nun in den letzten zehn Wochen im Team mit den anderen eine ganze Menge auf die Beine gestellt. Der erste Milestone „SpriteBatch rendert“ wurde erreicht und das Projekt wurde nach knapp 500 SVN-Commits auf CodePlex als Open-Source-Projekt unter der MS-PL Lizenz veröffentlicht. Dieses Projekt findet ihr unter http://anxframework.codeplex.com.

ANX steht übrigens – getreu dem großen Vorbild – für „ANX’s not XNA“.

Damit ist die Entwicklung natürlich noch nicht abgeschlossen und diese Story natürlich ebenfalls nicht…

…to be continued

Advertisements

Veröffentlicht am 29.11.2011 in Random Noise und mit , , , , , , getaggt. Setze ein Lesezeichen auf den Permalink. 31 Kommentare.

  1. Schönes Projekt, vor allem wenn Microsoft XNA wirklich zu Gunsten der Metroapps fallen lassen will.

    Ich selbst habe mich nach deinem Artikel „XNA vor dem Aus?“ in Richtung Grundlagen orientiert und mit Hilfe einiger sehr lesenwerter Literatur meine ersten Gehversuche in DX11 komplett ohne 3rd Party Engine gemacht. Wenn ich hier auf die ersten größeren Probleme stoße, werde ich mir wohl auch mal dein ANX genauer anschauen 🙂

    • Danke sehr 🙂 Ich kann mich mit nativem DirectX (und OpenGL) einfach nicht wirklich anfreunden. Mit C# und einem Framework wie XNA kann man soviel produktiver arbeiten und sich einfach auf wesentlichere Dinge konzentrieren. Es macht einfach mehr Spaß 😉

      • NeoArmageddon

        Ich finde, sobald man über die Initialisierung hinaus ist, macht es mindestens genau so viel Spaß wie mit XNA zu arbeiten.
        Klar ist die Produktivität mit XNA zunächst größer, aber sich seine eigenen Modelformate auszudenken, zu implementieren und zu verbessern macht (zumindest mir) sehr viel Spaß und man kann meiner Meinung nach viel flexibler arbeiten. Das Fehler einer Content-Pipeline bringt einen dazu, sich selbst Gedanken zu machen, und das ist ja eigentlich niemals negativ.

        A pro pro: Wie willst du die Content-Pipeline in AXN realisieren? Auch ein „Port“ von XNA, sprich mit den Tools in Visual Studio C# oder wird es vielmehr eine Rückwärtskompatiblität die mit neuen eigenen Formaten ergänzt wird?

      • Das sind zwar duchaus interessante Punkte, aber ich finde es beim ersten und vielleicht noch beim zweiten mal interessant diese Dinge „per Hand“ zu machen, aber spätestens beim dritten mal ist es nur noch nervig, wenn man seitenweise Quelltext schreiben muss um DirectX (oder OpenGL) anständig zu initialisieren, alle Fehler abzufangen und Assets zu laden. Schnell landet das in einem persönlichen Framework, das man wiederverwendet und was dann noch bleibt: die „Unzulänglichkeiten“ von C++ gegenüber C#. Sicherlich kann C++ in einigen Situationen schneller sein, aber C# ist doch viel bequemer und wenn man es anständig und korrekt verwendet selten langsamer. Und wenn man eine Managed-Library wie SharpDX oder SlimDX verwenden möchte, dann gibt es nicht mehr viele Argumente gegen XNA (oder in Zukunft ANX), sondern eher nur Vorteile 😉

        Einer der größten Vorteile von XNA ist in meinen Augen (neben der ContentPipeline), dass man für bestimmte Dinge gezwungen ist, den XNA-Weg zu gehen. Ein Beispiel ist z.B. das es in XNA nicht möglich ist auf den Depth-Buffer per Textur zuzugreifen (damit meine ich nicht, wenn die Tiefendaten per Shader in eine RenderTexture geschrieben werden, sondern den direkten Zugriff des Depth-Buffers der sowieso angelegt wird). Mit nativem DirectX ist dies problemlos möglich, allerdings unterstützen exakt das die meisten Grafikkarten nicht. Für derartige Komplexitäten gibt es mehrere Dutzend Beispiele und es macht absolut keinen Spaß solche Fehler zu debuggen (sprich Fehler die nur auf fremder Hardware auftreten, die man selbst nicht hat und man daher nicht debuggen kann).

        Zur ContentPipeline: Im ersten Schritt werden Importer, Processor und Writer von XNA verwendet. Die Reader haben wir bis auf wenige Ausnahmen bereits komplett umgesetzt und die unterstützen eine „transparente“ Übersetzung. Der einzige Nachteil dabei ist, dass man für die Entwicklung auf Visual Studio und Windows beschränkt ist. Für einige Dinge, wie z.B. die Multi-Format-Effekte haben wir eigene Erweiterungen für die ContentPipeline entwickelt. Vielleicht werden wir zukünftig mal die gesamte Pipeline portieren, aber der Aufwand steht momentan in keinem Verhältnis zum Nutzen.

      • NeoArmageddon

        Klar, die Grundlagen will man sich bei jedem Projekt nicht wieder antun, aber ich denke zumindest einmal sollte man alles von Grund auf geschrieben haben. So viel wie ich in den letzten paar Monate über die Grundlagen von Grafikanwendungen gelernt habe, habe ich bei meinem rumspielen mit Ogre3D, Tribase oder XNA nicht einmal ansatzweise mitbekommen. Hat man die Grundlagen dann drinnen, macht es meiner Meinung nach dann auch Sinn, sich einem Framework wie XNA zu zuwenden, weclhes einem einen Großteil der Arbeit abnimmt (die man aber mittlerweile in seiner Gänze versteht).

        Ich denke, als du mit dem XNA-Framework begonnen hast zu arbeiten, wusstest du schon, worum es sich handelt, was es tut und wie es arbeitet, so das dieser Verstehensschritt, was nun eigentlich genau passiert, nicht nötig war.

        Zu C++ und C#: Stimme dir vollkommen zu, das C# zu Spieleentwicklung wesentlich bequemer ist. Aber da ich auch in der Uni mit C++ arbeite, ist es bei mir wohl eher eine Gewöhnungssache, für welches ich mich im Zweifel entscheide.

      • Nein, ich habe bei XNA kaum gewusst wie es funktioniert. Ich hatte zwar schon DirectX-Erfahrung und damit schon mal etwas gemacht und auch mit Ogre3D, aber ich habe mich bei XNA sehr detailliert darüber informiert wie etwas funktioniert und warum es so umgesetzt wurde, wie es umgesetzt wurde. Ich habe endlose Tests, Benchmarks etc. gemacht um zu verstehen was da passiert und warum es passiert. Das ist auch extrem wichtig, denn die Einfachheit von XNA ist zwar sehr bequem, macht aber in keinem Fall die Grundlagen überflüssig.

        Und auch jetzt lerne ich noch sehr viel über die Interna von XNA und insbesondere die Design-Entscheidungen von XNA 4.0, da ich mich im Rahmen der Entwicklung des ANX.Framework sehr intensiv und detailliert damit beschäftige.

  2. Nettes Projekt.
    Leider habe ich mich durch die Schule, immer weiter von XNA weg bewegt. Momentan bin ich nur noch mit Unity3D dran. Was etwas schade ist den ich habe gerne für die Starlight,Engine gearbeitet.

  3. Wenn du das alles auf die beine stellst was du da an träumen äusserst…. Das wäre echt Eine bereicherung für die XNA community. Vor allem die kompatibilität die du ankündigst wäre unglaublich.

    Ps: wird ANX ein stand alone framework?

    • Vieles geht ja bereits (ich arbeite gerade in diesem Moment z.B. an Stencil-Buffern) und die Kompatibilität sollte zumindest möglich sein. Andere Projekte (OpenTK und Mono) haben ja schon eine super Vorarbeit geleistet, so dass dies hauptsächlich Fleißarbeit sein sollte.

      Was meinst du mit Stand-Alone-Framework?

  4. Wirklich ein sehr tolles Projekt 😀
    Ich hatte nach deinem Blogartikel „XNA vor dem Aus“ schon zweifel bekommen ob es sich überhaupt noch auszahlt dass ich mich so intensiv mit XNA beschäftige. Aber nach dem ich nun von dem Projekt gehört habe bin ich nur noch mehr motiviert mich weiter mit XNA zu beschäftigen. Wäre wirklich sehr schade wenn so ein tolles Framework wie XNA verschwinden würde bzw. nicht mehr weiterentwickelt wird. Die Kompatibilität ist natürlich noch das i-Tüpfchen.

    • Kurze Zusatzfrage:
      Arbeitet der Programmierer von SharpDX auch bei euch im Team mit? Auf seiner Seite steht nämlich eine Andeutung die ziemlich gut auf euer Projekt zutrifft.

      „Framework of higher level, similar to XNA but built on top of DirectX 11 (but with support for Direct3D9, Direct3D10 hardware)“

      • Nein, Alexandre von SharpDX arbeitet nicht bei uns im Projekt mit, obwohl ich in engem Kontakt mit ihm stehe. Er hatte vor einiger Zeit die Arbeiten an so einem Framework begonnen, aber aus Zeitmangel ist und wird er nach eigener Aussage nicht dazu kommen dieses in naher Zukunft weiter zu entwickeln. Als ich ihm von ANX berichtet habe, war er sehr froh darüber, dass wir so ein Projekt starten, da er sich dann nicht darum kümmern muss. Er hat mir sogar angeboten, dass er ANX bewerben wird und findet unsere bisherige Arbeit sehr gut.

  5. Für diesen Blogpost könnte ich direkt deine Glatze knutschen! Danke für so ein tolles Projekt.

    • Es freut mich, dass dir das Projekt gefällt 🙂 Ich hoffe, wir können deine Erwartungen erfüllen und bis dahin: ruhig weiterempfehlen 😉

  6. Wird das neue Framework denn genauso gute Unterstützung für VB bieten? Ich kann mich mit C# irgendwie nicht wirklich anfreunden 😀

    • ANX wird genau so guten Support für VisualBasic.NET (und Boo, J# und C++/CLI) bieten, wie dies XNA auch macht, nämlich offiziell keinen 🙂 Die Sprachunabhängigkeit des .NET-Framework kann hier aber ganz stark ihre Vorteile ausspielen: Im Grunde genommen ist es nämlich egal in welcher Sprache eine Assembly geschrieben wurde, denn alles wird von den jeweiligen Compiler in eine Intermediate-Language (IL) kompiliert und zwar immer in die Gleiche. Die Sprache ist also für die Verwendbarkeit vollkommen uninteressant (bis auf ein paar Kleinigkeiten).

      Kurze Antwort also: Ja für die Verwendbarkeit, Nein für die Dokumentation (falls sich nicht jemand dafür findet).

  7. Ich wollte mich einfach mal bedanken für diese super Seite! Mach weiter so!

  8. Hört sich echt klasse und sehr interessant an, ich werde das Projekt auf jeden Fall im Auge behalten 😉

    Ich habe bisher keine Erfahrung mit Engines und Frameworks für mehrere Plattformen gemacht, also Frameworks/Engines die DirectX und OpenGL unterstützen. Deshalb stellt sich mir die Frage wie ihr zum Beispiel Dinge wie Shader umsetzen wollt. Wenn man als Benutzer dieses Framworks einen Shader schreiben muss, muss man diesen dann sowohl in HLSL als auch in GLSL umsetzen oder entwickelt ihr (oder gibt es gar sogar) eine andere Shader Sprache die zu beidem kompatibel ist?

    • Freut mich, dass du unser Projekt interessant findest 🙂

      Zu den Shadern: Momentan ist es so, dass man mehrere Shader schreiben muss. Einen für DirectX 10/11 (mindestens Shader Model 4.0) und einen für OpenGL. Diese werden dann in ein Effect-XNB kodiert und geladen, wenn sie benötigt werden. So kann man das RenderSystem beliebig austauschen.

      Natürlich kann man auch einfach OpenGL für alle Plattformen verwenden und muss dann nur einen GLSL-Shader entwickeln.

      Eine Alternative sind CG-Shader von NVidia. Diese unterstützten sowohl OpenGL, als auch DirectX. Ob dies zukünftig eine guter Weg wäre, an den Mehrfach-Shadern vorbei zu kommen wird sich noch zeigen.

  9. Bei den ersten Sätzen von dem Blogpost, ist soetwas wie eine meine kleine Programmier-Welt zusammengebrochen (ich verbring ca, 80% meiner Zeit mit XNA und 20% mit allem anderen für die Schule). Doch dann habe gelesen was das ANX – Framework alles kann und was soll ich sagen ich bin begeistert. Solltest du mal einen Tester brauchen der Grundlagen testet oder versucht damit einfach Spiele zu schreiben, dann kannst du es ruhig mir sagen ich würde das sehr gerne machen 🙂

    Danke dafür,
    das du meinem Tag gerettet hast 😀

    Lg,Domi

    • Aber gerne doch 🙂

      Testen kannst du immer und jederzeit… Vieles geht in der aktuellen Version schon, aber gerade gewisse kleine „Sonderfälle“ knallen immer, da es halt schwer ist, alles zu beachten ohne entsprechende Testfälle zu haben.

  10. Ich hoffe das daraus etwas wird.
    Ich persönlich finde c++ ziemlich unsortiert, kA warum.

  11. Wen XNA wirklich fallen gelassen wird, wie sollen denn bestehende WP7 Games auf WP8 für Tablets konvertiert werden?

  12. Ups, ich meinte natürlich W8! Währe doch schade wenn man wp7 Spiele nur mit viel Aufwand auf w8 (rt) bringen könnte. Wer weis, vielleicht kann man mit wp8 auch mal eigene shader verwenden=)

    • Nunja, Microsoft hat bestätigt, daß WP7 Spiele auch auf WP8 (Codename „Apollo“) laufen werden. Ob man auf WP8 immer noch mit XNA Spiele entwickeln wird und kann wurde weder bestätigt, noch dementiert.

      Unter Windows 8 sieht es ähnlich aus. XNA-Spiele, DirectX 9, 10 und 11 werden ganz normal funktionieren. Alles läuft so, wie es auch unter Windows 7 gelaufen ist. Eine Ausnahme ist WOA (Windows on ARM), welches unter anderem für Tablets eingesetzt werden wird. Dort laufen nur Metro Style Apps und Metro Style Games. Auf x86/x64 Rechnern, also den ganz normalen PCs ist dies nur eine Alternative. Dort gilt die Einschränkung für Metro Style Apps und Metro Style Games nicht. Möchte man jedoch den Windows Marketplace zum Verkauf seiner Apps verwenden, so unterliegt man dieser Einschränkung wieder.

      Mit XNA ist es nicht möglich Metro Style Games zu entwickeln. Microsoft empfiehlt dazu DirectX und C++/Cx. Alternativ könnte man auch SharpDX verwenden und vielleicht auch mal das ANX.Framework.

  13. Wenn der Vollbildmodus irgendwann mal funktioniert, wechsel ich vielleicht auch zu ANX 😉

  14. Ich habe mir jetzt auch das ANX Framework geladen. Mal sehen wie weit ich damit komme.

  15. ANX? Wuhu, ein neuer Spielplatz 😀

  16. germancsharptutorials

    Ich habe, wenn ich ANX installiert habe, keine neuen Projektvorlagen

  1. Pingback: RIP XNA « "Mit ohne Haare"

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: