(Un-)Managed Directx C#/C++ ?
-
Ich muss euch nochmal um Rat fragen bezüglich der Wahl zwischen C++ und unmanaged Directx bzw. C# und managed Directx.
Bei C++ war ich es gewöhnt mit Zeigern zu hantieren. Z.B. bei der Darstellung einer komplexen 3D-Landschaft mittels eines Quadtrees. Jetzt gibt es ja bei C# wohl keine Zeiger mehr. Wie würde man das ganze also in C# realisieren? Mit dem Quadtree konnte ich immer nur den Teil der Landschaft darstellen lassen, der auch wirklich sichtbar ist.
Ist managed Directx für ein solches Szenario von der Performance her überhaupt sinnvoll? Ich hatte ja gedacht ich kann in C# auch unmanaged DX verwenden, was aber wohl doch nicht geht. Und was ist eigentlich mit diesem Wrapper bei managed Directx gemeint? Ist managed DX also gar kein richtiges DX?
Welche Einschränkungen gibt es denn bei der Verwendung von WPF in C++ ausser der umständlicheren Programmierung, weil ich die GUI nun nicht mehr mit dem Designer bzw. MS Expression erstellen kann?Gruß Student83
-
Jetzt bin ich vollends verwirrt. Sagt blos man kann in einer WPF-Anwendung auch kein managed Directx benutzen. Sehe ich das also richtig, dass
unmanaged Directx und C++,
managed Directx und C#
und WPF-Anwendungendrei komplett unterschiedliche paar Schuhe sind? Wobei die Verwendung von WPF für 3D-Spiele nicht wirklich geeignet ist, da schlechte Performance und die anderen beiden von der Performance her in etwa gleichwertig sind? Dann werde ich die WPF-Sache gleich wieder vergessen und das Programm mit C++ programmieren.
-
Der Nachfolger von "Managed DirectX" ist XNA, drum herum hat Microsoft ne eigene Community gebastelt:
http://creators.xna.com/de-DE/
Für XNA gibts sogar ne eigene* IDE von MS:
http://www.microsoft.com/downloads/details.aspx?FamilyID=80782277-d584-42d2-8024-893fcd9d3e82&displaylang=enAußerdem gibt es noch SlimDX:
http://slimdx.org/features.phpUpdate: *so liest sich das zumindest, stimmt aber nicht wirklich.
Es werden in einem installierten Visual Studio (wohl auch Express) neue Projekttypen hinzugefügt....(btw: bzgl. Pointer in C#: http://msdn.microsoft.com/en-us/library/t2yzs44b.aspx)
-
Blöderweise unterstützt XNA kein Windows XP, Directx 10/11 auch nicht. Damit kommt es nicht in Frage.
-
DirectX ist eine C API.
Managed DirectX ist eine Wrapper um DirectX-API für .NET.
und WPF ist ein Framework bzw fast eine Engine um 2D/3D-Oberflächen zu visualisieren und nutzt daher DX (IMO mit eigene P/Invoke auf DirectX).
XNA ist eher ein Game-Framework.
-
Also kann mir mal jemand sagen was sich Microsoft mit diesem ganzen Chaos eigentlich gedacht hat? Richtiges Directx geht nur mit C++, hier ist man aber was die GUI betrifft total eingeschränkt bzw. muss einen riesigen Aufwand betreiben. Managed Directx wird in Zukunft nicht mehr unterstützt. XNA ("die Zukunft") unterstützt Directx nur bis 9.c, wo wir doch demnächst bei 11.1 sind. WPF ist super um GUIs zu erstellen, aber für Directx nicht zu gebrauchen.
Gibt es nicht die Möglichkeit, dass ich die GUI mit WPF darstelle und getrennt davon den Fensterinhalt mit managed oder auch unmanaged Directx?
-
Hi,
also managed directX, gibt es nicht mehr, dafür gibt es nun XNA.
XNA geht natürlich auch unter WindowsXP, ich nutze schon länger XNA.
XNA ist ein Framework mit dem es möglich ist, für XBox und PC, Spiele zu
entwicklen. Was, wie ich finde, sehr vorteilahft ist.
Bis jetzt brauchte ich noch kein DX10 und DX11.
und wenn man sich mal die Spiele für XBOX anguckt...
Wieviel Spiele gibts schon für DX10? glaub mir fallen da nur 2 ein,
die aber auch, genauso gut aussehen wie unter 9.
Aber leider ja, wenn man DX10&11 nutzen will muss man "noch" C++ nutzen.XNA geht auch mit wpf und windows forms, man brauch nur ein Handle
von dem fenster, was bei wpf etwas komplizierter ist, da wpf nich
mit handles arbeitet, dafür gibt es aber eine Helperklasse.Zeiger sind auch mit C# möglich, mit dem Schlüsselwort unsafe.
Dann schreibst du unsafe Code. Oder halt mit "ref" etc arbeiten.
-
Ich wollte ja immer C++/CLI mit Unmanaged DirectX verwenden, aber mit Visual Studio 2010 degradiert Microsoft C++/CLI. Das wäre so ziemlich die einzige Möglichkeit gewesen, unmanaged DirectX mit den einfachen Forms von .NET zu verwenden
-
C++/CLI ist doch managed C++? Dann habe ich das auch gelesen.
Für WPF und managed/unmanaged Mixcode habe ich in der MSDN folgendes gefunden:
http://msdn.microsoft.com/en-us/library/ms742522.aspx
und dann noch folgender Trick:
www.codeguru.com/cpp/cpp/cpp_managed/general/article.php/c16355
Beschreiben die beiden Links also die Nutzung von WPF mit C++/CLI? So ganz klar ist mir das nicht, oder ist das noch eine andere Möglichkeit? Falls nicht macht dieser Weg wenn man demnächst VS 2010 nutzen möchte also auch keinen Sinn mehr. Ich frage mich nur warum man so wenig darüber liest. Bin ich der einzige, der ne schöne GUI und nativ mit DirectX programmieren möchte?
Dann bleibt ja eigentlich nur noch eine WPF-Anwendung mit XNA. Aber das ist auch wieder nur ne halbe Sache.
Oder man schreibt sich eine eigene GUI und lässt diese direkt mit ins Directx-Fester rendern. In diesem Fall aber zu zeitaufwändig, weil die GUI schon recht komplex werden wird.
-
EDIT:
Ich habe mich nochmal internet umgeschaut und es gibt wohl doch die Möglichkeit Direct3D9 mit unmanaged C++ in einer WPF-Anwendung zum Laufen zu bringen.
Dazu habe ich folgendes Code-Beispiel gefunden:www.codeproject.com/KB/WPF/D3DImage.aspx
Leider lässt es sich bei mir nicht compilieren (Win 7 x64). Sobald ich wie im Text beschrieben "nicht verwaltetes Debugging aktiviere" bekomme ich die Fehlermeldung, dass der Debugger keine gleichzeitiges Debugging von verwaltetem und systemeigenem Code auf dieser Platform unterstützt.
Lasse ich diese Einstellung weg, kommt folgender Fehler:{"Die in der Assembly \"D3DImageSample, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null\" definierte Instanz von \"Window1\" kann nicht erstellt werden. Ein Aufrufziel hat einen Ausnahmefehler verursacht. Fehler in Markupdatei \"Window1.xaml\", Zeile 1, Position 9."}.
Laut den Kommentaren auf obiger URL hat dies auch mit Windows 64bit zu tun.
-
Ich werfe mal noch nen Link in den Thread:
http://code.msdn.microsoft.com/WindowsAPICodePackWindows
API Code Pack for Microsoft
.NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. These Windows features are not available to developers today in the .NET Framework.
The individual features supported in this version (v1.0.1) of the library are:
[...]
Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs
[..]